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",
+ " datetime | \n",
+ " city | \n",
+ " state | \n",
+ " country | \n",
+ " shape | \n",
+ " duration (seconds) | \n",
+ " duration (hours/min) | \n",
+ " comments | \n",
+ " date posted | \n",
+ " latitude | \n",
+ " longitude | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 10/10/1949 20:30 | \n",
+ " san marcos | \n",
+ " tx | \n",
+ " us | \n",
+ " cylinder | \n",
+ " 2700.0 | \n",
+ " 45 minutes | \n",
+ " This event took place in early fall around 194... | \n",
+ " 4/27/2004 | \n",
+ " 29.883056 | \n",
+ " -97.941111 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 10/10/1949 21:00 | \n",
+ " lackland afb | \n",
+ " tx | \n",
+ " NaN | \n",
+ " light | \n",
+ " 7200.0 | \n",
+ " 1-2 hrs | \n",
+ " 1949 Lackland AFB, TX. Lights racing acros... | \n",
+ " 12/16/2005 | \n",
+ " 29.384210 | \n",
+ " -98.581082 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 10/10/1955 17:00 | \n",
+ " chester (uk/england) | \n",
+ " NaN | \n",
+ " gb | \n",
+ " circle | \n",
+ " 20.0 | \n",
+ " 20 seconds | \n",
+ " Green/Orange circular disc over Chester, En... | \n",
+ " 1/21/2008 | \n",
+ " 53.200000 | \n",
+ " -2.916667 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 10/10/1956 21:00 | \n",
+ " edna | \n",
+ " tx | \n",
+ " us | \n",
+ " circle | \n",
+ " 20.0 | \n",
+ " 1/2 hour | \n",
+ " My older brother and twin sister were leaving ... | \n",
+ " 1/17/2004 | \n",
+ " 28.978333 | \n",
+ " -96.645833 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 10/10/1960 20:00 | \n",
+ " kaneohe | \n",
+ " hi | \n",
+ " us | \n",
+ " light | \n",
+ " 900.0 | \n",
+ " 15 minutes | \n",
+ " AS a Marine 1st Lt. flying an FJ4B fighter/att... | \n",
+ " 1/22/2004 | \n",
+ " 21.418056 | \n",
+ " -157.803611 | \n",
+ "
\n",
+ " \n",
+ "
\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 datetime | \n city | \n state | \n country | \n shape | \n duration (seconds) | \n duration (hours/min) | \n comments | \n date posted | \n latitude | \n longitude | \n
\n \n \n \n 0 | \n 10/10/1949 20:30 | \n san marcos | \n tx | \n us | \n cylinder | \n 2700.0 | \n 45 minutes | \n This event took place in early fall around 194... | \n 4/27/2004 | \n 29.883056 | \n -97.941111 | \n
\n \n 1 | \n 10/10/1949 21:00 | \n lackland afb | \n tx | \n NaN | \n light | \n 7200.0 | \n 1-2 hrs | \n 1949 Lackland AFB, TX. Lights racing acros... | \n 12/16/2005 | \n 29.384210 | \n -98.581082 | \n
\n \n 2 | \n 10/10/1955 17:00 | \n chester (uk/england) | \n NaN | \n gb | \n circle | \n 20.0 | \n 20 seconds | \n Green/Orange circular disc over Chester, En... | \n 1/21/2008 | \n 53.200000 | \n -2.916667 | \n
\n \n 3 | \n 10/10/1956 21:00 | \n edna | \n tx | \n us | \n circle | \n 20.0 | \n 1/2 hour | \n My older brother and twin sister were leaving ... | \n 1/17/2004 | \n 28.978333 | \n -96.645833 | \n
\n \n 4 | \n 10/10/1960 20:00 | \n kaneohe | \n hi | \n us | \n light | \n 900.0 | \n 15 minutes | \n AS a Marine 1st Lt. flying an FJ4B fighter/att... | \n 1/22/2004 | \n 21.418056 | \n -157.803611 | \n
\n \n
\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",
+ " Seconds | \n",
+ " Country | \n",
+ " Latitude | \n",
+ " Longitude | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 2 | \n",
+ " 20.0 | \n",
+ " 3 | \n",
+ " 53.200000 | \n",
+ " -2.916667 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 20.0 | \n",
+ " 4 | \n",
+ " 28.978333 | \n",
+ " -96.645833 | \n",
+ "
\n",
+ " \n",
+ " 14 | \n",
+ " 30.0 | \n",
+ " 4 | \n",
+ " 35.823889 | \n",
+ " -80.253611 | \n",
+ "
\n",
+ " \n",
+ " 23 | \n",
+ " 60.0 | \n",
+ " 4 | \n",
+ " 45.582778 | \n",
+ " -122.352222 | \n",
+ "
\n",
+ " \n",
+ " 24 | \n",
+ " 3.0 | \n",
+ " 3 | \n",
+ " 51.783333 | \n",
+ " -0.783333 | \n",
+ "
\n",
+ " \n",
+ "
\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 Seconds | \n Country | \n Latitude | \n Longitude | \n
\n \n \n \n 2 | \n 20.0 | \n 3 | \n 53.200000 | \n -2.916667 | \n
\n \n 3 | \n 20.0 | \n 4 | \n 28.978333 | \n -96.645833 | \n
\n \n 14 | \n 30.0 | \n 4 | \n 35.823889 | \n -80.253611 | \n
\n \n 23 | \n 60.0 | \n 4 | \n 45.582778 | \n -122.352222 | \n
\n \n 24 | \n 3.0 | \n 3 | \n 51.783333 | \n -0.783333 | \n
\n \n
\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