CristopherWVSU commited on
Commit
4d482a6
·
1 Parent(s): bdb2363

added more models

Browse files
classification_report.png → DTCclassification_report.png RENAMED
File without changes
weather_model.pkl → DTCweather_model.pkl RENAMED
File without changes
DTCweather_predictions.png ADDED
KNNclassification_report.png ADDED
KNNweather_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:27f26cb908527f8403b1b9f70e4bceb9f9d2f6f598346d26a8bfaea87bab5414
3
+ size 100934
KNNweather_predictions.png ADDED
RFCclassification_report.png ADDED
RFCweather_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a6f7ead76bce26373973a749b634eaa30b31d088e8e117f1e92205b89f01186f
3
+ size 4201905
RFCweather_predictions.png ADDED
app.py CHANGED
@@ -1,58 +1,90 @@
1
  import streamlit as st
2
  import pandas as pd
3
- import joblib
4
-
5
- # LOAD THE MODEL
6
- model = joblib.load("weather_model.pkl") # Ensure the model is saved as 'weather_model.pkl'
7
 
8
  # MAPPING THE CLASSES
9
  weather_mapping = {"rain": 0, "sun": 1, "fog": 2, "drizzle": 3, "snow": 4}
10
  reverse_mapping = {v: k for k, v in weather_mapping.items()} # Reverse mapping
11
 
12
- # MAPPING THE FEATURE COLUMNS
13
  feature_columns = ["precipitation", "temp_max", "temp_min", "wind"]
14
 
15
  # STREAMLIT UI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  app, model_eval = st.tabs(["Application", "Model Evaluation"])
17
- # STREAMLIT APP TAB 1
 
18
  with app:
19
  st.title("🌦️ Weather Prediction App")
20
- st.write("Enter weather conditions, and the model will predict the weather category!")
21
 
22
- # User inputs
23
  precipitation = st.number_input("Precipitation (mm)", min_value=0.0, max_value=100.0, step=0.1)
24
- temp_max = st.number_input("Max Temperature (°C)", min_value=-50.0, max_value=50.0, step=0.1)
25
- temp_min = st.number_input("Min Temperature (°C)", min_value=-50.0, max_value=50.0, step=0.1)
26
  wind = st.number_input("Wind Speed (km/h)", min_value=0.0, max_value=100.0, step=0.1)
27
 
28
  if st.button("Predict Weather"):
29
  input_data = pd.DataFrame([[precipitation, temp_max, temp_min, wind]], columns=feature_columns)
30
 
31
-
32
- prediction_num = model.predict(input_data)[0]
33
-
34
  prediction_label = reverse_mapping.get(prediction_num, "Unknown")
35
 
36
  st.success(f"🌤️ Predicted Weather: **{prediction_label.capitalize()}**")
37
 
 
38
  with model_eval:
 
 
 
39
 
40
- st.header("Model Evaluation")
41
- st.write("The Weather Prediction model was trained in order to determine the type of weather based on weather conditions. The dataset was taken from kaggle.")
42
- st.write("dataset by Dataset by dataset by ANANTH R. Link to the dataset: https://www.kaggle.com/datasets/ananthr1/weather-prediction")
43
-
44
  # CORRELATION MATRIX
45
- st.title("Correlation Matrix")
46
- st.write("The Correlation Matrix presents the relationship between each features.")
47
  st.image("correlation_matrix.png")
48
 
49
  # WEATHER PREDICTION
50
- st.title("Weather Prediction")
51
- st.write("The image below shows the predicted vs actual weather conditions")
52
- st.image("weather_predictions.png")
 
 
 
 
 
 
 
 
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
- # EVALUATION MATRICS
56
- st.title("Evaluation Metrics")
57
- st.write("The image below represents the Accuracy, F1 score and the classification report of the model")
58
- st.image("classification_report.png")
 
1
  import streamlit as st
2
  import pandas as pd
3
+ import joblib
 
 
 
4
 
5
  # MAPPING THE CLASSES
6
  weather_mapping = {"rain": 0, "sun": 1, "fog": 2, "drizzle": 3, "snow": 4}
7
  reverse_mapping = {v: k for k, v in weather_mapping.items()} # Reverse mapping
8
 
9
+ # FEATURE COLUMNS
10
  feature_columns = ["precipitation", "temp_max", "temp_min", "wind"]
11
 
12
  # STREAMLIT UI
