Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| import joblib | |
| import matplotlib.pyplot as plt | |
| import seaborn as sns | |
| # Load pre-trained models and scalers | |
| scaler_initial = joblib.load("scaler_initial.pkl") | |
| scaler_with_cluster = joblib.load("scaler_with_cluster.pkl") | |
| kmeans = joblib.load("kmeans.pkl") | |
| linear_model = joblib.load("linear_model.pkl") | |
| poly_model = joblib.load("poly_model.pkl") | |
| ridge_model = joblib.load("ridge_model.pkl") | |
| rf_regressor = joblib.load("rf_regressor.pkl") | |
| logistic_model = joblib.load("logistic_model.pkl") | |
| rf_classifier = joblib.load("rf_classifier.pkl") | |
| # Prediction function | |
| def predict_aqi(pm25, pm10, no2, co, temp, humidity): | |
| # Create input dataframe with initial features | |
| input_data = pd.DataFrame([[pm25, pm10, no2, co, temp, humidity]], | |
| columns=["PM2.5", "PM10", "NO2", "CO", "Temperature", "Humidity"]) | |
| # Scale initial features for clustering | |
| input_scaled_initial = scaler_initial.transform(input_data) | |
| # Apply K-means clustering | |
| cluster = kmeans.predict(input_scaled_initial)[0] | |
| input_data['Cluster'] = cluster | |
| # Scale data with Cluster feature | |
| input_scaled_with_cluster = scaler_with_cluster.transform(input_data) | |
| # Regression predictions | |
| linear_pred = linear_model.predict(input_scaled_with_cluster)[0] | |
| poly_pred = poly_model.predict(input_scaled_with_cluster)[0] | |
| ridge_pred = ridge_model.predict(input_scaled_with_cluster)[0] | |
| rf_pred = rf_regressor.predict(input_scaled_with_cluster)[0] | |
| # Classification predictions | |
| logistic_class = logistic_model.predict(input_scaled_with_cluster)[0] | |
| rf_class = rf_classifier.predict(input_scaled_with_cluster)[0] | |
| # Create performance plot | |
| models = ["Linear", "Polynomial", "Ridge", "Random Forest"] | |
| predictions = [linear_pred, poly_pred, ridge_pred, rf_pred] | |
| plt.figure(figsize=(8, 4)) | |
| sns.barplot(x=models, y=predictions) | |
| plt.title("AQI Predictions by Model") | |
| plt.ylabel("Predicted AQI") | |
| plt.savefig("aqi_plot.png") | |
| plt.close() | |
| output_text = ( | |
| f"Linear Regression AQI: {linear_pred:.2f}\n" | |
| f"Polynomial Regression AQI: {poly_pred:.2f}\n" | |
| f"Ridge Regression AQI: {ridge_pred:.2f}\n" | |
| f"Random Forest AQI: {rf_pred:.2f}\n" | |
| f"Logistic Classification: {'Safe' if logistic_class == 0 else 'Unsafe'}\n" | |
| f"Random Forest Classification: {'Safe' if rf_class == 0 else 'Unsafe'}" | |
| ) | |
| return output_text, "aqi_plot.png" | |
| # Gradio interface | |
| iface = gr.Interface( | |
| fn=predict_aqi, | |
| inputs=[ | |
| gr.Slider(0, 200, label="PM2.5 (µg/m³)", value=50), | |
| gr.Slider(0, 300, label="PM10 (µg/m³)", value=80), | |
| gr.Slider(0, 100, label="NO2 (µg/m³)", value=20), | |
| gr.Slider(0, 10, label="CO (mg/m³)", value=1), | |
| gr.Slider(-10, 40, label="Temperature (°C)", value=20), | |
| gr.Slider(0, 100, label="Humidity (%)", value=50) | |
| ], | |
| outputs=[ | |
| gr.Textbox(label="Predictions"), | |
| gr.Image(label="Model Comparison Plot") | |
| ], | |
| title="Air Quality Prediction and Classification", | |
| description="Enter pollutant levels and weather conditions to predict AQI and classify air quality. Built with multiple machine learning models to address urban air pollution." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() |