-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWeather prediction
1 lines (1 loc) · 11.8 KB
/
Weather prediction
1
{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[{"file_id":"1nSz-0aQFNSirZjdyNlc6nsGVh4lNsnhw","timestamp":1722653887509}],"machine_shape":"hm","gpuType":"L4"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"id":"Z2aFaKRnyK7a"},"outputs":[],"source":["#!pip install tensorflow pandas scikit-learn"]},{"cell_type":"code","source":["import pandas as pd\n","import numpy as np\n","from sklearn.model_selection import train_test_split\n","from sklearn.preprocessing import LabelEncoder, StandardScaler\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.layers import Conv1D, Flatten, Dense\n","from tensorflow.keras.utils import to_categorical\n","from sklearn.metrics import classification_report, accuracy_score\n","import tensorflow as tf\n","import tensorflow.lite as tflite\n","import os"],"metadata":{"id":"ukYsK3_T2-xm"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["data = pd.read_csv('fake_weather_data.csv')"],"metadata":{"id":"BSE5drYc3WKc"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["print(data.head())"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"bzY_XE193aBb","executionInfo":{"status":"ok","timestamp":1722325152222,"user_tz":-420,"elapsed":19,"user":{"displayName":"Minh Phạm Tuấn","userId":"10498019973223653458"}},"outputId":"b2e1b6c2-b358-42bb-8a95-efca9157f05d"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":[" Date Humidity (%) Temperature (°C) Pressure (hPa) Condition\n","0 2020-05-20 52 32 1021 Sunny\n","1 2020-05-21 35 38 1047 Sunny\n","2 2020-05-22 36 36 1037 Sunny\n","3 2020-05-23 72 29 1012 Cloudy\n","4 2020-05-24 59 31 1017 Cloudy\n"]}]},{"cell_type":"code","source":["features = ['Humidity (%)', 'Temperature (°C)', 'Pressure (hPa)']\n","X = data[features]\n","y = data['Condition']"],"metadata":{"id":"vG_W8nns3dFP"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["label_encoder = LabelEncoder()\n","y_encoded = label_encoder.fit_transform(y)\n","y_categorical = to_categorical(y_encoded)"],"metadata":{"id":"F_t6fDDk3ga1"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["scaler = StandardScaler()\n","input_data = scaler.fit_transform(X)\n","num_samples = len(input_data)\n","input_data = input_data.reshape((num_samples, 3, 1))"],"metadata":{"id":"t1rk870Y4Q0d"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["X_train, X_test, y_train, y_test = train_test_split(input_data, y_categorical, test_size=0.3, random_state=42)\n","\n","print(\"X_train shape:\", X_train.shape)\n","print(\"y_train shape:\", y_train.shape)\n","print(\"X_test shape:\", X_test.shape)\n","print(\"y_test shape:\", y_test.shape)"],"metadata":{"id":"pVx0MPoX4tGL","executionInfo":{"status":"ok","timestamp":1722325572984,"user_tz":-420,"elapsed":608,"user":{"displayName":"Minh Phạm Tuấn","userId":"10498019973223653458"}},"colab":{"base_uri":"https://localhost:8080/"},"outputId":"928642b4-551a-4f68-fc2f-9ba65fc0483d"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["X_train shape: (210, 3, 1)\n","y_train shape: (210, 4)\n","X_test shape: (90, 3, 1)\n","y_test shape: (90, 4)\n"]}]},{"cell_type":"code","source":["model = Sequential([\n"," Conv1D(16, kernel_size = 2, activation='relu', input_shape=(3 , 1)),\n"," # MaxPooling2D(pool_size=(1, 1)),\n"," # Conv2D(32, kernel_size=(1, 2), activation='relu'),\n"," # MaxPooling2D(pool_size=(1, 1)),\n"," Flatten(),\n"," Dense(32, activation='relu'),\n"," Dense(len(label_encoder.classes_), activation='softmax') # Output layer with softmax activation\n","])"],"metadata":{"id":"Vb8xZ_Qz5npB"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])"],"metadata":{"id":"KlRbdI_75phn"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["model.fit(X_train, y_train, epochs=10, batch_size=8, validation_split=0.1)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"gLLUPRFv5rvV","executionInfo":{"status":"ok","timestamp":1722179901426,"user_tz":-420,"elapsed":3689,"user":{"displayName":"Minh Phạm Tuấn","userId":"10498019973223653458"}},"outputId":"beb3a76c-f8a0-4ab2-9753-a9785c200d28"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/10\n","24/24 [==============================] - 3s 19ms/step - loss: 1.4024 - accuracy: 0.2487 - val_loss: 1.3155 - val_accuracy: 0.3810\n","Epoch 2/10\n","24/24 [==============================] - 0s 4ms/step - loss: 1.2885 - accuracy: 0.5238 - val_loss: 1.1905 - val_accuracy: 0.5714\n","Epoch 3/10\n","24/24 [==============================] - 0s 4ms/step - loss: 1.1761 - accuracy: 0.7037 - val_loss: 1.0605 - val_accuracy: 0.8571\n","Epoch 4/10\n","24/24 [==============================] - 0s 5ms/step - loss: 1.0408 - accuracy: 0.7831 - val_loss: 0.9049 - val_accuracy: 0.8571\n","Epoch 5/10\n","24/24 [==============================] - 0s 5ms/step - loss: 0.8938 - accuracy: 0.8095 - val_loss: 0.7359 - val_accuracy: 0.9048\n","Epoch 6/10\n","24/24 [==============================] - 0s 4ms/step - loss: 0.7622 - accuracy: 0.8095 - val_loss: 0.5957 - val_accuracy: 0.9524\n","Epoch 7/10\n","24/24 [==============================] - 0s 4ms/step - loss: 0.6644 - accuracy: 0.8201 - val_loss: 0.4952 - val_accuracy: 0.9524\n","Epoch 8/10\n","24/24 [==============================] - 0s 4ms/step - loss: 0.5906 - accuracy: 0.8254 - val_loss: 0.4274 - val_accuracy: 0.9524\n","Epoch 9/10\n","24/24 [==============================] - 0s 4ms/step - loss: 0.5382 - accuracy: 0.8360 - val_loss: 0.3736 - val_accuracy: 0.9524\n","Epoch 10/10\n","24/24 [==============================] - 0s 4ms/step - loss: 0.4978 - accuracy: 0.8360 - val_loss: 0.3283 - val_accuracy: 1.0000\n"]},{"output_type":"execute_result","data":{"text/plain":["<keras.src.callbacks.History at 0x7a75ad9bba90>"]},"metadata":{},"execution_count":11}]},{"cell_type":"code","source":["y_pred_probs = model.predict(X_test)\n","y_pred = np.argmax(y_pred_probs, axis=1)\n","y_true = np.argmax(y_test, axis=1)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"BzpwT6515tx4","executionInfo":{"status":"ok","timestamp":1722179901426,"user_tz":-420,"elapsed":4,"user":{"displayName":"Minh Phạm Tuấn","userId":"10498019973223653458"}},"outputId":"48ce13a0-691f-435a-e981-8a0d809a1334"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["3/3 [==============================] - 0s 17ms/step\n"]}]},{"cell_type":"code","source":["print(\"Classification Report:\")\n","print(classification_report(y_true, y_pred, target_names=label_encoder.classes_))\n","\n","print(\"Accuracy Score:\")\n","print(accuracy_score(y_true, y_pred))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"nN5gNWAu5_p6","executionInfo":{"status":"ok","timestamp":1722179901426,"user_tz":-420,"elapsed":3,"user":{"displayName":"Minh Phạm Tuấn","userId":"10498019973223653458"}},"outputId":"8cf51cdb-fdc3-468b-8728-5642a84786fc"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Classification Report:\n"," precision recall f1-score support\n","\n"," Cloudy 0.95 0.58 0.72 33\n"," Rainy 0.59 0.93 0.72 14\n"," Stormy 0.60 0.60 0.60 5\n"," Sunny 0.88 1.00 0.94 38\n","\n"," accuracy 0.81 90\n"," macro avg 0.76 0.78 0.74 90\n","weighted avg 0.85 0.81 0.80 90\n","\n","Accuracy Score:\n","0.8111111111111111\n"]}]},{"cell_type":"code","source":["def predict_weather(model, data):\n"," prediction = model.predict(data)\n"," predicted_label_index = np.argmax(prediction)\n"," labels = {0: 'sunny', 1: 'cloudy', 2: 'rainy', 3: 'stormy'}\n"," return labels[predicted_label_index]\n","\n","test = [[62, 26, 1020]]\n","\n","print(predict_weather(model, test))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"x52MUh5BpSx3","executionInfo":{"status":"ok","timestamp":1722179901426,"user_tz":-420,"elapsed":3,"user":{"displayName":"Minh Phạm Tuấn","userId":"10498019973223653458"}},"outputId":"e573bf67-b5f1-4b38-f419-b1ca3127fb83"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["1/1 [==============================] - 0s 119ms/step\n","stormy\n"]}]},{"cell_type":"code","source":["converter = tf.lite.TFLiteConverter.from_keras_model(model)\n","tflite_model = converter.convert()\n","\n","# Save the TensorFlow Lite model to a file\n","with open('weather_model.tflite', 'wb') as f:\n"," f.write(tflite_model)\n","\n","# Load the TensorFlow Lite model and allocate tensors\n","interpreter = tflite.Interpreter(model_content=tflite_model)\n","interpreter.allocate_tensors()"],"metadata":{"id":"OJQSUyG0xYCA"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["input_details = interpreter.get_input_details()\n","output_details = interpreter.get_output_details()\n","\n","correct_predictions = 0\n","\n","for i in range(num_samples):\n"," input_data_single = input_data[i:i+1].astype(np.float32)\n"," interpreter.set_tensor(input_details[0]['index'], input_data_single)\n"," interpreter.invoke()\n"," output_data = interpreter.get_tensor(output_details[0]['index'])\n"," prediction = np.argmax(output_data)\n"," true_label = np.argmax(y_categorical[i])\n"," if prediction == true_label:\n"," correct_predictions += 1\n","\n","tflite_accuracy = correct_predictions / num_samples\n","print(f\"TensorFlow Lite model accuracy: {tflite_accuracy}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"EwM8xXWcxpks","executionInfo":{"status":"ok","timestamp":1722179902734,"user_tz":-420,"elapsed":4,"user":{"displayName":"Minh Phạm Tuấn","userId":"10498019973223653458"}},"outputId":"fbb4a833-f5ae-4548-c883-4dd8e8ca2927"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["TensorFlow Lite model accuracy: 0.8466666666666667\n"]}]},{"cell_type":"code","source":["basic_model_size = os.path.getsize(\"weather_model.tflite\")\n","print(\"Model is %d bytes\" % basic_model_size)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"j58tjjFM6TBM","executionInfo":{"status":"ok","timestamp":1722179902734,"user_tz":-420,"elapsed":4,"user":{"displayName":"Minh Phạm Tuấn","userId":"10498019973223653458"}},"outputId":"c0461700-74f6-4d64-dafa-ccd14d8b392e"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Model is 7764 bytes\n"]}]},{"cell_type":"code","source":["!echo \"const unsigned char model[] = {\" > /content/model.h\n","!cat weather_model.tflite | xxd -i >> /content/model.h\n","!echo \"};\" >> /content/model.h\n","\n","model_h_size = os.path.getsize(\"model.h\")\n","print(f\"Header file, model.h, is {model_h_size:,} bytes.\")\n","print(\"\\nOpen the side panel (refresh if needed). Double click model.h to download the file.\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"GRKJEzB76il3","executionInfo":{"status":"ok","timestamp":1722179902734,"user_tz":-420,"elapsed":3,"user":{"displayName":"Minh Phạm Tuấn","userId":"10498019973223653458"}},"outputId":"b827b9fd-a469-44dc-ffd5-ec3138e0e680"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Header file, model.h, is 47,912 bytes.\n","\n","Open the side panel (refresh if needed). Double click model.h to download the file.\n"]}]}]}