13
+ st.sidebar.title("🔍 Select Model")
14
+ model_choice = st.sidebar.radio("Choose a model:",
15
+ ["Decision Tree (DTC)", "K-Nearest Neighbors (KNN)", "Random Forest (RFC)"])
16
+
17
+ # Load the chosen model
18
+ model_filename = {
19
+ "Decision Tree (DTC)": "DTCweather_model.pkl",
20
+ "K-Nearest Neighbors (KNN)": "KNNweather_model.pkl",
21
+ "Random Forest (RFC)": "RFCweather_model.pkl"
22
+ }
23
+
24
+ model = joblib.load(model_filename[model_choice])
25
+
26
+ # STREAMLIT TABS
27
  app, model_eval = st.tabs(["Application", "Model Evaluation"])
28
+
29
+ # STREAMLIT APP - TAB 1
30
  with app:
31
  st.title("🌦️ Weather Prediction App")
32
+ st.write(f"Using **{model_choice}**, enter weather conditions, and the model will predict the weather category!")
33
 
34
+ # User Inputs
35
  precipitation = st.number_input("Precipitation (mm)", min_value=0.0, max_value=100.0, step=0.1)
36
+ temp_max = st.number_input("Max Temperature (°C)", min_value=-20.0, max_value=50.0, step=0.1)
37
+ temp_min = st.number_input("Min Temperature (°C)", min_value=-20.0, max_value=50.0, step=0.1)
38
  wind = st.number_input("Wind Speed (km/h)", min_value=0.0, max_value=100.0, step=0.1)
39
 
40
  if st.button("Predict Weather"):
41
  input_data = pd.DataFrame([[precipitation, temp_max, temp_min, wind]], columns=feature_columns)
42
 
43
+ # Predict
44
+ prediction_num = model.predict(input_data)[0]
 
45
  prediction_label = reverse_mapping.get(prediction_num, "Unknown")
46
 
47
  st.success(f"🌤️ Predicted Weather: **{prediction_label.capitalize()}**")
48
 
49
+ # MODEL EVALUATION - TAB 2
50
  with model_eval:
51
+ st.header("📊 Model Evaluation")
52
+ st.write("The Weather Prediction models were trained to classify weather types based on conditions. The dataset was sourced from Kaggle.")
53
+ st.write("Dataset by **ANANTH R**. [Link to dataset](https://www.kaggle.com/datasets/ananthr1/weather-prediction)")
54
 
 
 
 
 
55
  # CORRELATION MATRIX
56
+ st.subheader("📌 Correlation Matrix")
57
+ st.write("This matrix shows the relationships between features.")
58
  st.image("correlation_matrix.png")
59
 
60
  # WEATHER PREDICTION
61
+ st.subheader("📌 Weather Prediction Results")
62
+ st.write("Comparison of actual vs predicted weather conditions.")
63
+
64
+ st.header("Decision Tree Classifier Weather Predictions")
65
+ st.image("DTCweather_predictions.png")
66
+
67
+ st.header("K Nearest Neighbor Weather Predictions")
68
+ st.image("KNNweather_predictions.png")
69
+
70
+ st.header("Random Forest Classifier Weather Predictions")
71
+ st.image("RFCweather_predictions.png")
72
 
73
+ # EVALUATION METRICS
74
+ st.subheader("📌 Evaluation Metrics")
75
+ st.write("Accuracy, F1 score, and the classification report of the models.")
76
+
77
+ st.header("Decision Tree Classifier Evaluation Metrics")
78
+ st.write("The image below represents the **Accuracy, F1 score, and classification report** of the Decision Tree Classifier model.")
79
+ st.image("DTCclassification_report.png")
80
+
81
+ st.header("K Nearest Neighbor Evaluation Metrics")
82
+ st.write("The image below represents the **Accuracy, F1 score, and classification report** of the K Nearest Neighbor model.")
83
+ st.image("KNNclassification_report.png")
84
+
85
+ st.header("Random Forest Classifier Metrics")
86
+ st.write("The image below represents the **Accuracy, F1 score, and classification report** of the Random Forest Classifier model.")
87
+ st.image("RFCclassification_report.png")
88
 
89
+ st.header("Comparison")
90
+ st.write("Based on the evaluation metrics, we can assume that out of the three classification algorithms chosen, Ramdom Forest Classifier performs the best using this dataset")
 
 
main.ipynb CHANGED
The diff for this file is too large to render. See raw diff
 
weather_predictions.png DELETED
Binary file (28.4 kB)