diff --git a/3-Web-App/1-Web-App/notebook.ipynb b/3-Web-App/1-Web-App/notebook.ipynb index a4685d24..a9e8ae77 100644 --- a/3-Web-App/1-Web-App/notebook.ipynb +++ b/3-Web-App/1-Web-App/notebook.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -151,7 +151,7 @@ "4 -157.803611 " ] }, - "execution_count": 11, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -165,7 +165,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -174,7 +174,7 @@ "array(['us', nan, 'gb', 'ca', 'au', 'de'], dtype=object)" ] }, - "execution_count": 12, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -191,7 +191,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -220,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -299,7 +299,7 @@ "24 3.0 3 51.783333 -0.783333" ] }, - "execution_count": 15, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -312,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -337,7 +337,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -397,8 +397,30 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model loaded from disk [3]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\AI\\MachineLearning\\ML-For-Beginners\\.venv\\Lib\\site-packages\\sklearn\\utils\\validation.py:2739: UserWarning: X does not have valid feature names, but LogisticRegression was fitted with feature names\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import pickle\n", + "model_filename = 'ufos_model.pkl'\n", + "pickle.dump(model, open(model_filename, 'wb'))\n", + "model = pickle.load(open(model_filename, 'rb'))\n", + "print('Model loaded from disk', model.predict([[50, 44, -12]]))" + ] } ], "metadata": { diff --git a/3-Web-App/1-Web-App/solution/notebook.ipynb b/3-Web-App/1-Web-App/solution/notebook.ipynb index 430bfd9d..054f2575 100644 --- a/3-Web-App/1-Web-App/solution/notebook.ipynb +++ b/3-Web-App/1-Web-App/solution/notebook.ipynb @@ -1,46 +1,126 @@ { - "metadata": { - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.0" - }, - "orig_nbformat": 2, - "kernelspec": { - "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7", - "display_name": "Python 3.7.0 64-bit ('3.7')" - }, - "metadata": { - "interpreter": { - "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2, "cells": [ { + "cell_type": "markdown", + "metadata": {}, "source": [ "## Build a Web App using a Regression model to learn about UFO sighting" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 2, "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datetimecitystatecountryshapeduration (seconds)duration (hours/min)commentsdate postedlatitudelongitude
010/10/1949 20:30san marcostxuscylinder2700.045 minutesThis event took place in early fall around 194...4/27/200429.883056-97.941111
110/10/1949 21:00lackland afbtxNaNlight7200.01-2 hrs1949 Lackland AFB&#44 TX. Lights racing acros...12/16/200529.384210-98.581082
210/10/1955 17:00chester (uk/england)NaNgbcircle20.020 secondsGreen/Orange circular disc over Chester&#44 En...1/21/200853.200000-2.916667
310/10/1956 21:00ednatxuscircle20.01/2 hourMy older brother and twin sister were leaving ...1/17/200428.978333-96.645833
410/10/1960 20:00kaneohehiuslight900.015 minutesAS a Marine 1st Lt. flying an FJ4B fighter/att...1/22/200421.418056-157.803611
\n", + "
" + ], "text/plain": [ " datetime city state country shape \\\n", "0 10/10/1949 20:30 san marcos tx us cylinder \n", @@ -69,11 +149,11 @@ "2 -2.916667 \n", "3 -96.645833 \n", "4 -157.803611 " - ], - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
datetimecitystatecountryshapeduration (seconds)duration (hours/min)commentsdate postedlatitudelongitude
010/10/1949 20:30san marcostxuscylinder2700.045 minutesThis event took place in early fall around 194...4/27/200429.883056-97.941111
110/10/1949 21:00lackland afbtxNaNlight7200.01-2 hrs1949 Lackland AFB&#44 TX. Lights racing acros...12/16/200529.384210-98.581082
210/10/1955 17:00chester (uk/england)NaNgbcircle20.020 secondsGreen/Orange circular disc over Chester&#44 En...1/21/200853.200000-2.916667
310/10/1956 21:00ednatxuscircle20.01/2 hourMy older brother and twin sister were leaving ...1/17/200428.978333-96.645833
410/10/1960 20:00kaneohehiuslight900.015 minutesAS a Marine 1st Lt. flying an FJ4B fighter/att...1/22/200421.418056-157.803611
\n
" + ] }, + "execution_count": 2, "metadata": {}, - "execution_count": 23 + "output_type": "execute_result" } ], "source": [ @@ -86,18 +166,18 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 3, "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "array(['us', nan, 'gb', 'ca', 'au', 'de'], dtype=object)" ] }, + "execution_count": 3, "metadata": {}, - "execution_count": 24 + "output_type": "execute_result" } ], "source": [ @@ -111,14 +191,24 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 4, "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ - "\nInt64Index: 25863 entries, 2 to 80330\nData columns (total 4 columns):\n # Column Non-Null Count Dtype \n--- ------ -------------- ----- \n 0 Seconds 25863 non-null float64\n 1 Country 25863 non-null object \n 2 Latitude 25863 non-null float64\n 3 Longitude 25863 non-null float64\ndtypes: float64(3), object(1)\nmemory usage: 1010.3+ KB\n" + "\n", + "Index: 25863 entries, 2 to 80330\n", + "Data columns (total 4 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Seconds 25863 non-null float64\n", + " 1 Country 25863 non-null object \n", + " 2 Latitude 25863 non-null float64\n", + " 3 Longitude 25863 non-null float64\n", + "dtypes: float64(3), object(1)\n", + "memory usage: 1010.3+ KB\n" ] } ], @@ -132,12 +222,76 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 5, "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SecondsCountryLatitudeLongitude
220.0353.200000-2.916667
320.0428.978333-96.645833
1430.0435.823889-80.253611
2360.0445.582778-122.352222
243.0351.783333-0.783333
\n", + "
" + ], "text/plain": [ " Seconds Country Latitude Longitude\n", "2 20.0 3 53.200000 -2.916667\n", @@ -145,11 +299,11 @@ "14 30.0 4 35.823889 -80.253611\n", "23 60.0 4 45.582778 -122.352222\n", "24 3.0 3 51.783333 -0.783333" - ], - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
SecondsCountryLatitudeLongitude
220.0353.200000-2.916667
320.0428.978333-96.645833
1430.0435.823889-80.253611
2360.0445.582778-122.352222
243.0351.783333-0.783333
\n
" + ] }, + "execution_count": 5, "metadata": {}, - "execution_count": 26 + "output_type": "execute_result" } ], "source": [ @@ -162,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -179,37 +333,55 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, "outputs": [ { + "name": "stdout", "output_type": "stream", - "name": "stderr", "text": [ - "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n", - " FutureWarning)\n", - "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n", - " \"this warning.\", FutureWarning)\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 41\n", - " 1 1.00 0.02 0.05 250\n", - " 2 0.00 0.00 0.00 8\n", - " 3 0.94 1.00 0.97 131\n", - " 4 0.95 1.00 0.97 4743\n", + " 1 0.82 0.22 0.35 250\n", + " 2 1.00 1.00 1.00 8\n", + " 3 1.00 1.00 1.00 131\n", + " 4 0.96 1.00 0.98 4743\n", "\n", - " accuracy 0.95 5173\n", - " macro avg 0.78 0.60 0.60 5173\n", - "weighted avg 0.95 0.95 0.93 5173\n", + " accuracy 0.96 5173\n", + " macro avg 0.96 0.84 0.87 5173\n", + "weighted avg 0.96 0.96 0.95 5173\n", "\n", "Predicted labels: [4 4 4 ... 3 4 4]\n", - "Accuracy: 0.9512855209742895\n", - "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n", - " 'precision', 'predicted', average, warn_for)\n" + "Accuracy: 0.9601778465107288\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\AI\\MachineLearning\\ML-For-Beginners\\.venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:465: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n" ] } ], "source": [ + "# from sklearn.model_selection import train_test_split\n", + "# from sklearn.metrics import accuracy_score, classification_report \n", + "# from sklearn.linear_model import LogisticRegression\n", + "# model = LogisticRegression()\n", + "# model.fit(X_train, y_train)\n", + "# predictions = model.predict(X_test)z\n", + "\n", + "# print(classification_report(y_test, predictions))\n", + "# print('Predicted labels: ', predictions)\n", + "# print('Accuracy: ', accuracy_score(y_test, predictions))\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.metrics import accuracy_score, classification_report \n", "from sklearn.linear_model import LogisticRegression\n", @@ -225,20 +397,28 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ - "[3]\n" + "[1]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\AI\\MachineLearning\\ML-For-Beginners\\.venv\\Lib\\site-packages\\sklearn\\utils\\validation.py:2739: UserWarning: X does not have valid feature names, but LogisticRegression was fitted with feature names\n", + " warnings.warn(\n" ] } ], "source": [ "import pickle\n", - "model_filename = 'ufo-model.pkl'\n", + "model_filename = 'ufo-model.pkl'SS\n", "pickle.dump(model, open(model_filename,'wb'))\n", "\n", "model = pickle.load(open('ufo-model.pkl','rb'))\n", @@ -252,5 +432,32 @@ "outputs": [], "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.3" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/3-Web-App/1-Web-App/solution/ufo-model.pkl b/3-Web-App/1-Web-App/solution/ufo-model.pkl index 523962f2..ead08563 100644 Binary files a/3-Web-App/1-Web-App/solution/ufo-model.pkl and b/3-Web-App/1-Web-App/solution/ufo-model.pkl differ diff --git a/3-Web-App/1-Web-App/ufos_model.pkl b/3-Web-App/1-Web-App/ufos_model.pkl new file mode 100644 index 00000000..b2f5f047 Binary files /dev/null and b/3-Web-App/1-Web-App/ufos_model.pkl differ