Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 17 additions & 19 deletions your-code/bonus.ipynb

Large diffs are not rendered by default.

285 changes: 271 additions & 14 deletions your-code/challenge-1.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,43 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 3,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/slevin/anaconda3/lib/python3.11/site-packages/sklearn/utils/validation.py:767: FutureWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if not hasattr(array, \"sparse\") and array.dtypes.apply(is_sparse).any():\n",
"/Users/slevin/anaconda3/lib/python3.11/site-packages/sklearn/utils/validation.py:605: FutureWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if is_sparse(pd_dtype):\n",
"/Users/slevin/anaconda3/lib/python3.11/site-packages/sklearn/utils/validation.py:614: FutureWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if is_sparse(pd_dtype) or not is_extension_array_dtype(pd_dtype):\n",
"/Users/slevin/anaconda3/lib/python3.11/site-packages/sklearn/utils/validation.py:767: FutureWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if not hasattr(array, \"sparse\") and array.dtypes.apply(is_sparse).any():\n",
"/Users/slevin/anaconda3/lib/python3.11/site-packages/sklearn/utils/validation.py:605: FutureWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if is_sparse(pd_dtype):\n",
"/Users/slevin/anaconda3/lib/python3.11/site-packages/sklearn/utils/validation.py:614: FutureWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if is_sparse(pd_dtype) or not is_extension_array_dtype(pd_dtype):\n"
]
}
],
"source": [
"# your code here"
"# your code here\n",
"import pandas as pd\n",
"from sklearn.preprocessing import StandardScaler\n",
"\n",
"tic_tac_toe = pd.read_csv('tic-tac-toe.csv')\n",
"\n",
"mapping = {'x': 1, 'o': -1, 'b': 0}\n",
"tic_tac_toe.replace(mapping, inplace=True)\n",
"\n",
"X = tic_tac_toe.iloc[:, :-1] # All columns except the last one\n",
"y = tic_tac_toe.iloc[:, -1] # Last column (class)\n",
"\n",
"scaler = StandardScaler()\n",
"X_normalized = scaler.fit_transform(X)\n"
]
},
{
Expand All @@ -60,11 +92,150 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 4,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/50\n",
"17/17 [==============================] - 0s 7ms/step - loss: 0.6802 - accuracy: 0.5728 - val_loss: 0.6216 - val_accuracy: 0.6493\n",
"Epoch 2/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.6194 - accuracy: 0.6791 - val_loss: 0.5805 - val_accuracy: 0.7313\n",
"Epoch 3/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.5761 - accuracy: 0.7276 - val_loss: 0.5517 - val_accuracy: 0.7463\n",
"Epoch 4/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.5348 - accuracy: 0.7537 - val_loss: 0.5232 - val_accuracy: 0.7612\n",
"Epoch 5/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.4941 - accuracy: 0.7799 - val_loss: 0.5014 - val_accuracy: 0.7761\n",
"Epoch 6/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.4551 - accuracy: 0.7948 - val_loss: 0.4775 - val_accuracy: 0.7836\n",
"Epoch 7/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.4181 - accuracy: 0.8153 - val_loss: 0.4583 - val_accuracy: 0.7836\n",
"Epoch 8/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.3797 - accuracy: 0.8489 - val_loss: 0.4254 - val_accuracy: 0.8209\n",
"Epoch 9/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.3413 - accuracy: 0.8825 - val_loss: 0.3809 - val_accuracy: 0.8284\n",
"Epoch 10/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.3054 - accuracy: 0.8974 - val_loss: 0.3459 - val_accuracy: 0.8433\n",
"Epoch 11/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.2551 - accuracy: 0.9216 - val_loss: 0.3117 - val_accuracy: 0.9328\n",
"Epoch 12/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.2109 - accuracy: 0.9534 - val_loss: 0.2691 - val_accuracy: 0.9403\n",
"Epoch 13/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.1699 - accuracy: 0.9776 - val_loss: 0.2245 - val_accuracy: 0.9478\n",
"Epoch 14/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.1335 - accuracy: 0.9795 - val_loss: 0.1921 - val_accuracy: 0.9627\n",
"Epoch 15/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.1035 - accuracy: 0.9888 - val_loss: 0.1634 - val_accuracy: 0.9701\n",
"Epoch 16/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0807 - accuracy: 0.9907 - val_loss: 0.1521 - val_accuracy: 0.9701\n",
"Epoch 17/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0605 - accuracy: 0.9963 - val_loss: 0.1248 - val_accuracy: 0.9701\n",
"Epoch 18/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0470 - accuracy: 0.9981 - val_loss: 0.1166 - val_accuracy: 0.9701\n",
"Epoch 19/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0368 - accuracy: 0.9981 - val_loss: 0.1077 - val_accuracy: 0.9701\n",
"Epoch 20/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0300 - accuracy: 0.9981 - val_loss: 0.0997 - val_accuracy: 0.9776\n",
"Epoch 21/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0233 - accuracy: 1.0000 - val_loss: 0.0977 - val_accuracy: 0.9776\n",
"Epoch 22/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0194 - accuracy: 1.0000 - val_loss: 0.0923 - val_accuracy: 0.9776\n",
"Epoch 23/50\n",
"17/17 [==============================] - 0s 3ms/step - loss: 0.0161 - accuracy: 1.0000 - val_loss: 0.0899 - val_accuracy: 0.9851\n",
"Epoch 24/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0136 - accuracy: 1.0000 - val_loss: 0.0865 - val_accuracy: 0.9851\n",
"Epoch 25/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0115 - accuracy: 1.0000 - val_loss: 0.0850 - val_accuracy: 0.9851\n",
"Epoch 26/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0100 - accuracy: 1.0000 - val_loss: 0.0862 - val_accuracy: 0.9851\n",
"Epoch 27/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0087 - accuracy: 1.0000 - val_loss: 0.0839 - val_accuracy: 0.9851\n",
"Epoch 28/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0075 - accuracy: 1.0000 - val_loss: 0.0799 - val_accuracy: 0.9851\n",
"Epoch 29/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0067 - accuracy: 1.0000 - val_loss: 0.0810 - val_accuracy: 0.9851\n",
"Epoch 30/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0060 - accuracy: 1.0000 - val_loss: 0.0806 - val_accuracy: 0.9851\n",
"Epoch 31/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0054 - accuracy: 1.0000 - val_loss: 0.0807 - val_accuracy: 0.9851\n",
"Epoch 32/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0049 - accuracy: 1.0000 - val_loss: 0.0805 - val_accuracy: 0.9851\n",
"Epoch 33/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0044 - accuracy: 1.0000 - val_loss: 0.0791 - val_accuracy: 0.9851\n",
"Epoch 34/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0040 - accuracy: 1.0000 - val_loss: 0.0795 - val_accuracy: 0.9851\n",
"Epoch 35/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0037 - accuracy: 1.0000 - val_loss: 0.0787 - val_accuracy: 0.9851\n",
"Epoch 36/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0033 - accuracy: 1.0000 - val_loss: 0.0803 - val_accuracy: 0.9851\n",
"Epoch 37/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0031 - accuracy: 1.0000 - val_loss: 0.0798 - val_accuracy: 0.9851\n",
"Epoch 38/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0028 - accuracy: 1.0000 - val_loss: 0.0791 - val_accuracy: 0.9851\n",
"Epoch 39/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0026 - accuracy: 1.0000 - val_loss: 0.0802 - val_accuracy: 0.9851\n",
"Epoch 40/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0024 - accuracy: 1.0000 - val_loss: 0.0793 - val_accuracy: 0.9851\n",
"Epoch 41/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0023 - accuracy: 1.0000 - val_loss: 0.0792 - val_accuracy: 0.9851\n",
"Epoch 42/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0021 - accuracy: 1.0000 - val_loss: 0.0801 - val_accuracy: 0.9851\n",
"Epoch 43/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0020 - accuracy: 1.0000 - val_loss: 0.0801 - val_accuracy: 0.9851\n",
"Epoch 44/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0019 - accuracy: 1.0000 - val_loss: 0.0803 - val_accuracy: 0.9851\n",
"Epoch 45/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0017 - accuracy: 1.0000 - val_loss: 0.0803 - val_accuracy: 0.9851\n",
"Epoch 46/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0016 - accuracy: 1.0000 - val_loss: 0.0800 - val_accuracy: 0.9851\n",
"Epoch 47/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 0.0802 - val_accuracy: 0.9851\n",
"Epoch 48/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0015 - accuracy: 1.0000 - val_loss: 0.0815 - val_accuracy: 0.9851\n",
"Epoch 49/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0014 - accuracy: 1.0000 - val_loss: 0.0803 - val_accuracy: 0.9851\n",
"Epoch 50/50\n",
"17/17 [==============================] - 0s 2ms/step - loss: 0.0013 - accuracy: 1.0000 - val_loss: 0.0815 - val_accuracy: 0.9851\n",
"9/9 [==============================] - 0s 721us/step - loss: 0.0305 - accuracy: 0.9896\n",
"Test Accuracy: 0.9895833134651184\n",
"INFO:tensorflow:Assets written to: tic-tac-toe.model/assets\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:tensorflow:Assets written to: tic-tac-toe.model/assets\n"
]
}
],
"source": [
"# your code here"
"# your code here\n",
"from sklearn.model_selection import train_test_split\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import Dense\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X_normalized, y, test_size=0.3, random_state=42)\n",
"\n",
"model = Sequential()\n",
"\n",
"model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))\n",
"model.add(Dense(32, activation='relu'))\n",
"model.add(Dense(16, activation='relu'))\n",
"model.add(Dense(1, activation='sigmoid')) # Sigmoid for binary classification\n",
"\n",
"model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n",
"\n",
"history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)\n",
"\n",
"test_loss, test_accuracy = model.evaluate(X_test, y_test)\n",
"print(f\"Test Accuracy: {test_accuracy}\")\n",
"\n",
"# Save the model\n",
"model.save(\"tic-tac-toe.model\")\n"
]
},
{
Expand All @@ -78,11 +249,50 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 5,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1/1 [==============================] - 0s 40ms/step\n",
"Sample 1:\n",
"Predicted: [0.], Actual: False\n",
"\n",
"Sample 2:\n",
"Predicted: [1.], Actual: True\n",
"\n",
"Sample 3:\n",
"Predicted: [0.], Actual: False\n",
"\n",
"Sample 4:\n",
"Predicted: [1.], Actual: True\n",
"\n",
"Sample 5:\n",
"Predicted: [1.], Actual: True\n",
"\n"
]
}
],
"source": [
"# your code here"
"# your code here\n",
"from tensorflow.keras.models import load_model\n",
"import numpy as np\n",
"\n",
"loaded_model = load_model(\"tic-tac-toe.model\")\n",
"\n",
"num_samples_to_predict = 5 # Change this number as needed\n",
"random_indices = np.random.choice(X_test.shape[0], num_samples_to_predict, replace=False)\n",
"random_samples = X_test[random_indices]\n",
"\n",
"predictions = loaded_model.predict(random_samples)\n",
"rounded_predictions = np.round(predictions)\n",
"\n",
"for i, idx in enumerate(random_indices):\n",
" print(f\"Sample {i+1}:\")\n",
" print(f\"Predicted: {rounded_predictions[i]}, Actual: {y_test.iloc[idx]}\")\n",
" print()"
]
},
{
Expand All @@ -104,11 +314,54 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 6,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1/1 [==============================] - 0s 30ms/step\n",
"Sample 1:\n",
"Predicted: [1.], Actual: True\n",
"\n",
"Sample 2:\n",
"Predicted: [1.], Actual: True\n",
"\n",
"Sample 3:\n",
"Predicted: [1.], Actual: True\n",
"\n",
"Sample 4:\n",
"Predicted: [1.], Actual: True\n",
"\n",
"Sample 5:\n",
"Predicted: [1.], Actual: True\n",
"\n"
]
}
],
"source": [
"# your code here"
"# your code here\n",
"from tensorflow.keras.models import load_model\n",
"import numpy as np\n",
"\n",
"# Load the saved model\n",
"loaded_model = load_model(\"tic-tac-toe.model\")\n",
"\n",
"# Make predictions on a few random rows from the test dataset\n",
"num_samples_to_predict = 5 # Change this number as needed\n",
"random_indices = np.random.choice(X_test.shape[0], num_samples_to_predict, replace=False)\n",
"random_samples = X_test[random_indices]\n",
"\n",
"# Predict\n",
"predictions = loaded_model.predict(random_samples)\n",
"rounded_predictions = np.round(predictions)\n",
"\n",
"# Compare predictions with actual labels\n",
"for i, idx in enumerate(random_indices):\n",
" print(f\"Sample {i+1}:\")\n",
" print(f\"Predicted: {rounded_predictions[i]}, Actual: {y_test.iloc[idx]}\")\n",
" print()\n"
]
},
{
Expand All @@ -124,7 +377,11 @@
"metadata": {},
"outputs": [],
"source": [
"# your answer here"
"# your answer here\n",
"\"\"\"\n",
"Improving model performance involves a lot of trial an error. By adjusting the architecture by adding more layers seemed to have a positive impact in this case. \n",
"This model was able to create potentially more complex patterns in the data, which can be beneficial for solving intricate problems.\n",
"\"\"\"\n"
]
}
],
Expand All @@ -144,7 +401,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
"version": "3.11.0"
}
},
"nbformat": 4,
Expand Down
1 change: 1 addition & 0 deletions your-code/tic-tac-toe.model/fingerprint.pb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
���󨃳�Ѝ��������𮮥��Ϯ ��ש����!(������\2
Loading