├── ADALINE ├── .DS_Store ├── BostonHousings_ADALINE_MAE_MSE.ipynb ├── HairLength_ADALINE.ipynb ├── HeightAndWeight_ADALINE.ipynb └── iris_ADALINE_KNN.ipynb ├── KNN ├── .DS_Store ├── KNN.ipynb ├── OpenCV_KNN.ipynb ├── iris_KNN.ipynb ├── knn_data.npz └── mnist.png ├── MachineLearningCourse-W3 ├── .ipynb_checkpoints │ └── Machine-Learning-Course-checkpoint.ipynb ├── Machine-Learning-Course.ipynb ├── cars.csv ├── mydecisiontree.png └── shows.csv ├── Perceptron ├── .DS_Store ├── ErrorAmountInTrainingProcess_Perceptron.py ├── Perceptron_Accuracy.ipynb ├── csv_files │ ├── linear_data_test.csv │ ├── linear_data_train.csv │ └── weatherHistory.csv ├── perceptron.py ├── perseptron_linear_data.py ├── readme.md └── weatherHistory_Perceptron.ipynb ├── README.md ├── Titanic_Perceptron_KNN_MLP_Adaline.ipynb ├── Weather_Prediction.ipynb └── house_prices.ipynb /ADALINE/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaryamBoneh/MachineLearning-Course/6c16ceb61ab4b58d76fde2c751edc9296dd8f668/ADALINE/.DS_Store -------------------------------------------------------------------------------- /ADALINE/HairLength_ADALINE.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "HairLength-ADALINE.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | }, 13 | "language_info": { 14 | "name": "python" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "code", 20 | "metadata": { 21 | "id": "spu1kv_I0Qr_" 22 | }, 23 | "source": [ 24 | "import numpy as np\n", 25 | "import pandas as pd\n", 26 | "import random\n", 27 | "import matplotlib.pyplot as plt\n", 28 | "from scipy import stats\n", 29 | "from numpy.linalg import inv\n", 30 | "from sklearn.neighbors import KNeighborsClassifier" 31 | ], 32 | "execution_count": 1, 33 | "outputs": [] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "metadata": { 38 | "colab": { 39 | "base_uri": "https://localhost:8080/", 40 | "height": 282 41 | }, 42 | "id": "6MYnPea3dM3S", 43 | "outputId": "ed973392-6f72-4279-953b-42975e511040" 44 | }, 45 | "source": [ 46 | "N = 50\n", 47 | "\n", 48 | "X = []\n", 49 | "Y = []\n", 50 | "\n", 51 | "for i in range(N):\n", 52 | " X.append(np.random.randint(15, 100, dtype=int))\n", 53 | "\n", 54 | "for i in range(N):\n", 55 | " X.append(np.random.randint(0, 10, dtype=int))\n", 56 | "\n", 57 | "X = np.array(X)\n", 58 | "Y = np.array(Y)\n", 59 | "\n", 60 | "Y = np.zeros(N*2)\n", 61 | "Y[N:N*2] = 1\n", 62 | "\n", 63 | "plt.scatter(X, Y)" 64 | ], 65 | "execution_count": 16, 66 | "outputs": [ 67 | { 68 | "output_type": "execute_result", 69 | "data": { 70 | "text/plain": [ 71 | "" 72 | ] 73 | }, 74 | "metadata": { 75 | "tags": [] 76 | }, 77 | "execution_count": 16 78 | }, 79 | { 80 | "output_type": "display_data", 81 | "data": { 82 | "image/png": "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\n", 83 | "text/plain": [ 84 | "
" 85 | ] 86 | }, 87 | "metadata": { 88 | "tags": [], 89 | "needs_background": "light" 90 | } 91 | } 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "metadata": { 97 | "id": "B6aEfP8JizuZ", 98 | "colab": { 99 | "base_uri": "https://localhost:8080/" 100 | }, 101 | "outputId": "ba78ebc6-ac8e-4390-f727-eab6c4e275d8" 102 | }, 103 | "source": [ 104 | "Y" 105 | ], 106 | "execution_count": 17, 107 | "outputs": [ 108 | { 109 | "output_type": "execute_result", 110 | "data": { 111 | "text/plain": [ 112 | "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 113 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", 114 | " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,\n", 115 | " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", 116 | " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n", 117 | " 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])" 118 | ] 119 | }, 120 | "metadata": { 121 | "tags": [] 122 | }, 123 | "execution_count": 17 124 | } 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "metadata": { 130 | "id": "NQ7_s2G3jKTJ", 131 | "colab": { 132 | "base_uri": "https://localhost:8080/" 133 | }, 134 | "outputId": "c83b0311-b751-438b-cc22-2e25ac73cf79" 135 | }, 136 | "source": [ 137 | "X" 138 | ], 139 | "execution_count": 18, 140 | "outputs": [ 141 | { 142 | "output_type": "execute_result", 143 | "data": { 144 | "text/plain": [ 145 | "array([98, 81, 17, 50, 59, 33, 37, 28, 15, 45, 19, 30, 80, 54, 29, 93, 74,\n", 146 | " 58, 83, 60, 56, 83, 51, 28, 65, 65, 54, 15, 18, 82, 69, 89, 44, 95,\n", 147 | " 56, 33, 98, 51, 59, 57, 70, 28, 53, 16, 43, 98, 25, 32, 36, 36, 1,\n", 148 | " 7, 5, 1, 2, 4, 4, 2, 2, 8, 8, 5, 6, 7, 1, 9, 9, 6,\n", 149 | " 5, 9, 7, 7, 3, 6, 5, 8, 9, 7, 3, 3, 3, 7, 7, 2, 3,\n", 150 | " 7, 5, 8, 7, 5, 1, 6, 2, 5, 0, 4, 0, 1, 4, 5])" 151 | ] 152 | }, 153 | "metadata": { 154 | "tags": [] 155 | }, 156 | "execution_count": 18 157 | } 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "metadata": { 163 | "colab": { 164 | "base_uri": "https://localhost:8080/" 165 | }, 166 | "id": "JPh2G6zNjMYs", 167 | "outputId": "dba90cba-7b9a-4a7d-9ab5-c33ee344e635" 168 | }, 169 | "source": [ 170 | "X = X.reshape(100, 1)\n", 171 | "Y = Y.reshape(100, 1)\n", 172 | "\n", 173 | "print(X.shape, Y.shape)" 174 | ], 175 | "execution_count": 19, 176 | "outputs": [ 177 | { 178 | "output_type": "stream", 179 | "text": [ 180 | "(100, 1) (100, 1)\n" 181 | ], 182 | "name": "stdout" 183 | } 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "metadata": { 189 | "colab": { 190 | "base_uri": "https://localhost:8080/", 191 | "height": 282 192 | }, 193 | "id": "2DWg-F56mq3X", 194 | "outputId": "95b47be5-2080-4edc-d861-3699a8a95e4a" 195 | }, 196 | "source": [ 197 | "m1 = random.uniform(0.1, 0.7)\n", 198 | "m2 = random.uniform(0.1, 0.7)\n", 199 | "\n", 200 | "Y_pred1 = X * m1\n", 201 | "Y_pred2 = X * m2\n", 202 | "\n", 203 | "plt.scatter(X, Y)\n", 204 | "\n", 205 | "plt.plot(X, Y_pred1, c= 'red')\n", 206 | "plt.plot(X, Y_pred2, c= 'red')" 207 | ], 208 | "execution_count": 20, 209 | "outputs": [ 210 | { 211 | "output_type": "execute_result", 212 | "data": { 213 | "text/plain": [ 214 | "[]" 215 | ] 216 | }, 217 | "metadata": { 218 | "tags": [] 219 | }, 220 | "execution_count": 20 221 | }, 222 | { 223 | "output_type": "display_data", 224 | "data": { 225 | "image/png": "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\n", 226 | "text/plain": [ 227 | "
" 228 | ] 229 | }, 230 | "metadata": { 231 | "tags": [], 232 | "needs_background": "light" 233 | } 234 | } 235 | ] 236 | }, 237 | { 238 | "cell_type": "code", 239 | "metadata": { 240 | "colab": { 241 | "base_uri": "https://localhost:8080/", 242 | "height": 282 243 | }, 244 | "id": "aj0deTjMnJkO", 245 | "outputId": "f1f43cc5-39a2-410d-d5fc-4907947f71a1" 246 | }, 247 | "source": [ 248 | "m = np.matmul(inv(np.matmul(X.T, X)), np.matmul(X.T, Y))\n", 249 | "\n", 250 | "Y_pred = X * m\n", 251 | "\n", 252 | "plt.scatter(X, Y)\n", 253 | "plt.plot(X, Y_pred, c= 'green')" 254 | ], 255 | "execution_count": 21, 256 | "outputs": [ 257 | { 258 | "output_type": "execute_result", 259 | "data": { 260 | "text/plain": [ 261 | "[]" 262 | ] 263 | }, 264 | "metadata": { 265 | "tags": [] 266 | }, 267 | "execution_count": 21 268 | }, 269 | { 270 | "output_type": "display_data", 271 | "data": { 272 | "image/png": "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\n", 273 | "text/plain": [ 274 | "
" 275 | ] 276 | }, 277 | "metadata": { 278 | "tags": [], 279 | "needs_background": "light" 280 | } 281 | } 282 | ] 283 | } 284 | ] 285 | } -------------------------------------------------------------------------------- /ADALINE/HeightAndWeight_ADALINE.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "HeightAndWeight_ADALINE.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [] 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "code", 21 | "metadata": { 22 | "id": "NG7sow-zTMhF" 23 | }, 24 | "source": [ 25 | "import numpy as np\n", 26 | "import pandas as pd\n", 27 | "import random\n", 28 | "import sklearn\n", 29 | "import matplotlib.pyplot as plt\n", 30 | "from scipy import stats\n", 31 | "from numpy.linalg import inv\n", 32 | "from sklearn.neighbors import KNeighborsClassifier" 33 | ], 34 | "execution_count": 79, 35 | "outputs": [] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "metadata": { 40 | "id": "IWJdNiTYYNA8", 41 | "colab": { 42 | "base_uri": "https://localhost:8080/", 43 | "height": 282 44 | }, 45 | "outputId": "82b78049-677a-4837-ba3d-895a90adf10f" 46 | }, 47 | "source": [ 48 | "N = 100\n", 49 | "\n", 50 | "X = []\n", 51 | "Y = []\n", 52 | "\n", 53 | "for i in range(N):\n", 54 | " X.append(np.random.randint(60, 200, dtype=int))\n", 55 | " temp = random.uniform(0.25, 0.5) * X[i]\n", 56 | " Y.append(temp)\n", 57 | "\n", 58 | "plt.scatter(X, Y)" 59 | ], 60 | "execution_count": 80, 61 | "outputs": [ 62 | { 63 | "output_type": "execute_result", 64 | "data": { 65 | "text/plain": [ 66 | "" 67 | ] 68 | }, 69 | "metadata": { 70 | "tags": [] 71 | }, 72 | "execution_count": 80 73 | }, 74 | { 75 | "output_type": "display_data", 76 | "data": { 77 | "image/png": "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\n", 78 | "text/plain": [ 79 | "
" 80 | ] 81 | }, 82 | "metadata": { 83 | "tags": [], 84 | "needs_background": "light" 85 | } 86 | } 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "metadata": { 92 | "colab": { 93 | "base_uri": "https://localhost:8080/" 94 | }, 95 | "id": "YTwl4c0orQwJ", 96 | "outputId": "a58f4060-da1e-4efb-e1e9-b1af861518a1" 97 | }, 98 | "source": [ 99 | "# m = (X.XT)^-1 *yXT\n", 100 | "X = np.array(X)\n", 101 | "Y = np.array(Y)\n", 102 | "\n", 103 | "X = X.reshape(100, 1)\n", 104 | "Y = Y.reshape(100, 1)\n", 105 | "\n", 106 | "print(X.shape, Y.shape)" 107 | ], 108 | "execution_count": 81, 109 | "outputs": [ 110 | { 111 | "output_type": "stream", 112 | "text": [ 113 | "(100, 1) (100, 1)\n" 114 | ], 115 | "name": "stdout" 116 | } 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "metadata": { 122 | "colab": { 123 | "base_uri": "https://localhost:8080/", 124 | "height": 282 125 | }, 126 | "id": "f0YSP_9tRS5l", 127 | "outputId": "09a47aff-443c-4905-baa6-f4099a8123f0" 128 | }, 129 | "source": [ 130 | "m1 = random.uniform(0.1, 0.7)\n", 131 | "m2 = random.uniform(0.1, 0.7)\n", 132 | "\n", 133 | "Y_pred1 = X * m1\n", 134 | "Y_pred2 = X * m2\n", 135 | "\n", 136 | "plt.scatter(X, Y)\n", 137 | "\n", 138 | "plt.plot(X, Y_pred1, c= 'red')\n", 139 | "plt.plot(X, Y_pred2, c= 'red')" 140 | ], 141 | "execution_count": 82, 142 | "outputs": [ 143 | { 144 | "output_type": "execute_result", 145 | "data": { 146 | "text/plain": [ 147 | "[]" 148 | ] 149 | }, 150 | "metadata": { 151 | "tags": [] 152 | }, 153 | "execution_count": 82 154 | }, 155 | { 156 | "output_type": "display_data", 157 | "data": { 158 | "image/png": "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\n", 159 | "text/plain": [ 160 | "
" 161 | ] 162 | }, 163 | "metadata": { 164 | "tags": [], 165 | "needs_background": "light" 166 | } 167 | } 168 | ] 169 | }, 170 | { 171 | "cell_type": "code", 172 | "metadata": { 173 | "colab": { 174 | "base_uri": "https://localhost:8080/", 175 | "height": 282 176 | }, 177 | "id": "pgfuuV7zNpR3", 178 | "outputId": "56d142e0-1df4-4720-a588-f2d19714aef3" 179 | }, 180 | "source": [ 181 | "m = np.matmul(inv(np.matmul(X.T, X)), np.matmul(X.T, Y))\n", 182 | "\n", 183 | "Y_pred = X * m\n", 184 | "\n", 185 | "plt.scatter(X, Y)\n", 186 | "plt.plot(X, Y_pred, c= 'green')" 187 | ], 188 | "execution_count": 83, 189 | "outputs": [ 190 | { 191 | "output_type": "execute_result", 192 | "data": { 193 | "text/plain": [ 194 | "[]" 195 | ] 196 | }, 197 | "metadata": { 198 | "tags": [] 199 | }, 200 | "execution_count": 83 201 | }, 202 | { 203 | "output_type": "display_data", 204 | "data": { 205 | "image/png": "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\n", 206 | "text/plain": [ 207 | "
" 208 | ] 209 | }, 210 | "metadata": { 211 | "tags": [], 212 | "needs_background": "light" 213 | } 214 | } 215 | ] 216 | }, 217 | { 218 | "cell_type": "code", 219 | "metadata": { 220 | "colab": { 221 | "base_uri": "https://localhost:8080/", 222 | "height": 265 223 | }, 224 | "id": "XoWssILOXm43", 225 | "outputId": "df4c19ac-d841-4f54-d601-4aeaa78bb4c3" 226 | }, 227 | "source": [ 228 | "slope, intercept, r_value, p_value, std_err = stats.linregress(X, Y)\n", 229 | "\n", 230 | "plt.plot(X, Y, 'o', label='original data')\n", 231 | "plt.plot(X, intercept + slope*X, 'r', label='fitted line')\n", 232 | "plt.legend()\n", 233 | "plt.show()" 234 | ], 235 | "execution_count": 94, 236 | "outputs": [ 237 | { 238 | "output_type": "display_data", 239 | "data": { 240 | "image/png": "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\n", 241 | "text/plain": [ 242 | "
" 243 | ] 244 | }, 245 | "metadata": { 246 | "tags": [], 247 | "needs_background": "light" 248 | } 249 | } 250 | ] 251 | } 252 | ] 253 | } 254 | -------------------------------------------------------------------------------- /ADALINE/iris_ADALINE_KNN.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "iris_ADALINE_KNN", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | }, 13 | "language_info": { 14 | "name": "python" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "code", 20 | "metadata": { 21 | "id": "oPdevxFdbxAM" 22 | }, 23 | "source": [ 24 | "import numpy as np\n", 25 | "import pandas as pd\n", 26 | "import matplotlib.pyplot as plt\n", 27 | "from numpy.linalg import inv\n", 28 | "from sklearn.model_selection import train_test_split\n", 29 | "from sklearn.neighbors import KNeighborsClassifier\n", 30 | "from sklearn.datasets import load_iris" 31 | ], 32 | "execution_count": 39, 33 | "outputs": [] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "metadata": { 38 | "id": "mOMvVNRLdjDb" 39 | }, 40 | "source": [ 41 | "IRIS = load_iris()\n", 42 | "IRIS" 43 | ], 44 | "execution_count": null, 45 | "outputs": [] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "metadata": { 50 | "id": "mAc5Af0RdlaS" 51 | }, 52 | "source": [ 53 | "X = []\n", 54 | "Y = []\n", 55 | "\n", 56 | "for i, t in enumerate(IRIS.target):\n", 57 | " if t == 2:\n", 58 | " break\n", 59 | " X.append(IRIS.data[i])\n", 60 | " Y.append(IRIS.target[i])\n", 61 | "\n", 62 | "X = np.array(X)\n", 63 | "Y = np.array(Y)\n", 64 | "\n", 65 | "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)" 66 | ], 67 | "execution_count": 49, 68 | "outputs": [] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "metadata": { 73 | "id": "VgCuioTceT53" 74 | }, 75 | "source": [ 76 | "class KNearestNeighbors:\n", 77 | " def __init__(self, k):\n", 78 | " self.k = k\n", 79 | " \n", 80 | " #train\n", 81 | " def fit(self, X_train, Y_train):\n", 82 | " self.X_train = X_train\n", 83 | " self.Y_train = Y_train\n", 84 | " self.number_class = len(np.unique(Y_train))\n", 85 | " \n", 86 | " def nearestNeighbors(self, X_test):\n", 87 | " distance = np.sqrt(np.sum((X_test - self.X_train)**2, axis = 1))\n", 88 | " near_neighbor = np.argsort(distance)[0:self.k]\n", 89 | " return near_neighbor\n", 90 | " \n", 91 | " #test\n", 92 | " def predict(self, X_test):\n", 93 | " near_neighbor = self.nearestNeighbors(X_test)\n", 94 | " y = np.argmax(np.bincount(self.Y_train[near_neighbor]))\n", 95 | " return y\n", 96 | " \n", 97 | " def evaluate(self, x_test, y_test):\n", 98 | " y_pred = []\n", 99 | " for i in range(len(x_test)):\n", 100 | " y = knn.predict(x_test[i])\n", 101 | " y_pred.append(y)\n", 102 | " \n", 103 | " not_correct = abs(sum(y_pred - y_test))\n", 104 | " return ((((len(y_pred) - not_correct)*100)/len(y_pred))/100) " 105 | ], 106 | "execution_count": 50, 107 | "outputs": [] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "metadata": { 112 | "id": "6SUFuWdBeZiS" 113 | }, 114 | "source": [ 115 | "class AdalineClassifier:\n", 116 | " def __init__(self):\n", 117 | " pass\n", 118 | " \n", 119 | " def fit(self, X_train, Y_train):\n", 120 | " self.w = np.matmul(inv(np.matmul(X_train.T, X_train)), np.matmul(X_train.T, Y_train))\n", 121 | "\n", 122 | " def predict(self, X_test):\n", 123 | " Y_predic = np.matmul(X_test, self.w)\n", 124 | " return Y_predic\n", 125 | " \n", 126 | " def evaluation(self, X_test, Y_test):\n", 127 | " Y_predic = np.matmul(X_test, self.w)\n", 128 | " subtract = np.abs(Y_test - Y_predic)\n", 129 | " \n", 130 | " print('Y_test: ', Y_test)\n", 131 | " print('Y_predic: ', Y_predic, '\\n')\n", 132 | " \n", 133 | " correct = 0\n", 134 | " for i in range(len(Y_pred)):\n", 135 | " if Y_test[i] == 0 and Y_pred[i] < 0.5:\n", 136 | " correct += 1\n", 137 | " if Y_test[i] == 1 and Y_pred[i] > 0.5:\n", 138 | " correct += 1\n", 139 | "\n", 140 | " average = np.mean(subtract)\n", 141 | " acc = (correct * 100) / len(Y_test) / 100\n", 142 | " return average, acc\n" 143 | ], 144 | "execution_count": 51, 145 | "outputs": [] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "metadata": { 150 | "colab": { 151 | "base_uri": "https://localhost:8080/" 152 | }, 153 | "id": "B3SnmQgjfmbm", 154 | "outputId": "52d1f1ed-9f76-439e-a7b7-9b8cdb6628ca" 155 | }, 156 | "source": [ 157 | "knn = KNearestNeighbors(5)\n", 158 | "knn.fit(X_train, Y_train)\n", 159 | "\n", 160 | "print('k= 5 Accuracy=', knn.evaluate(X_test, Y_test))" 161 | ], 162 | "execution_count": 52, 163 | "outputs": [ 164 | { 165 | "output_type": "stream", 166 | "text": [ 167 | "k= 5 Accuracy= 1.0\n" 168 | ], 169 | "name": "stdout" 170 | } 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "metadata": { 176 | "colab": { 177 | "base_uri": "https://localhost:8080/" 178 | }, 179 | "id": "-XYCYLToedXa", 180 | "outputId": "9ec38c8a-4c43-44f2-a4c0-5fc0a939f497" 181 | }, 182 | "source": [ 183 | "model = AdalineRegressor()\n", 184 | "model.fit(X_train, Y_train)\n", 185 | "Y_pred = model.predict(X_test)\n", 186 | "result = model.evaluation(X_test, Y_test)\n", 187 | "print('evaluation= ',result[0],' Accuracy= ',result[1])" 188 | ], 189 | "execution_count": 53, 190 | "outputs": [ 191 | { 192 | "output_type": "stream", 193 | "text": [ 194 | "Y_test: [0 0 1 1 0 1 1 0 0 1 1 1 0 1 0 0 0 1 1 0]\n", 195 | "Y_predic: [-0.02920155 0.09146637 0.97183384 0.98179441 0.00773186 0.96622637\n", 196 | " 0.81184241 0.05051168 0.0406854 0.8620059 1.07408636 0.81673645\n", 197 | " -0.10859166 1.02387599 -0.02021635 -0.05516085 0.12588715 1.01260532\n", 198 | " 1.1302304 -0.1264835 ] \n", 199 | "\n", 200 | "evaluation= 0.0743147509002037 Accuracy= 1.0\n" 201 | ], 202 | "name": "stdout" 203 | } 204 | ] 205 | } 206 | ] 207 | } -------------------------------------------------------------------------------- /KNN/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaryamBoneh/MachineLearning-Course/6c16ceb61ab4b58d76fde2c751edc9296dd8f668/KNN/.DS_Store -------------------------------------------------------------------------------- /KNN/OpenCV_KNN.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "id": "d3d8d876-b50e-4c0b-9acb-858879538809", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import numpy as np\n", 11 | "import cv2 as cv" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 6, 17 | "id": "ed0d8e7d-9cd4-4cf0-accd-cbc7b440b1a2", 18 | "metadata": {}, 19 | "outputs": [ 20 | { 21 | "name": "stdout", 22 | "output_type": "stream", 23 | "text": [ 24 | "91.76\n" 25 | ] 26 | } 27 | ], 28 | "source": [ 29 | "img = cv.imread('mnist.png')\n", 30 | "gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)\n", 31 | "# Now we split the image to 5000 cells, each 20x20 size\n", 32 | "cells = [np.hsplit(row,100) for row in np.vsplit(gray,50)]\n", 33 | "# Make it into a Numpy array: its size will be (50,100,20,20)\n", 34 | "x = np.array(cells)\n", 35 | "# Now we prepare the training data and test data\n", 36 | "train = x[:,:50].reshape(-1,400).astype(np.float32) # Size = (2500,400)\n", 37 | "test = x[:,50:100].reshape(-1,400).astype(np.float32) # Size = (2500,400)\n", 38 | "# Create labels for train and test data\n", 39 | "k = np.arange(10)\n", 40 | "train_labels = np.repeat(k,250)[:,np.newaxis]\n", 41 | "test_labels = train_labels.copy()\n", 42 | "# Initiate kNN, train it on the training data, then test it with the test data with k=1\n", 43 | "knn = cv.ml.KNearest_create()\n", 44 | "knn.train(train, cv.ml.ROW_SAMPLE, train_labels)\n", 45 | "ret,result,neighbours,dist = knn.findNearest(test,k=5)\n", 46 | "# Now we check the accuracy of classification\n", 47 | "# For that, compare the result with test_labels and check which are wrong\n", 48 | "matches = result==test_labels\n", 49 | "correct = np.count_nonzero(matches)\n", 50 | "accuracy = correct*100.0/result.size\n", 51 | "print( accuracy )" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 11, 57 | "id": "111d99c7-54d7-4223-b307-bd816ebb7679", 58 | "metadata": {}, 59 | "outputs": [ 60 | { 61 | "name": "stdout", 62 | "output_type": "stream", 63 | "text": [ 64 | "['train', 'train_labels']\n" 65 | ] 66 | } 67 | ], 68 | "source": [ 69 | "# Save the data\n", 70 | "np.savez('knn_data.npz',train=train, train_labels=train_labels)\n", 71 | "# Now load the data\n", 72 | "with np.load('knn_data.npz') as data:\n", 73 | " print( data.files )\n", 74 | " train = data['train']\n", 75 | " train_labels = data['train_labels']" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 12, 81 | "id": "db9de8a7-31e3-4bfc-8d4e-6ca701d5a90d", 82 | "metadata": {}, 83 | "outputs": [ 84 | { 85 | "data": { 86 | "text/plain": [ 87 | "array([[0., 0., 0., ..., 0., 0., 0.],\n", 88 | " [0., 0., 0., ..., 0., 0., 0.],\n", 89 | " [0., 0., 0., ..., 0., 0., 0.],\n", 90 | " ...,\n", 91 | " [0., 0., 0., ..., 0., 0., 0.],\n", 92 | " [0., 0., 0., ..., 0., 0., 0.],\n", 93 | " [0., 0., 0., ..., 0., 0., 0.]], dtype=float32)" 94 | ] 95 | }, 96 | "execution_count": 12, 97 | "metadata": {}, 98 | "output_type": "execute_result" 99 | } 100 | ], 101 | "source": [ 102 | "train" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 13, 108 | "id": "731e3872-f87f-4750-82c6-6522f3579f7b", 109 | "metadata": {}, 110 | "outputs": [ 111 | { 112 | "data": { 113 | "text/plain": [ 114 | "array([[0],\n", 115 | " [0],\n", 116 | " [0],\n", 117 | " ...,\n", 118 | " [9],\n", 119 | " [9],\n", 120 | " [9]])" 121 | ] 122 | }, 123 | "execution_count": 13, 124 | "metadata": {}, 125 | "output_type": "execute_result" 126 | } 127 | ], 128 | "source": [ 129 | "train_labels" 130 | ] 131 | } 132 | ], 133 | "metadata": { 134 | "kernelspec": { 135 | "display_name": "Python 3 (ipykernel)", 136 | "language": "python", 137 | "name": "python3" 138 | }, 139 | "language_info": { 140 | "codemirror_mode": { 141 | "name": "ipython", 142 | "version": 3 143 | }, 144 | "file_extension": ".py", 145 | "mimetype": "text/x-python", 146 | "name": "python", 147 | "nbconvert_exporter": "python", 148 | "pygments_lexer": "ipython3", 149 | "version": "3.9.6" 150 | } 151 | }, 152 | "nbformat": 4, 153 | "nbformat_minor": 5 154 | } 155 | -------------------------------------------------------------------------------- /KNN/iris_KNN.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "iris_KNN.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [] 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "code", 21 | "metadata": { 22 | "id": "7ehUEqx9PstO" 23 | }, 24 | "source": [ 25 | "import numpy as np\n", 26 | "import pandas as pd\n", 27 | "import matplotlib.pyplot as plt\n", 28 | "import sklearn\n", 29 | "import seaborn as sn\n", 30 | "from sklearn.svm import SVC\n", 31 | "from sklearn.metrics import plot_confusion_matrix\n", 32 | "from sklearn.model_selection import train_test_split\n", 33 | "from sklearn.neighbors import KNeighborsClassifier\n", 34 | "from sklearn.metrics import confusion_matrix\n", 35 | "from sklearn.datasets import load_iris" 36 | ], 37 | "execution_count": 48, 38 | "outputs": [] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "metadata": { 43 | "id": "le2X7opzt9o8" 44 | }, 45 | "source": [ 46 | "IRIS = load_iris()\n", 47 | "IRIS" 48 | ], 49 | "execution_count": null, 50 | "outputs": [] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "metadata": { 55 | "id": "5U_2k2XYt9su" 56 | }, 57 | "source": [ 58 | "X = IRIS.data\n", 59 | "Y = IRIS.target\n", 60 | "\n", 61 | "N = len(X) // len(IRIS.target_names)\n", 62 | "\n", 63 | "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)" 64 | ], 65 | "execution_count": 50, 66 | "outputs": [] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "metadata": { 71 | "colab": { 72 | "base_uri": "https://localhost:8080/", 73 | "height": 282 74 | }, 75 | "id": "jPzMtdvIuoVH", 76 | "outputId": "44c567f3-46b6-4239-efeb-2f33df353a6b" 77 | }, 78 | "source": [ 79 | "# plt.figure(figsize = (8, 8))\n", 80 | "\n", 81 | "plt.scatter(X[0:N, 1], X[0:N, 0], c='orange', label='setosa')\n", 82 | "plt.scatter(X[N:2*N, 1], X[N:2*N, 0], c='red', label='versicolor')\n", 83 | "plt.scatter(X[2*N:3*N, 1], X[2*N:3*N, 0], c='green', label='virginica')" 84 | ], 85 | "execution_count": 51, 86 | "outputs": [ 87 | { 88 | "output_type": "execute_result", 89 | "data": { 90 | "text/plain": [ 91 | "" 92 | ] 93 | }, 94 | "metadata": { 95 | "tags": [] 96 | }, 97 | "execution_count": 51 98 | }, 99 | { 100 | "output_type": "display_data", 101 | "data": { 102 | "image/png": "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\n", 103 | "text/plain": [ 104 | "
" 105 | ] 106 | }, 107 | "metadata": { 108 | "tags": [], 109 | "needs_background": "light" 110 | } 111 | } 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "metadata": { 117 | "id": "stA7DIUrx1y4" 118 | }, 119 | "source": [ 120 | "class KNearestNeighbors:\n", 121 | " def __init__(self, k):\n", 122 | " self.k = k\n", 123 | " \n", 124 | " #train\n", 125 | " def fit(self, X_train, Y_train):\n", 126 | " self.X_train = X_train\n", 127 | " self.Y_train = Y_train\n", 128 | " self.number_class = len(np.unique(Y_train))\n", 129 | " \n", 130 | " def nearestNeighbors(self, X_test):\n", 131 | " distance = np.sqrt(np.sum((X_test - self.X_train)**2, axis = 1))\n", 132 | " near_neighbor = np.argsort(distance)[0:self.k]\n", 133 | " return near_neighbor\n", 134 | " \n", 135 | " #test\n", 136 | " def predict(self, X_test):\n", 137 | " near_neighbor = self.nearestNeighbors(X_test)\n", 138 | " y = np.argmax(np.bincount(self.Y_train[near_neighbor]))\n", 139 | " return y\n", 140 | " \n", 141 | " def evaluate(self, x_test, y_test):\n", 142 | " y_pred = []\n", 143 | " for i in range(len(x_test)):\n", 144 | " y = knn.predict(x_test[i])\n", 145 | " y_pred.append(y)\n", 146 | " \n", 147 | " not_correct = abs(sum(y_pred - y_test))\n", 148 | " return (y_pred , Y_test), ((((len(y_pred) - not_correct)*100)/len(y_pred))/100) " 149 | ], 150 | "execution_count": 52, 151 | "outputs": [] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "metadata": { 156 | "colab": { 157 | "base_uri": "https://localhost:8080/" 158 | }, 159 | "id": "7c_hQUSeAJx1", 160 | "outputId": "fde46e45-659b-4460-ee1c-4ed777028b43" 161 | }, 162 | "source": [ 163 | "K =[1 ,3 ,5 ,7 ,9 ,11 ,13 ,15]\n", 164 | "result = []\n", 165 | "\n", 166 | "for i in K:\n", 167 | " knn = KNearestNeighbors(i)\n", 168 | " knn.fit(X_train, Y_train)\n", 169 | " result.append([i, knn.evaluate(X_test, Y_test)[1]])\n", 170 | "\n", 171 | "for j in result:\n", 172 | " print('k=',j[0], ' Accuracy=', j[1])" 173 | ], 174 | "execution_count": 53, 175 | "outputs": [ 176 | { 177 | "output_type": "stream", 178 | "text": [ 179 | "k= 1 Accuracy= 1.0\n", 180 | "k= 3 Accuracy= 1.0\n", 181 | "k= 5 Accuracy= 1.0\n", 182 | "k= 7 Accuracy= 1.0\n", 183 | "k= 9 Accuracy= 1.0\n", 184 | "k= 11 Accuracy= 0.9666666666666667\n", 185 | "k= 13 Accuracy= 0.9666666666666667\n", 186 | "k= 15 Accuracy= 1.0\n" 187 | ], 188 | "name": "stdout" 189 | } 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "metadata": { 195 | "colab": { 196 | "base_uri": "https://localhost:8080/", 197 | "height": 282 198 | }, 199 | "id": "N060fi35AmGY", 200 | "outputId": "966ceae2-715d-4866-8a34-2c4f4ef8b4fc" 201 | }, 202 | "source": [ 203 | "result = np.array(result)\n", 204 | "\n", 205 | "plt.bar(result[:,0], result[:,1])" 206 | ], 207 | "execution_count": 54, 208 | "outputs": [ 209 | { 210 | "output_type": "execute_result", 211 | "data": { 212 | "text/plain": [ 213 | "" 214 | ] 215 | }, 216 | "metadata": { 217 | "tags": [] 218 | }, 219 | "execution_count": 54 220 | }, 221 | { 222 | "output_type": "display_data", 223 | "data": { 224 | "image/png": "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\n", 225 | "text/plain": [ 226 | "
" 227 | ] 228 | }, 229 | "metadata": { 230 | "tags": [], 231 | "needs_background": "light" 232 | } 233 | } 234 | ] 235 | }, 236 | { 237 | "cell_type": "code", 238 | "metadata": { 239 | "colab": { 240 | "base_uri": "https://localhost:8080/", 241 | "height": 445 242 | }, 243 | "id": "dmzgZz6jDMvv", 244 | "outputId": "f18523ed-2b58-421d-d35f-391d92c9fee4" 245 | }, 246 | "source": [ 247 | "knn5 = KNearestNeighbors(5)\n", 248 | "knn5.fit(X_train,Y_train)\n", 249 | "res_y_pred = knn5.evaluate(X_test, Y_test)[0][0]\n", 250 | "res_y_test = knn5.evaluate(X_test, Y_test)[0][1]\n", 251 | "\n", 252 | "# confusion_matrix = confusion_matrix(res[0][0], res[0][1])\n", 253 | "\n", 254 | "set_set = 0\n", 255 | "set_ver = 0\n", 256 | "set_vir = 0\n", 257 | "vir_set = 0\n", 258 | "vir_ver = 0\n", 259 | "vir_vir = 0\n", 260 | "ver_set = 0\n", 261 | "ver_ver = 0\n", 262 | "ver_vir = 0\n", 263 | "\n", 264 | "for i in range(len(res_y_pred)):\n", 265 | " if res_y_pred[i] == 0 and res_y_test[i] == 0:\n", 266 | " set_set += 1\n", 267 | " elif res_y_pred[i] == 1 and res_y_test[i] == 1:\n", 268 | " ver_ver += 1\n", 269 | " elif res_y_pred[i] == 2 and res_y_test[i] == 2:\n", 270 | " vir_vir += 1\n", 271 | " elif res_y_pred[i] == 0 and res_y_test[i] == 1:\n", 272 | " set_ver += 1\n", 273 | " elif res_y_pred[i] == 0 and res_y_test[i] == 2:\n", 274 | " set_vir += 1\n", 275 | " elif res_y_pred[i] == 2 and res_y_test[i] == 0:\n", 276 | " vir_set += 1\n", 277 | " elif res_y_pred[i] == 2 and res_y_test[i] == 1:\n", 278 | " vir_ver += 1\n", 279 | " elif res_y_pred[i] == 1 and res_y_test[i] == 0:\n", 280 | " ver_set += 1\n", 281 | " else:\n", 282 | " ver_vir += 1\n", 283 | "\n", 284 | "\n", 285 | "result = np.array([[set_set,set_ver,set_vir],\n", 286 | " [ver_set,ver_ver,ver_vir],\n", 287 | " [vir_set,vir_ver,vir_vir]])\n", 288 | "\n", 289 | "df_cm = pd.DataFrame(result, index = [i for i in ['setosa', 'versicolor', 'virginica']],\n", 290 | " columns = [i for i in ['setosa', 'versicolor', 'virginica']])\n", 291 | "plt.figure(figsize = (10,7))\n", 292 | "sn.heatmap(df_cm, annot=True)\n" 293 | ], 294 | "execution_count": 55, 295 | "outputs": [ 296 | { 297 | "output_type": "execute_result", 298 | "data": { 299 | "text/plain": [ 300 | "" 301 | ] 302 | }, 303 | "metadata": { 304 | "tags": [] 305 | }, 306 | "execution_count": 55 307 | }, 308 | { 309 | "output_type": "display_data", 310 | "data": { 311 | "image/png": "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\n", 312 | "text/plain": [ 313 | "
" 314 | ] 315 | }, 316 | "metadata": { 317 | "tags": [], 318 | "needs_background": "light" 319 | } 320 | } 321 | ] 322 | } 323 | ] 324 | } -------------------------------------------------------------------------------- /KNN/knn_data.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaryamBoneh/MachineLearning-Course/6c16ceb61ab4b58d76fde2c751edc9296dd8f668/KNN/knn_data.npz -------------------------------------------------------------------------------- /KNN/mnist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaryamBoneh/MachineLearning-Course/6c16ceb61ab4b58d76fde2c751edc9296dd8f668/KNN/mnist.png -------------------------------------------------------------------------------- /MachineLearningCourse-W3/cars.csv: -------------------------------------------------------------------------------- 1 | Car,Model,Volume,Weight,CO2 2 | Toyoty,Aygo,1000,790,99 3 | Mitsubishi,Space Star,1200,1160,95 4 | Skoda,Citigo,1000,929,95 5 | Fiat,500,900,865,90 6 | Mini,Cooper,1500,1140,105 7 | VW,Up!,1000,929,105 8 | Skoda,Fabia,1400,1109,90 9 | Mercedes,A-Class,1500,1365,92 10 | Ford,Fiesta,1500,1112,98 11 | Audi,A1,1600,1150,99 12 | Hyundai,I20,1100,980,99 13 | Suzuki,Swift,1300,990,101 14 | Ford,Fiesta,1000,1112,99 15 | Honda,Civic,1600,1252,94 16 | Hundai,I30,1600,1326,97 17 | Opel,Astra,1600,1330,97 18 | BMW,1,1600,1365,99 19 | Mazda,3,2200,1280,104 20 | Skoda,Rapid,1600,1119,104 21 | Ford,Focus,2000,1328,105 22 | Ford,Mondeo,1600,1584,94 23 | Opel,Insignia,2000,1428,99 24 | Mercedes,C-Class,2100,1365,99 25 | Skoda,Octavia,1600,1415,99 26 | Volvo,S60,2000,1415,99 27 | Mercedes,CLA,1500,1465,102 28 | Audi,A4,2000,1490,104 29 | Audi,A6,2000,1725,114 30 | Volvo,V70,1600,1523,109 31 | BMW,5,2000,1705,114 32 | Mercedes,E-Class,2100,1605,115 33 | Volvo,XC70,2000,1746,117 34 | Ford,B-Max,1600,1235,104 35 | BMW,216,1600,1390,108 36 | Opel,Zafira,1600,1405,109 37 | Mercedes,SLK,2500,1395,120 38 | -------------------------------------------------------------------------------- /MachineLearningCourse-W3/mydecisiontree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaryamBoneh/MachineLearning-Course/6c16ceb61ab4b58d76fde2c751edc9296dd8f668/MachineLearningCourse-W3/mydecisiontree.png -------------------------------------------------------------------------------- /MachineLearningCourse-W3/shows.csv: -------------------------------------------------------------------------------- 1 | Age,Experience,Rank,Nationality,Go 2 | 36,10,9,UK,NO 3 | 42,12,4,USA,NO 4 | 23,4,6,N,NO 5 | 52,4,4,USA,NO 6 | 43,21,8,USA,YES 7 | 44,14,5,UK,NO 8 | 66,3,7,N,YES 9 | 35,14,9,UK,YES 10 | 52,13,7,N,YES 11 | 35,5,9,N,YES 12 | 24,3,5,USA,NO 13 | 18,3,7,UK,YES 14 | 45,9,9,UK,YES 15 | -------------------------------------------------------------------------------- /Perceptron/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MaryamBoneh/MachineLearning-Course/6c16ceb61ab4b58d76fde2c751edc9296dd8f668/Perceptron/.DS_Store -------------------------------------------------------------------------------- /Perceptron/ErrorAmountInTrainingProcess_Perceptron.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from numpy.core.fromnumeric import mean 3 | import pandas as pd 4 | import matplotlib.pyplot as plt 5 | 6 | 7 | data = pd.read_csv('csv_files/linear_data_train.csv') 8 | data = np.array(data) 9 | 10 | X_train = np.array([data[:, 0], data[:, 1]]) 11 | Y_train = np.array(data[:, 2]) 12 | 13 | # print() 14 | X_train = X_train.reshape(1000, 2) 15 | Y_train = Y_train.reshape(1000, 1) 16 | 17 | 18 | N = 1000 19 | lr = 0.01 20 | w = np.random.rand(2, 1) 21 | loss = [] 22 | 23 | fig = plt.figure() 24 | ax = fig.add_subplot() 25 | 26 | for j in range(N): 27 | #train 28 | y_pred = np.matmul(X_train[j], w) 29 | e = Y_train[j] - y_pred 30 | w = w + e * lr * X_train[j] 31 | Y_pred = np.matmul(X_train, w) 32 | error = np.mean(np.abs(Y_train - Y_pred)) 33 | loss.append(error) 34 | print('error: ', error) 35 | 36 | #plot 37 | ax.clear() 38 | ax.plot(loss) 39 | plt.pause(0.01) 40 | 41 | plt.show() 42 | -------------------------------------------------------------------------------- /Perceptron/Perceptron_Accuracy.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "id": "Ersg5OSfdDJK" 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 140, 17 | "metadata": { 18 | "id": "tmsho5-hdFEV" 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "train_data = pd.read_csv('/content/drive/MyDrive/csv_files/linear_data_train.csv')\n", 23 | "test_data = pd.read_csv('/content/drive/MyDrive/csv_files/linear_data_test.csv')\n", 24 | "\n", 25 | "train_data = np.array(train_data)\n", 26 | "test_data = np.array(test_data)" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 141, 32 | "metadata": { 33 | "id": "AQwl1JgldA7t" 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "class Perceptron:\n", 38 | " def __init__(self, data):\n", 39 | " self.X = np.array([data[:, 0], data[:, 1]])\n", 40 | " self.Y = np.array(data[:, 2])\n", 41 | " self.X = self.X.reshape(-1, 2)\n", 42 | " self.W = np.random.rand(2)\n", 43 | " self.lr = 0.01\n", 44 | "\n", 45 | " def fit(self):\n", 46 | " for i in range(len(self.X)):\n", 47 | " y_pred = np.matmul(self.X[i], w)\n", 48 | " e = self.Y[i] - y_pred\n", 49 | " self.W = self.W + e * self.lr * self.X[i]\n", 50 | "\n", 51 | " self.W = self.W.reshape(2, 1)\n", 52 | "\n", 53 | " def predict(self, X):\n", 54 | " Y_predic = np.matmul(X, self.W)\n", 55 | " res = []\n", 56 | " for i in range(len(Y_predic)):\n", 57 | " if Y_predic[i] > 0:\n", 58 | " res.append(1)\n", 59 | " else:\n", 60 | " res.append(-1)\n", 61 | " return np.array(res)\n", 62 | "\n", 63 | " def evaluation(self, X, Y):\n", 64 | " Y_predic = np.matmul(X, self.W)\n", 65 | " correct = 0\n", 66 | "\n", 67 | " for i in range(len(X)):\n", 68 | " if (Y[i] > 0 and Y_predic[i] > 0) or (Y[i] < 1 and Y_predic[i] < 1):\n", 69 | " correct += 1\n", 70 | " acc = (correct * 100 / len(Y)) / 100\n", 71 | "\n", 72 | " return acc" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": 142, 78 | "metadata": { 79 | "colab": { 80 | "base_uri": "https://localhost:8080/" 81 | }, 82 | "id": "Hd6YUbshRyTz", 83 | "outputId": "c569b223-5518-4aa2-e1d6-12c4ddf32f2c" 84 | }, 85 | "outputs": [ 86 | { 87 | "name": "stdout", 88 | "output_type": "stream", 89 | "text": [ 90 | "Test Accuracy: 0.917\n" 91 | ] 92 | } 93 | ], 94 | "source": [ 95 | "model = Perceptron(train_data)\n", 96 | "model.fit()\n", 97 | "\n", 98 | "print('Test Accuracy: ', model.evaluation(model.X, model.Y))" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": 143, 104 | "metadata": { 105 | "id": "Y0Mbjqgja7DB" 106 | }, 107 | "outputs": [], 108 | "source": [ 109 | "X_test = np.array([test_data[:, 0], test_data[:, 1]])\n", 110 | "Y_test = np.array(test_data[:, 2])\n", 111 | "X_test = X_test.reshape(-1, 2)" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 144, 117 | "metadata": { 118 | "colab": { 119 | "base_uri": "https://localhost:8080/" 120 | }, 121 | "id": "bNhfqGmAbEPh", 122 | "outputId": "7be46ac4-0e03-4d60-fa98-fbbcc018d533" 123 | }, 124 | "outputs": [ 125 | { 126 | "data": { 127 | "text/plain": [ 128 | "array([ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 129 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 130 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 131 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 132 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 133 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 134 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 135 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 136 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1,\n", 137 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 138 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 139 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1])" 140 | ] 141 | }, 142 | "execution_count": 144, 143 | "metadata": {}, 144 | "output_type": "execute_result" 145 | } 146 | ], 147 | "source": [ 148 | "model.predict(X_test)" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 145, 154 | "metadata": { 155 | "colab": { 156 | "base_uri": "https://localhost:8080/" 157 | }, 158 | "id": "Ah_HwNqBUDj5", 159 | "outputId": "4517e27e-2768-445b-8ff4-c4095473a1a1" 160 | }, 161 | "outputs": [ 162 | { 163 | "name": "stdout", 164 | "output_type": "stream", 165 | "text": [ 166 | "Test Accuracy: 0.905\n" 167 | ] 168 | } 169 | ], 170 | "source": [ 171 | "print('Test Accuracy: ', model.evaluation(X_test, Y_test))" 172 | ] 173 | } 174 | ], 175 | "metadata": { 176 | "colab": { 177 | "name": "Perceptron_Accuracy.ipynb", 178 | "provenance": [] 179 | }, 180 | "kernelspec": { 181 | "display_name": "Python 3 (ipykernel)", 182 | "language": "python", 183 | "name": "python3" 184 | }, 185 | "language_info": { 186 | "codemirror_mode": { 187 | "name": "ipython", 188 | "version": 3 189 | }, 190 | "file_extension": ".py", 191 | "mimetype": "text/x-python", 192 | "name": "python", 193 | "nbconvert_exporter": "python", 194 | "pygments_lexer": "ipython3", 195 | "version": "3.9.6" 196 | } 197 | }, 198 | "nbformat": 4, 199 | "nbformat_minor": 4 200 | } 201 | -------------------------------------------------------------------------------- /Perceptron/csv_files/linear_data_test.csv: -------------------------------------------------------------------------------- 1 | X1, X2, Y 2 | 0.147562141,0.243518271,-1 3 | 0.17986899,0.092253703,-1 4 | 0.754244046,0.523874856,1 5 | 0.248663781,0.175587276,-1 6 | 0.39721749,0.034213495,-1 7 | 0.450981608,0.032885898,-1 8 | 0.335532917,0.16654443,-1 9 | 0.37137205,0.167201755,-1 10 | 0.280985655,0.214982886,-1 11 | 0.313304894,0.005219768,-1 12 | 0.638465839,0.590446627,1 13 | 0.431591143,0.047083073,-1 14 | 0.207774186,0.08197187,-1 15 | 0.741609489,0.484712762,1 16 | 0.953514363,0.63962583,1 17 | 0.642944532,0.561453315,1 18 | 0.226494744,0.054182458,-1 19 | 0.303693007,0.023117489,-1 20 | 0.442909335,0.264587381,-1 21 | 0.689641361,0.441606458,1 22 | 0.808516873,0.460988844,1 23 | 0.265847527,-0.02176123,-1 24 | 0.277512671,-0.03519462,-1 25 | 0.650996505,0.281211164,1 26 | 0.604564151,0.581607218,1 27 | 0.361767991,0.088941627,-1 28 | 0.666911464,0.65838218,1 29 | 0.230633128,-0.018832998,-1 30 | 0.137952214,0.113629399,-1 31 | 0.736452219,0.491761591,1 32 | 0.597108275,0.550563582,1 33 | 0.602609505,0.427255883,1 34 | 0.259748077,0.083086457,-1 35 | 0.6593677,0.398195252,1 36 | 0.684338148,0.243306417,1 37 | 0.855013781,0.552123366,1 38 | 0.960752242,0.589326479,1 39 | 0.218532689,0.149970477,-1 40 | 0.340460188,0.163897052,-1 41 | 0.355834203,0.336747248,-1 42 | 0.692211516,0.577457902,1 43 | 0.66215496,0.570323145,1 44 | 0.372511986,0.08571986,-1 45 | 0.229005358,0.026734503,-1 46 | 0.309531718,0.144331016,-1 47 | 0.263227254,0.127925335,-1 48 | 0.308466277,0.091035136,-1 49 | 0.09307746,0.113987149,-1 50 | 0.622936923,0.456717037,1 51 | 0.706148123,0.490803326,1 52 | 0.758732482,0.456626656,1 53 | 0.694577645,0.622832561,1 54 | 0.369820199,0.055049739,-1 55 | 0.239404253,0.132757785,-1 56 | 0.218428111,-0.219178158,-1 57 | 0.692946435,0.544563975,1 58 | 0.245371539,0.101855417,-1 59 | 0.569134424,0.294387383,1 60 | 0.714809619,0.538163513,1 61 | 0.358067954,0.170445389,-1 62 | 0.320547429,0.251711616,-1 63 | 0.331588068,0.107835654,-1 64 | 0.304030747,0.054775017,-1 65 | 0.321995719,0.005792178,-1 66 | 0.865360179,0.428046918,1 67 | 0.671798232,0.344725092,1 68 | 0.828788452,0.7110072,1 69 | 0.781619319,0.632570614,1 70 | 0.731475533,0.25791493,1 71 | 0.629915797,0.284014988,1 72 | 0.422354336,0.114636655,-1 73 | 0.673380826,0.577899254,1 74 | 0.411902242,-0.032830554,-1 75 | 0.819974435,0.549032983,1 76 | 0.749879049,0.521106457,1 77 | 0.865129108,0.505063149,1 78 | 0.802865061,0.534926888,1 79 | 0.757857478,0.353704732,1 80 | 0.795630162,0.351825596,1 81 | 0.462310718,0.101365623,-1 82 | 0.269750572,-0.149506766,-1 83 | 0.832120799,0.579782803,1 84 | 0.389685945,0.163719795,-1 85 | 0.300495738,0.042052746,-1 86 | 0.301934594,0.083983737,-1 87 | 0.150962587,0.233882916,-1 88 | 0.254529481,0.085979958,-1 89 | 0.758924966,0.514527266,1 90 | 0.688094758,0.451071028,1 91 | 0.308508647,0.124020803,-1 92 | 0.554884403,0.712912974,1 93 | 0.734968535,0.291312226,1 94 | 0.424844829,0.018544219,-1 95 | 0.307133844,-0.028034347,-1 96 | 0.398740975,-0.076759075,-1 97 | 0.273728057,0.251849537,-1 98 | 0.740350012,0.53173353,1 99 | 0.286412336,0.083431046,-1 100 | 0.844565149,0.556675572,1 101 | 0.570621351,0.405651266,1 102 | 0.780228462,0.682045157,1 103 | 0.808610831,0.480559179,1 104 | 0.404736393,0.053446156,-1 105 | 0.018221982,-0.089084263,-1 106 | 0.580213837,0.434088367,1 107 | 0.439028572,-0.008916224,-1 108 | 0.169013027,0.139040747,-1 109 | 0.7218132,0.453310307,1 110 | 0.579448726,0.601098431,1 111 | 0.597577907,0.58234623,1 112 | 0.706844038,0.444478339,1 113 | 0.311812492,-0.024560949,-1 114 | 0.696270344,0.559918987,1 115 | 0.517693836,0.136882581,-1 116 | 0.711330814,0.368148477,1 117 | 0.651106026,0.645855202,1 118 | 0.312846179,0.167410567,-1 119 | 0.245212502,0.078899602,-1 120 | 0.281584873,0.163301177,-1 121 | 0.224177538,0.19872975,-1 122 | 0.213607309,0.065963795,-1 123 | 0.236451259,0.06529366,-1 124 | 0.769116121,0.529177074,1 125 | 0.221575998,0.130222506,-1 126 | 0.624409461,0.379450782,1 127 | 0.547121965,0.273564135,1 128 | 0.175926185,0.160037295,-1 129 | 0.7361217,0.506024281,1 130 | 0.425480844,-0.047929102,-1 131 | 0.618590118,0.562390208,1 132 | 0.534384693,-0.004583157,-1 133 | 0.470829423,0.056717712,-1 134 | 0.375738399,0.10675403,-1 135 | 0.31963532,0.129350314,-1 136 | 0.24334967,0.116546107,-1 137 | 0.343573541,-0.003386661,-1 138 | 0.186259256,0.049140403,-1 139 | 0.646103731,0.476865433,1 140 | 0.74221688,0.390083115,1 141 | 0.839287535,0.550027764,1 142 | 0.800012129,0.466861127,1 143 | 0.216202082,0.176368366,-1 144 | 0.780494992,0.375525772,1 145 | 0.726960941,0.580849893,1 146 | 0.743612641,0.552738237,1 147 | 0.59782727,0.314015372,1 148 | 0.753161899,0.612163368,1 149 | 0.672106155,0.541402426,1 150 | 0.611648648,-0.176614446,-1 151 | 0.643311341,0.539175367,1 152 | 0.652427514,0.386155038,1 153 | 0.301520618,0.007797255,-1 154 | 0.580917034,0.318993261,1 155 | 0.658638759,0.585335317,1 156 | 0.52265547,0.526482285,1 157 | 0.619107709,0.395568496,1 158 | 0.342854386,0.007790579,-1 159 | 0.869997334,0.574001573,1 160 | 0.318543716,0.114391118,-1 161 | 0.228396073,0.010606503,-1 162 | 0.727737131,0.383825537,1 163 | 0.242654358,0.229605566,-1 164 | 0.849147311,0.485542676,1 165 | 0.688785681,0.568723327,1 166 | 0.601072642,0.4729492,1 167 | 0.386597758,-0.046255317,-1 168 | 0.173427736,0.066103221,-1 169 | 0.212619485,0.226220588,-1 170 | 0.676379388,0.478200808,1 171 | 0.814570221,0.343974473,1 172 | 0.385176266,0.032160798,-1 173 | 0.749057204,0.460541975,1 174 | 0.249098134,0.135190024,-1 175 | 0.75561642,0.499437878,1 176 | 0.605289892,0.576382527,1 177 | 0.220124708,0.100802584,-1 178 | 0.611660354,0.582417425,1 179 | 0.638657315,0.567476782,1 180 | 0.70736496,0.5534601,1 181 | 0.750636528,0.41806486,1 182 | 0.258629634,0.205122709,-1 183 | 0.561659197,0.302892925,1 184 | 0.261830597,0.067522521,-1 185 | 0.61430857,0.605958741,1 186 | 0.414439463,0.009654258,-1 187 | 0.25232288,0.050655974,-1 188 | 0.290671271,0.001554054,-1 189 | 0.235453515,0.110972029,-1 190 | 0.732335416,0.448978572,1 191 | 0.810313995,0.495563825,1 192 | 0.421663018,-0.035647715,-1 193 | 0.696456152,0.492043579,1 194 | 0.648005875,0.474735589,1 195 | 0.586856366,0.486846359,1 196 | 0.311153185,0.066713738,-1 197 | 0.238197827,0.32980093,-1 198 | 0.152745736,-0.016922677,-1 199 | 0.383676691,-0.061388829,-1 200 | 0.587949575,0.759074051,1 201 | 0.298771399,0.181005648,-1 202 | -------------------------------------------------------------------------------- /Perceptron/csv_files/linear_data_train.csv: -------------------------------------------------------------------------------- 1 | X1, X2, Y 2 | 0.272702493,0.02019367,-1 3 | 0.867855052,0.597829896,1 4 | 0.686252591,0.425683115,1 5 | 0.186145516,0.041271694,-1 6 | 0.645338926,0.580301642,1 7 | 0.674375675,0.427871763,1 8 | 0.699879938,0.404807703,1 9 | 0.802841564,0.416099191,1 10 | 0.585520611,0.614734443,1 11 | 0.159362691,0.043879185,-1 12 | 0.819060935,0.537459473,1 13 | 0.878940344,0.498259089,1 14 | 0.717795051,0.474461892,1 15 | 0.566033677,0.387396343,1 16 | 0.24742973,0.087999573,-1 17 | 0.431249648,0.508121167,1 18 | 0.445587716,0.495087107,1 19 | 0.760391742,0.444561107,1 20 | 0.760510615,0.515525122,1 21 | 0.275494819,0.140478719,-1 22 | 0.753968842,0.524162772,1 23 | 0.29449774,-0.0503884,-1 24 | 0.804717984,0.398515224,1 25 | 0.300418039,0.351027136,-1 26 | 0.688360546,0.373526723,1 27 | 0.852345401,0.406303936,1 28 | 0.668099899,0.531841348,1 29 | 0.304800741,0.150389929,-1 30 | 0.6193675,0.480216866,1 31 | 0.686703089,0.361979344,1 32 | 0.718589859,0.416212573,1 33 | 0.826085146,0.575286896,1 34 | 0.42044841,-0.054640306,-1 35 | 0.751415321,0.325021724,1 36 | 0.73059241,0.541059118,1 37 | 0.81390484,0.495235613,1 38 | 0.339090629,0.030999138,-1 39 | 0.387754496,0.111295769,-1 40 | 0.338508363,0.183845232,-1 41 | 0.252169642,-0.027792077,-1 42 | 0.192477984,0.248539504,-1 43 | 0.579132816,0.596674753,1 44 | 0.709753564,0.627776265,1 45 | 0.385744506,0.173471897,-1 46 | 0.378661421,0.247146939,-1 47 | 0.646574261,0.322675381,1 48 | 0.609118024,0.647831712,1 49 | 0.75863507,0.597297179,1 50 | 0.112918894,0.039919664,-1 51 | 0.07571968,0.212549149,-1 52 | 0.262526612,0.153510776,-1 53 | 0.400776043,0.011892806,-1 54 | 0.249868973,0.087510966,-1 55 | 0.300843499,-0.125478801,-1 56 | 0.687329592,0.585402381,1 57 | 0.2160495,0.107752456,-1 58 | 0.727973307,0.445424059,1 59 | 0.611661189,0.443567247,1 60 | 0.659200378,0.438264243,1 61 | 0.316661223,0.005127233,-1 62 | 0.335511102,0.022028709,-1 63 | 0.568790247,0.605633121,1 64 | 0.759945347,0.530666204,1 65 | 0.254527444,0.171592939,-1 66 | 0.766837549,0.486441995,1 67 | 0.33289476,-0.011293685,-1 68 | 0.377466774,0.155504538,-1 69 | 0.399326027,0.153662508,-1 70 | 0.836999238,0.564460048,1 71 | 0.171119963,0.12753686,-1 72 | 0.506373282,0.41795237,1 73 | 0.560722898,0.720223842,1 74 | 0.348845476,0.225755863,-1 75 | 0.251503093,-0.043765769,-1 76 | 0.177615609,0.075315489,-1 77 | 0.478794517,0.205951267,-1 78 | 0.829635535,0.272892546,1 79 | 0.837778498,0.453830065,1 80 | 0.314005751,-0.036418264,-1 81 | 0.777874637,0.658965983,1 82 | 0.667422914,0.450202738,1 83 | 0.413187585,-0.038254268,-1 84 | 0.313650896,-0.052069716,-1 85 | 0.337713942,0.142314507,-1 86 | 0.208535456,0.036561098,-1 87 | 0.751917523,0.397763749,1 88 | 0.704285129,0.017352975,-1 89 | 0.660159168,0.686879191,1 90 | 0.239882597,0.039489328,-1 91 | 0.261667488,0.120468314,-1 92 | 0.221322822,-0.014796035,-1 93 | 0.302200895,0.077336751,-1 94 | 0.464646005,0.062440613,-1 95 | 0.723534671,0.561586284,1 96 | 0.779848416,0.403351221,1 97 | 0.296195397,-0.088982598,-1 98 | 0.310118813,-0.047025597,-1 99 | 0.280329284,0.209183926,-1 100 | 0.495449786,0.094389729,-1 101 | 0.323181642,0.214347078,-1 102 | 0.608712387,0.464674598,1 103 | 0.333967006,0.10885881,-1 104 | 0.670725446,0.562078812,1 105 | 0.157682516,0.114425939,-1 106 | 0.263527985,0.077934192,-1 107 | 0.768842729,0.607910862,1 108 | 0.782968217,0.684563066,1 109 | 0.559552053,0.525739247,1 110 | 0.218011674,0.235791501,-1 111 | 0.889413715,0.272981766,1 112 | 0.707683165,0.438581002,1 113 | 0.626040632,0.57345244,1 114 | 0.319897191,0.064477158,-1 115 | 0.414126766,0.299837128,-1 116 | 0.321648042,0.110466635,-1 117 | 0.302937417,0.080064283,-1 118 | 0.229048041,-0.184479428,-1 119 | 0.083852327,0.167658403,-1 120 | 0.191948769,-0.049862439,-1 121 | 0.710093053,0.511290768,1 122 | 0.249260921,0.084829402,-1 123 | 0.344202229,0.031080198,-1 124 | 0.394779069,0.063996793,-1 125 | 0.296291514,0.09405547,-1 126 | 0.812874595,0.469660618,1 127 | 0.31202094,0.338829143,-1 128 | 0.663441005,0.463599189,1 129 | 0.51647155,0.661466566,1 130 | 0.301371309,0.075325597,-1 131 | 0.273261668,0.063309958,-1 132 | 0.191452121,-0.143733307,-1 133 | 0.180617863,0.154215475,-1 134 | 0.229543176,0.163137051,-1 135 | 0.245315234,0.019128303,-1 136 | 0.748493032,0.435325674,1 137 | 0.772508782,0.588852648,1 138 | 0.63647794,0.390966712,1 139 | 0.28508557,-0.005317315,-1 140 | 0.163379626,-0.117361546,-1 141 | 0.468617184,0.207884744,-1 142 | 0.716267376,0.580559952,1 143 | 0.691690404,0.455468189,1 144 | 0.832068211,0.498498174,1 145 | 0.798097754,0.422749114,1 146 | 0.316819265,-0.004756159,-1 147 | 0.827857868,0.631884677,1 148 | 0.82494071,0.451138823,1 149 | 0.749289181,0.53232899,1 150 | 0.624983995,0.351158852,1 151 | 0.24640977,0.150676967,-1 152 | 0.223024354,-0.151750473,-1 153 | 0.762533931,0.586377574,1 154 | 0.256898604,0.043850976,-1 155 | 0.253907298,-0.039504454,-1 156 | 0.73437275,0.663550372,1 157 | 0.814369496,0.468059077,1 158 | 0.458348241,0.245312288,-1 159 | 0.439622581,0.06321598,-1 160 | 0.640924212,0.430795319,1 161 | 0.388509099,0.197161149,-1 162 | 0.18113295,0.126716633,-1 163 | 0.376802676,0.1596273,-1 164 | 0.613992378,0.448724107,1 165 | 0.831026553,0.484913716,1 166 | 0.556045972,0.587379268,1 167 | 0.395878016,0.103231209,-1 168 | 0.591953582,0.417286878,1 169 | 0.467251123,0.520724902,1 170 | 0.346922581,0.094477565,-1 171 | 0.696503871,0.437940147,1 172 | 0.637613214,0.471962377,1 173 | 0.335162982,-0.027939762,-1 174 | 0.143582808,0.167860616,-1 175 | 0.723751518,0.478458347,1 176 | 0.660177641,0.483452537,1 177 | 0.764268006,0.535206233,1 178 | 0.720740792,0.389326271,1 179 | 0.174056769,0.15423859,-1 180 | 0.19878876,0.0068262,-1 181 | 0.910390774,0.566187876,1 182 | 0.776646385,0.568139089,1 183 | 0.587905469,0.436903267,1 184 | 0.66945716,0.614707436,1 185 | 0.81028328,0.545987496,1 186 | 0.344774208,0.088155052,-1 187 | 0.303495334,0.00893834,-1 188 | 0.269511612,0.211219558,-1 189 | 0.299334936,0.10114696,-1 190 | 0.506022528,0.578908198,1 191 | 0.394109802,0.033647605,-1 192 | 0.327404729,0.043100751,-1 193 | 0.365495573,0.048273009,-1 194 | 0.3741303,0.035991392,-1 195 | 0.855269381,0.453325723,1 196 | 0.183413427,0.027202759,-1 197 | 0.733614867,0.526643787,1 198 | 0.318182021,0.103656648,-1 199 | 0.240920266,0.050865777,-1 200 | 0.513047324,0.615283054,1 201 | 0.151334881,0.315431997,-1 202 | 0.394462482,0.101655086,-1 203 | 0.51517078,0.587955119,1 204 | 0.878229025,0.383079544,1 205 | 0.209125275,0.040515509,-1 206 | 0.74107371,0.543223635,1 207 | 0.717691808,0.468865944,1 208 | 0.292397882,-0.233389261,-1 209 | 0.702115243,0.572679676,1 210 | 0.37509487,0.150809692,-1 211 | 0.785725653,0.657917019,1 212 | 0.654858803,0.594007047,1 213 | -0.015536607,0.11847357,-1 214 | 0.82368985,0.517843286,1 215 | 0.737024213,0.516770848,1 216 | 0.547824942,0.542864387,1 217 | 0.003002436,0.066932161,-1 218 | 0.273884393,0.171475706,-1 219 | 0.103536256,0.059867481,-1 220 | 0.773675819,0.453959112,1 221 | 0.578217532,0.436671714,1 222 | 0.232639643,0.240924534,-1 223 | 0.727694558,0.642259843,1 224 | 0.290605671,0.164229335,-1 225 | 0.692293723,0.49693959,1 226 | 0.615593462,0.449406012,1 227 | 0.627821905,0.619436043,1 228 | 0.23832943,0.286376,-1 229 | 0.792581076,0.344853674,1 230 | 0.350738566,0.225582247,-1 231 | 0.319592423,0.086751309,-1 232 | 0.643171035,0.563205997,1 233 | 0.374723362,0.008377007,-1 234 | 0.254324259,0.00144734,-1 235 | 0.578663882,0.529705468,1 236 | 0.882743803,0.561587201,1 237 | 0.815857168,0.527439454,1 238 | 0.726982121,0.492554059,1 239 | 0.552847329,0.577227366,1 240 | 0.637439392,0.515361217,1 241 | 0.835461222,0.350519885,1 242 | 0.652410316,0.509471949,1 243 | 0.488358974,0.00779776,-1 244 | 0.785369846,0.570234703,1 245 | 0.777757686,0.451730707,1 246 | 0.795701598,0.524204837,1 247 | 0.5491691,0.384759753,1 248 | 0.234862683,0.129931624,-1 249 | 0.193303346,0.102307827,-1 250 | 0.742839831,0.682694302,1 251 | 0.743079208,0.437048647,1 252 | 0.195641254,0.142516327,-1 253 | 0.194197686,0.071130349,-1 254 | 0.397289909,0.147242119,-1 255 | 0.280735383,0.274119761,-1 256 | 0.27161631,0.130158034,-1 257 | 0.226743614,0.031337905,-1 258 | 0.323762524,0.23784457,-1 259 | 0.433031581,0.088240437,-1 260 | 0.634980623,0.521478939,1 261 | 0.24883376,0.220434483,-1 262 | 0.631488997,0.507633088,1 263 | 0.581698848,0.51666811,1 264 | 0.615425234,0.350418392,1 265 | 0.195709694,0.053442351,-1 266 | 0.258753404,0.084635387,-1 267 | 0.679225607,0.480197922,1 268 | 0.356454895,0.005996127,-1 269 | 0.157243083,0.001982887,-1 270 | 0.403489012,0.176443486,-1 271 | 0.406157734,0.148474645,-1 272 | 0.557526379,0.469763928,1 273 | 0.409614776,0.12769519,-1 274 | 0.221130958,0.002462516,-1 275 | 0.307149139,0.03511284,-1 276 | 0.880521324,0.437411475,1 277 | 0.20905491,0.36536814,-1 278 | 0.744834054,0.328366131,1 279 | 0.619738988,0.498248349,1 280 | 0.732680163,0.356227528,1 281 | 0.235409738,0.155565968,-1 282 | 0.708282473,0.466522589,1 283 | 0.653624612,0.545726726,1 284 | 0.244974324,0.023331704,-1 285 | 0.687006405,0.537180417,1 286 | 0.270027215,0.145099857,-1 287 | 0.529880648,0.373601704,1 288 | 0.153435201,0.08271426,-1 289 | 0.196907982,0.011033579,-1 290 | 0.183488582,0.178008252,-1 291 | 0.103729267,0.226377009,-1 292 | 0.497275351,0.557524688,1 293 | 0.234936388,0.153641322,-1 294 | 0.638117953,0.502399163,1 295 | 0.265919559,-0.017544407,-1 296 | 0.972739429,0.579478912,1 297 | 0.771707056,0.432483215,1 298 | 0.319847915,-0.018293371,-1 299 | 0.640152219,0.446549485,1 300 | 0.309726419,0.018071172,-1 301 | 0.596342178,0.465539422,1 302 | 0.700837299,0.564599834,1 303 | 0.627143376,0.566889376,1 304 | 0.678457617,0.462068881,1 305 | 0.335575549,0.236793685,-1 306 | 0.552340913,0.454735797,1 307 | 0.775272924,0.57057105,1 308 | 0.389002733,0.084444015,-1 309 | 0.774075575,0.64428697,1 310 | 0.436576259,0.113144386,-1 311 | 0.131806366,0.135492054,-1 312 | 0.86530561,0.39300403,1 313 | 0.383896547,0.136931931,-1 314 | 0.528768511,0.186942062,-1 315 | 0.872037927,0.52429898,1 316 | 0.31939868,0.082050069,-1 317 | 0.306019229,0.171146091,-1 318 | 0.568028897,0.397139632,1 319 | 0.687004258,0.657174774,1 320 | 0.264884893,0.152177916,-1 321 | 0.324477457,0.130638598,-1 322 | 0.680743646,0.618979277,1 323 | 0.621895528,0.573375984,1 324 | 0.712168083,0.535508736,1 325 | 0.619787017,0.609027977,1 326 | 0.365233331,-0.061336224,-1 327 | 0.397735987,0.112311028,-1 328 | 0.606235254,0.400447896,1 329 | 0.321941398,0.213748588,-1 330 | 0.461363309,0.118628065,-1 331 | 0.70108411,0.432315413,1 332 | 0.599379648,0.557589212,1 333 | 0.765671833,0.522974365,1 334 | 0.418904308,0.141407527,-1 335 | 0.092823653,0.208792514,-1 336 | 0.773308592,0.384933544,1 337 | 0.310011149,-0.113025501,-1 338 | 0.330476298,0.056283357,-1 339 | 0.719222957,0.599601234,1 340 | 0.094826811,0.155328008,-1 341 | 0.266557091,0.028139647,-1 342 | 0.645157934,0.50422698,1 343 | 0.962330528,0.452805672,1 344 | 0.729786812,0.567362215,1 345 | 0.428220793,-0.116947049,-1 346 | 0.282920313,0.210396468,-1 347 | 0.818960733,0.471478708,1 348 | 0.301000396,0.275350639,-1 349 | 0.248563052,0.210458573,-1 350 | 0.624567746,0.46336477,1 351 | 0.721131917,0.331701804,1 352 | 0.444882507,0.061202706,-1 353 | 0.638377284,0.445003526,1 354 | 0.696976438,0.360248232,1 355 | 0.332136597,-0.109847077,-1 356 | 0.699361385,0.432264273,1 357 | 0.83199397,0.539947466,1 358 | 0.561925911,0.424648173,1 359 | 0.156189816,0.072905575,-1 360 | 0.693031841,0.405688204,1 361 | 0.284499115,0.169492667,-1 362 | 0.382645621,0.693017458,1 363 | 0.787366045,0.562457487,1 364 | 0.357534849,0.026936192,-1 365 | 0.731630969,0.553183989,1 366 | 0.1962344,-0.183104296,-1 367 | 0.360587443,0.0459158,-1 368 | 0.207579155,0.153368409,-1 369 | 0.779538871,0.31652036,1 370 | 0.60341397,0.565691098,1 371 | 0.703962937,0.515774251,1 372 | 0.262673572,0.065065824,-1 373 | 0.28207933,0.111953207,-1 374 | 0.297324925,-0.039122832,-1 375 | 0.763180071,0.490652822,1 376 | 0.315184964,0.253006255,-1 377 | 0.734171641,0.519167159,1 378 | 0.184180985,0.003931616,-1 379 | 0.223298865,-0.026327092,-1 380 | 0.316478145,0.057503571,-1 381 | 0.378857138,0.220829649,-1 382 | 0.397656834,0.083190442,-1 383 | 0.759538686,0.437127673,1 384 | 0.61666464,0.61739168,1 385 | 0.145722236,0.1080842,-1 386 | 0.212343118,0.150167955,-1 387 | 0.735033094,0.570909233,1 388 | 0.775437103,0.371256938,1 389 | 0.713781264,0.62710455,1 390 | 0.657921395,0.661998316,1 391 | 0.76126467,0.463976868,1 392 | 0.713206276,0.744066074,1 393 | 0.496790565,0.346152052,1 394 | 0.229258132,0.223919223,-1 395 | 0.629957821,0.598895837,1 396 | 0.463104017,0.583455772,1 397 | 0.74019708,0.511804495,1 398 | 0.793007641,0.645624889,1 399 | 0.670301302,0.505798661,1 400 | 0.642616536,0.528714804,1 401 | 0.788762645,0.616529533,1 402 | 0.85746494,0.510314894,1 403 | 0.336846955,-0.142491179,-1 404 | 0.633643111,0.560760075,1 405 | 0.808547386,0.483391731,1 406 | 0.171527188,0.181674626,-1 407 | 0.785541616,0.584142957,1 408 | 0.679314779,0.588366113,1 409 | 0.361113481,0.05357248,-1 410 | 0.397064291,0.214166443,-1 411 | 0.592898508,0.597423108,1 412 | 0.762216938,0.685826996,1 413 | 0.59847089,0.5122326,1 414 | 0.847631109,0.469639452,1 415 | 0.352206405,0.065813032,-1 416 | 0.302196572,0.065740719,-1 417 | 0.635779981,0.528047686,1 418 | 0.578992955,0.514896918,1 419 | 0.212999521,0.054144148,-1 420 | 0.891804459,0.39866566,1 421 | 0.654340337,0.451580502,1 422 | 0.247719578,0.0799734,-1 423 | 0.273897422,0.203501938,-1 424 | 0.567001183,0.597298736,1 425 | 0.46779814,0.229337852,-1 426 | 0.570353133,0.478803833,1 427 | 0.443542502,0.092817096,-1 428 | 0.833742703,0.433885149,1 429 | 0.207152652,0.160692107,-1 430 | 0.596946688,0.504932395,1 431 | 0.237987469,0.111890467,-1 432 | 0.122120423,0.06644436,-1 433 | 0.625397213,0.429400535,1 434 | 0.778207481,0.503531293,1 435 | 0.436212859,0.012286227,-1 436 | 0.625001695,0.549123827,1 437 | 0.136545301,0.126831485,-1 438 | 0.59773158,0.556662445,1 439 | 0.408344126,0.253336636,-1 440 | 0.964226975,0.320675978,1 441 | 0.324997356,0.048644424,-1 442 | 0.652230817,0.531950364,1 443 | 0.038982817,0.137251855,-1 444 | 0.736664215,0.404307514,1 445 | 0.744811761,0.575886916,1 446 | 0.470458605,0.289305227,-1 447 | 0.386235497,0.129688952,-1 448 | 0.287511323,0.128228004,-1 449 | 0.214845705,0.15513268,-1 450 | 0.549283008,0.50296066,1 451 | 0.310174446,0.094148108,-1 452 | 0.195454567,-0.234607608,-1 453 | 0.298249802,0.112851003,-1 454 | 0.690237005,0.378108841,1 455 | 0.189398549,0.089027216,-1 456 | 0.614365823,0.456521991,1 457 | 0.518062634,0.561211029,1 458 | 0.372343421,-0.067379295,-1 459 | 0.605582551,0.719570588,1 460 | 0.558400399,0.553650999,1 461 | 0.619303707,0.525020408,1 462 | 0.416806926,0.127498072,-1 463 | 0.668371871,0.439494297,1 464 | 0.227864006,0.249375945,-1 465 | 0.388964304,0.051211859,-1 466 | 0.523396016,0.079391949,-1 467 | 0.6965027,0.319249569,1 468 | 0.694920878,0.611577831,1 469 | 0.185607223,0.141410362,-1 470 | 0.639350524,0.531104368,1 471 | 0.294566651,0.076481761,-1 472 | 0.725640169,0.493583054,1 473 | 0.877070872,0.391289726,1 474 | 0.587562805,0.729819252,1 475 | 0.340721421,0.168497748,-1 476 | 0.430236481,0.130542182,-1 477 | 0.785999866,0.539671414,1 478 | 0.758827794,0.503597044,1 479 | 0.590143103,0.151490159,-1 480 | 0.57817475,0.267200798,1 481 | 0.657664684,0.410509107,1 482 | 0.839918272,0.427395442,1 483 | 0.39200354,0.236253719,-1 484 | 0.788051288,0.292994345,1 485 | 0.739784992,0.354434077,1 486 | 0.455170463,-0.130902506,-1 487 | 0.24444367,0.200144612,-1 488 | 0.636376133,0.457756387,1 489 | 0.796637839,0.58073782,1 490 | 0.708801577,0.545352361,1 491 | 0.550265645,0.484494062,1 492 | 0.234541465,0.233991673,-1 493 | 0.194670135,0.126177918,-1 494 | 0.766889065,0.466402613,1 495 | 0.800718848,0.404593259,1 496 | 0.381284473,0.176873564,-1 497 | 0.599522552,0.543136173,1 498 | 0.240574345,0.025351393,-1 499 | 0.410017041,-0.010081254,-1 500 | 0.361974435,0.08814345,-1 501 | 0.207727525,-0.036764061,-1 502 | 0.159448925,0.201522378,-1 503 | 0.256651273,-0.132347853,-1 504 | 0.197554559,0.177957295,-1 505 | 0.398728684,0.167280159,-1 506 | 0.360811994,-0.048248666,-1 507 | 0.733941291,0.433150455,1 508 | 0.618828631,0.486055269,1 509 | 0.165115647,0.166373378,-1 510 | 0.329986469,-0.145319876,-1 511 | 0.655945618,0.565458428,1 512 | 0.635921014,0.611493955,1 513 | 0.187670063,0.258563366,-1 514 | 0.349829852,0.084957808,-1 515 | 0.378321216,0.214635757,-1 516 | 0.707728669,0.481147708,1 517 | 0.355190717,0.120052747,-1 518 | 0.466632126,0.034233503,-1 519 | 0.660195421,0.5357922,1 520 | 0.372382588,0.178211757,-1 521 | 0.289559635,0.232916244,-1 522 | 0.275691767,0.104233261,-1 523 | 0.457583347,0.011356806,-1 524 | 0.30207949,0.153308803,-1 525 | 0.342152316,0.223798247,-1 526 | 0.273887321,0.206809481,-1 527 | 0.685612837,0.664078399,1 528 | 0.764881455,0.621398,1 529 | 0.522380209,0.358551794,1 530 | 0.593308566,0.451690106,1 531 | 0.291803725,0.127856814,-1 532 | 0.726693013,0.461352574,1 533 | 0.737229357,0.505908625,1 534 | 0.565792951,0.633270228,1 535 | -0.042991801,0.134210111,-1 536 | 0.831211183,0.526235902,1 537 | 0.650675908,0.513559987,1 538 | 0.696222491,0.557615802,1 539 | 0.650270083,0.432031433,1 540 | 0.211309306,0.185172747,-1 541 | 0.880032898,0.471690943,1 542 | 0.242159522,0.124004648,-1 543 | 0.738575812,0.560734748,1 544 | 0.218745426,-0.028033197,-1 545 | 0.157586196,0.116680322,-1 546 | 0.746213041,0.479935581,1 547 | 0.737379178,0.524749497,1 548 | 0.676603306,0.574394608,1 549 | 0.234500311,0.133431799,-1 550 | 0.7404275,0.342508163,1 551 | 0.746154364,0.611291854,1 552 | 0.13048354,0.270796874,-1 553 | 0.363394338,0.0324432,-1 554 | 0.699695087,0.377325658,1 555 | 0.215982659,0.10027664,-1 556 | 0.322170813,0.028695185,-1 557 | 0.467815313,0.1662577,-1 558 | 0.344496908,-0.078789157,-1 559 | 0.269913803,0.180110737,-1 560 | 0.607093838,0.428992876,1 561 | 0.702841599,0.528984273,1 562 | 0.433699692,0.040123678,-1 563 | 0.642206235,0.166347497,1 564 | 0.280306384,0.051508611,-1 565 | 0.199028976,0.15739628,-1 566 | 0.685560135,0.351734395,1 567 | 0.158536018,0.145683091,-1 568 | 0.160030888,0.172756913,-1 569 | 0.564790817,0.477457505,1 570 | 0.552832873,0.642784727,1 571 | 0.194718232,0.156165825,-1 572 | 0.426026429,0.164696486,-1 573 | 0.597887804,0.594844294,1 574 | 0.295528267,0.07471834,-1 575 | 0.352633667,0.123923521,-1 576 | 0.116067262,0.105276933,-1 577 | 0.189970216,0.131514007,-1 578 | 0.358483581,0.158239696,-1 579 | 0.527275122,0.466595976,1 580 | 0.766176617,0.378363494,1 581 | 0.318242759,0.024772061,-1 582 | 0.349499568,0.068991219,-1 583 | 0.646156331,0.612417041,1 584 | 0.846563762,0.546017215,1 585 | 0.746112883,0.385233322,1 586 | 0.572935439,0.404890793,1 587 | 0.147158625,0.046082534,-1 588 | 0.336616456,0.066909262,-1 589 | 0.310793721,0.271359281,-1 590 | 0.728453224,0.322437669,1 591 | 0.253853548,-0.084252651,-1 592 | 0.709475389,0.52256018,1 593 | 0.800320633,0.480947298,1 594 | 0.455797243,0.055495748,-1 595 | 0.624757344,0.601581398,1 596 | 0.412517797,0.183547428,-1 597 | 0.754312959,0.542308257,1 598 | 0.774425471,0.55964283,1 599 | 0.785912061,0.607153576,1 600 | 0.55064757,0.52125398,1 601 | 0.781194628,0.437515084,1 602 | 0.769721404,0.489638617,1 603 | 0.345851331,-0.083542396,-1 604 | 0.274205453,0.036972956,-1 605 | 0.742730067,0.448510139,1 606 | 0.669008357,0.556092799,1 607 | 0.521279743,0.533259746,1 608 | 0.368961393,0.062056571,-1 609 | 0.41834396,-0.001487664,-1 610 | 0.678772181,0.297239508,1 611 | 0.81691795,0.350846548,1 612 | 0.576715848,0.510633959,1 613 | 0.609197072,0.696525281,1 614 | 0.290185007,0.095099127,-1 615 | 0.220627943,0.172388574,-1 616 | 0.323604069,0.321929879,-1 617 | 0.636452067,0.3786471,1 618 | 0.261772083,0.125482954,-1 619 | 0.199142614,0.248370103,-1 620 | 0.359692273,0.133475455,-1 621 | 0.65692378,0.399015674,1 622 | 0.765466551,0.486622733,1 623 | 0.363038944,0.190146712,-1 624 | 0.573728527,0.708506135,1 625 | 0.227434505,0.132005929,-1 626 | 0.362261102,0.182091406,-1 627 | 0.552767592,0.640231348,1 628 | 0.745008922,0.476138905,1 629 | 0.235016095,0.030821329,-1 630 | 0.569927186,0.533599513,1 631 | 0.540919226,0.445965588,1 632 | 0.537303629,0.442510392,1 633 | 0.614599312,0.293594213,1 634 | 0.606013975,0.544264841,1 635 | 0.45452881,0.499476424,1 636 | 0.737317162,0.455849266,1 637 | 0.226877644,0.077825777,-1 638 | 0.235769091,-0.054114838,-1 639 | 0.629191246,0.412962868,1 640 | 0.288703335,0.050983971,-1 641 | -0.055361045,0.112077098,-1 642 | 0.308572148,0.178866374,-1 643 | 0.280267718,0.168879329,-1 644 | 0.29059518,0.085496432,-1 645 | 0.879795924,0.517910779,1 646 | 0.647119064,0.487188901,1 647 | 0.187124095,0.121866784,-1 648 | 0.422112816,0.209956177,-1 649 | 0.732559071,0.440294558,1 650 | 0.388661232,0.148966053,-1 651 | 0.423245072,0.086738763,-1 652 | 0.282849124,0.148769987,-1 653 | 0.42476834,0.055631781,-1 654 | 0.17412996,0.008071876,-1 655 | 0.501843353,0.133031451,-1 656 | 0.120615735,0.03769336,-1 657 | 0.378693368,-0.043891427,-1 658 | 0.17008104,0.18233515,-1 659 | 0.352413327,0.014439808,-1 660 | 0.729827688,0.593487551,1 661 | 0.378109776,0.289359719,-1 662 | 0.312490135,0.069306008,-1 663 | 0.231522643,0.047844674,-1 664 | 0.399658151,-0.085374281,-1 665 | 0.469529396,0.551583233,1 666 | 0.183216612,0.124901309,-1 667 | 0.500774519,0.103434288,-1 668 | 0.407243067,0.112239607,-1 669 | 0.741062199,0.38653063,1 670 | 0.299881603,0.205125899,-1 671 | 0.548105379,0.463687354,1 672 | 0.349747824,0.076735242,-1 673 | 0.528560887,0.23368114,-1 674 | 0.697685065,0.421634161,1 675 | 0.683603527,0.529769636,1 676 | 0.224155126,0.130060041,-1 677 | 0.842064145,0.389687569,1 678 | 0.349116725,0.093136445,-1 679 | 0.7174258,0.569001564,1 680 | 0.303835389,-0.080860031,-1 681 | 0.385282842,0.176629671,-1 682 | 0.728233195,0.437566562,1 683 | 0.275560823,0.067759535,-1 684 | 0.752526631,0.437676928,1 685 | 0.775945515,0.647335356,1 686 | 0.289443822,0.129655964,-1 687 | 0.457031044,0.110360319,-1 688 | 0.670168642,0.550344589,1 689 | 0.704943163,0.523602746,1 690 | 0.317110572,0.244019106,-1 691 | 0.340153311,0.161452198,-1 692 | 0.677736499,0.52966745,1 693 | 0.263745005,-0.024475376,-1 694 | 0.31649886,-0.060687455,-1 695 | 0.831297688,0.429401654,1 696 | 0.4567053,0.06242385,-1 697 | 0.359645481,0.04486786,-1 698 | 0.685459002,0.484052444,1 699 | 0.318081689,0.005097992,-1 700 | 0.858439428,0.463609515,1 701 | 0.730090558,0.505085751,1 702 | 0.657915724,0.626157951,1 703 | 0.463987854,0.114426246,-1 704 | 0.553660197,0.084271033,-1 705 | 0.460782988,0.297823064,-1 706 | 0.264636372,-0.073322175,-1 707 | 0.318521878,0.156081826,-1 708 | 0.176521557,0.20987995,-1 709 | 0.616728757,0.598782674,1 710 | 0.348737364,0.196038947,-1 711 | 0.584272236,0.558395291,1 712 | 0.49104824,-0.034174891,-1 713 | 0.3632213,0.003114169,-1 714 | 0.29442849,0.074038117,-1 715 | 0.314484068,0.174130968,-1 716 | 0.711674831,0.72222553,1 717 | 0.429497326,-0.003385711,-1 718 | 0.693051453,0.552981854,1 719 | 0.694557977,0.34433532,1 720 | 0.698380455,0.502353059,1 721 | 0.546240528,0.484799738,1 722 | 0.844569998,0.511630529,1 723 | 0.82963165,0.449013521,1 724 | 0.611370787,0.475376481,1 725 | 0.48794442,0.352474619,1 726 | 0.678121429,0.717614502,1 727 | 0.65623898,0.506295704,1 728 | 0.808704356,0.544289437,1 729 | 0.291000786,0.18756243,-1 730 | 0.286008831,0.183256271,-1 731 | 0.778314687,0.551749874,1 732 | 0.348163415,0.052616457,-1 733 | 0.698985646,0.450526988,1 734 | 0.65241927,0.551775767,1 735 | 0.714540613,0.499080189,1 736 | 0.288269544,0.176780433,-1 737 | 0.701376296,0.634380795,1 738 | 0.169854261,0.13018346,-1 739 | 0.665964081,0.497872022,1 740 | 0.659681611,0.440149383,1 741 | 0.295506048,0.193564522,-1 742 | 0.358188324,0.188038263,-1 743 | 0.251838993,0.141931476,-1 744 | 0.25508882,0.136113796,-1 745 | 0.788789907,0.472736976,1 746 | 0.254720083,0.27884195,-1 747 | 0.40009649,0.169806941,-1 748 | 0.389325389,0.042820796,-1 749 | 0.303596644,-0.021135694,-1 750 | 0.598075982,0.716344407,1 751 | 0.846531857,0.630666796,1 752 | 0.63698758,0.523821578,1 753 | 0.704328174,0.464595077,1 754 | 0.333602865,0.196001785,-1 755 | 0.718377688,0.446878867,1 756 | 0.292129462,0.208819776,-1 757 | 0.181418812,0.305065208,-1 758 | 0.297265443,0.049079955,-1 759 | 0.575074707,0.546141853,1 760 | 0.360464793,0.205406106,-1 761 | 0.81907476,0.412413217,1 762 | 0.278193245,0.322133842,-1 763 | 0.234574413,0.226352646,-1 764 | 0.755055765,0.736836426,1 765 | 0.733022751,0.592673411,1 766 | 0.853484904,0.65792942,1 767 | 0.806216184,0.500627924,1 768 | 0.621731433,0.486957145,1 769 | 0.258087814,-0.063557824,-1 770 | 0.814553235,0.437462099,1 771 | 0.231235131,-0.002687331,-1 772 | 0.338905885,0.252978188,-1 773 | 0.277807733,-0.039978546,-1 774 | 0.516568826,0.151487917,-1 775 | 0.642047975,0.43053591,1 776 | 0.783554459,0.437011098,1 777 | 0.404887232,-0.209793611,-1 778 | 0.831418301,0.665979212,1 779 | 0.713385192,0.562375117,1 780 | 0.110918433,0.179360867,-1 781 | 0.817393901,0.570687722,1 782 | 0.362123656,0.133749839,-1 783 | 0.678044743,0.552285481,1 784 | 0.639184966,0.389256202,1 785 | 0.301418047,0.025173911,-1 786 | 0.296389032,0.148132631,-1 787 | 0.641962356,0.492083971,1 788 | 0.350710788,0.272359214,-1 789 | 0.607008203,0.342777977,1 790 | 0.74532921,0.581449828,1 791 | 0.37876657,-0.028604268,-1 792 | 0.319729888,0.096884011,-1 793 | 0.691802673,0.640285256,1 794 | 0.242278151,-0.027544236,-1 795 | 0.332368857,0.107204489,-1 796 | 0.246628887,-0.059848372,-1 797 | 0.68992729,0.643969078,1 798 | 0.167477838,0.22155252,-1 799 | 0.361225831,0.126766742,-1 800 | 0.599910596,0.597604157,1 801 | 0.705296773,0.562224723,1 802 | 0.610859051,0.561555936,1 803 | 0.779042693,0.469742259,1 804 | 0.721953383,0.330504205,1 805 | 0.19917767,-0.054170268,-1 806 | 0.632324878,0.298879555,1 807 | 0.710946606,0.65070983,1 808 | 0.646660609,0.554404572,1 809 | 0.185876611,0.093431835,-1 810 | 0.273094771,0.101234104,-1 811 | 0.670510064,0.524744047,1 812 | 0.330588998,1.98E-05,-1 813 | 0.220551653,0.006774195,-1 814 | 0.509820743,0.04741684,-1 815 | 0.3492158,0.097556417,-1 816 | 0.255324166,0.01421353,-1 817 | 0.207544185,0.225988923,-1 818 | 0.68534092,0.49431947,1 819 | 0.416679571,0.245677237,-1 820 | 0.812975542,0.415628016,1 821 | 0.320471039,0.150145735,-1 822 | 0.829461548,0.493776377,1 823 | 0.680994961,0.4340003,1 824 | 0.259987042,0.114005486,-1 825 | 0.168848686,-0.009547048,-1 826 | 0.635145829,0.513604475,1 827 | 0.42190326,0.180794066,-1 828 | 0.625057332,0.641587132,1 829 | 0.675848274,0.632010072,1 830 | 0.533133257,0.578125659,1 831 | 0.197305182,0.15122651,-1 832 | 0.74653429,0.623643405,1 833 | 0.253651159,0.168892053,-1 834 | 0.765788075,0.454842753,1 835 | 0.666398683,0.60899563,1 836 | 0.635291232,0.376605847,1 837 | 0.578223848,0.57703266,1 838 | 0.265513337,0.035474712,-1 839 | 0.720383365,0.31435452,1 840 | 0.68728923,0.479171747,1 841 | 0.327435188,-0.045703833,-1 842 | 0.512954313,0.605408006,1 843 | 0.57437274,0.464359353,1 844 | 0.519101639,0.567569038,1 845 | 0.623855872,0.483145049,1 846 | 0.599179754,0.521952878,1 847 | 0.423768817,0.088242189,-1 848 | 0.746294608,0.414510923,1 849 | 0.675670405,0.422696071,1 850 | 0.788703159,0.67386104,1 851 | 0.378106708,0.07608791,-1 852 | 0.114270526,0.201381513,-1 853 | 0.747673612,0.573924654,1 854 | 0.566333032,0.743419589,1 855 | 0.239739624,-0.027528303,-1 856 | 0.336807563,0.1183721,-1 857 | 0.399498168,-0.03639116,-1 858 | 0.226185608,-0.095769293,-1 859 | 0.709608754,0.48788692,1 860 | 0.659727666,0.721933813,1 861 | 0.280539014,0.206328173,-1 862 | 0.622483853,0.403868231,1 863 | 0.638215911,0.391402204,1 864 | 0.182465613,0.077579336,-1 865 | 0.165484697,0.187504949,-1 866 | 0.642055731,0.496933987,1 867 | 0.304621778,0.25354875,-1 868 | 0.360320221,0.28382389,-1 869 | 0.64199657,0.507677787,1 870 | 0.780896015,0.530870139,1 871 | 0.705949158,0.594286582,1 872 | 0.684006329,0.418479179,1 873 | 0.710585414,0.571614895,1 874 | 0.30106765,-0.166699009,-1 875 | 0.30520299,0.364626716,-1 876 | 0.164086121,0.131222498,-1 877 | 0.529876888,0.041069331,-1 878 | 0.303736938,0.136527111,-1 879 | 0.285057443,0.137579846,-1 880 | 0.728257087,0.489676167,1 881 | 0.604446479,0.54572991,1 882 | 0.293159603,0.049017874,-1 883 | 0.868714368,0.531447484,1 884 | 0.673797939,0.499687817,1 885 | 0.680067364,0.537958834,1 886 | 0.769445918,0.612545394,1 887 | 0.229587118,0.093205366,-1 888 | 0.756073027,0.519522906,1 889 | 0.172997458,0.011622643,-1 890 | 0.628765292,0.440481162,1 891 | 0.435077817,0.144463845,-1 892 | 0.548409329,0.453305211,1 893 | 0.839867804,0.506971986,1 894 | 0.3307395,0.249754687,-1 895 | 0.749497205,0.410347666,1 896 | 0.092908559,0.215360941,-1 897 | 0.735947051,0.599612238,1 898 | 0.600964709,0.611895798,1 899 | 0.339469243,0.267604029,-1 900 | 0.694002551,0.402460396,1 901 | 0.552501059,0.627440184,1 902 | 0.403538742,0.336157267,-1 903 | 0.462315574,-0.005739013,-1 904 | 0.349231557,0.086163355,-1 905 | 0.391931485,0.175906989,-1 906 | 0.676930575,0.346510128,1 907 | 0.679645828,0.577121149,1 908 | 0.864397242,0.506012222,1 909 | 0.2863496,0.028423478,-1 910 | 0.301056208,0.097104289,-1 911 | 0.700807684,0.496908664,1 912 | 0.703500736,0.415943311,1 913 | 0.635860407,0.662055847,1 914 | 0.596187712,0.520124065,1 915 | 0.150957975,0.046433517,-1 916 | 0.520139167,0.596836499,1 917 | 0.397568771,0.030645485,-1 918 | 0.331845949,0.112529822,-1 919 | 0.746466296,0.576399482,1 920 | 0.271873677,0.333763709,-1 921 | 0.47075741,0.078661208,-1 922 | 0.536172439,0.077745926,-1 923 | 0.303458039,0.205154466,-1 924 | 0.176054167,0.32209136,-1 925 | 0.766857719,0.506915195,1 926 | 0.242532011,0.129756669,-1 927 | 0.250988841,0.093137528,-1 928 | 0.699394327,0.452299419,1 929 | 0.321874034,0.015107458,-1 930 | 0.678111194,0.392634175,1 931 | 0.248833485,0.043204246,-1 932 | 0.694286452,0.602081068,1 933 | 0.753212642,0.485998157,1 934 | 0.721406654,0.430254654,1 935 | 0.518593077,0.456272116,1 936 | 0.192697788,0.116152945,-1 937 | 0.217411883,-0.064564571,-1 938 | 0.149417245,-0.050964453,-1 939 | 0.333200272,0.012682971,-1 940 | 0.33007176,-0.163593018,-1 941 | 0.534877953,0.602286414,1 942 | 0.427137124,-0.002129973,-1 943 | 0.465209008,0.190092842,-1 944 | 0.387820848,0.147036212,-1 945 | 0.677075664,0.393688203,1 946 | 0.340122928,0.19910285,-1 947 | 0.375936598,0.057685752,-1 948 | 0.196804617,0.126825099,-1 949 | 0.345613244,0.111968102,-1 950 | 0.415306271,0.027476534,-1 951 | 0.759206127,0.361066866,1 952 | 0.627329454,0.704703217,1 953 | 0.750035121,0.671914272,1 954 | 0.658400552,0.765364049,1 955 | 0.809852289,0.369827122,1 956 | 0.742155427,0.47519715,1 957 | 0.472977083,0.04145377,-1 958 | 0.456431423,0.026949805,-1 959 | 0.206938238,0.194749956,-1 960 | 0.75706776,0.559505907,1 961 | 0.734348565,0.582643128,1 962 | 0.121993378,0.163177154,-1 963 | 0.35835498,0.14547492,-1 964 | 0.670281008,0.458492128,1 965 | 0.753318178,0.478502396,1 966 | 0.479495385,0.165887541,-1 967 | 0.356497399,0.10719439,-1 968 | 0.22440351,0.029198744,-1 969 | 0.609590263,0.553526933,1 970 | 0.242967024,0.05883623,-1 971 | 0.420545659,0.125156289,-1 972 | 0.228213759,0.143136894,-1 973 | 0.191837686,0.132193945,-1 974 | 0.661831289,0.652660708,1 975 | 0.298577372,0.055264841,-1 976 | 0.730213677,0.582079484,1 977 | 0.20456842,0.03506012,-1 978 | 0.716255357,0.363472187,1 979 | 0.386798314,-0.02766484,-1 980 | 0.342563218,-0.1587015,-1 981 | 0.869206934,0.517271383,1 982 | 0.773020414,0.549650594,1 983 | 0.66730367,0.437695155,1 984 | 0.635920643,0.535376832,1 985 | 0.319719761,0.146917928,-1 986 | 0.818872518,0.47752039,1 987 | 0.583970377,0.566355242,1 988 | 0.373284641,0.101685122,-1 989 | 0.294380886,0.068542853,-1 990 | 0.347644216,0.221266168,-1 991 | 0.685455543,0.500169334,1 992 | 0.612060851,0.413868137,1 993 | 0.266821443,0.099295397,-1 994 | 0.395630463,0.149027012,-1 995 | 0.369444556,0.278277875,-1 996 | 0.719392196,0.46572054,1 997 | 0.680332621,0.534328582,1 998 | 0.179529285,-0.110245948,-1 999 | 0.573306543,0.608713744,1 1000 | 0.50038409,0.579511796,1 1001 | 0.790973981,0.563663507,1 1002 | -------------------------------------------------------------------------------- /Perceptron/perceptron.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import matplotlib.pyplot as plt 3 | 4 | def data_Generator(N): 5 | X = np.random.uniform(0, 40, N) 6 | Y = (X * 2) + np.random.normal(0, 2, N) 7 | 8 | X = X.reshape(-1, 1) 9 | Y = Y.reshape(-1, 1) 10 | 11 | return X, Y 12 | 13 | def relu(x): 14 | if x < 0: 15 | return 0 16 | else: 17 | return x 18 | 19 | def sigmond(x): 20 | return 1 / 1 + np.exp(x) 21 | 22 | N = 200 23 | lr = 0.0001 24 | 25 | X_train, Y_train = data_Generator(N) 26 | 27 | w = np.random.rand(1, 1) 28 | b = np.random.rand(1, 1) 29 | 30 | print(w) 31 | 32 | fig, ax = plt.subplots() 33 | 34 | for i in range(N): 35 | #train 36 | y_pred = relu(np.matmul(X_train[i], w)) + b 37 | e = Y_train[i] - y_pred 38 | w = w + e * lr * X_train[i] 39 | b = b + e * lr 40 | print(w) 41 | 42 | #plot 43 | Y_pred = np.matmul(X_train, w) 44 | ax.clear() 45 | plt.scatter(X_train, Y_train, c='red') 46 | ax.plot(X_train, Y_pred, c='blue', lw= 2) 47 | plt.pause(0.01) -------------------------------------------------------------------------------- /Perceptron/perseptron_linear_data.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import matplotlib.pyplot as plt 4 | 5 | 6 | data = pd.read_csv('csv_files/linear_data_train.csv') 7 | test_data = pd.read_csv('csv_files/linear_data_test.csv') 8 | 9 | data = np.array(data) 10 | test_data = np.array(test_data) 11 | 12 | X_train = np.array([data[:, 0], data[:, 1]]) 13 | Y_train = np.array(data[:, 2]) 14 | X_train = X_train.reshape(-1, 2) 15 | 16 | X_test = np.array([data[:, 0], data[:, 1]]) 17 | Y_test = np.array(data[:, 2]) 18 | X_test = X_test.reshape(-1, 2) 19 | 20 | print(X_train) 21 | print(Y_train) 22 | 23 | N = 1000 24 | lr = 0.01 25 | epochs = 4 26 | 27 | w = np.random.rand(2, 1) 28 | 29 | X_plan, Y_plan = np.meshgrid(np.arange(X_train[:,0].min(), X_train[:,0].max(), 1), 30 | np.arange(X_train[:,1].min(), X_train[:,1].max(), 1)) 31 | 32 | fig = plt.figure(figsize=(10, 10)) 33 | ax = fig.add_subplot(111, projection='3d') 34 | 35 | for j in range(N): 36 | #train 37 | y_pred = np.matmul(X_train[j], w) 38 | e = Y_train[j] - y_pred 39 | w = w + e * lr * X_train[j] 40 | w = w.T 41 | print('w: ', w) 42 | 43 | #plot 44 | ax.clear() 45 | Z = Y_plan * w[0] + X_plan * w[1] 46 | mycmap = plt.get_cmap('gist_earth') 47 | ax.plot_surface(X_plan, Y_plan, Z, cmap = mycmap, alpha = 0.5) 48 | ax.scatter(X_train[:,0], X_train[:,1], Y_train, c= 'green') 49 | 50 | ax.set_xlabel('x') 51 | ax.set_ylabel('x') 52 | ax.set_zlabel('y') 53 | plt.pause(0.01) 54 | 55 | plt.show() 56 | 57 | 58 | class Perceptron: 59 | def __init__(self): 60 | self.W = w 61 | 62 | 63 | def predict(self, X_test): 64 | Y_predic = np.matmul(X_test, self.W) 65 | return Y_predic 66 | 67 | 68 | def evaluation(self, X_test, Y_test): 69 | Y_predic = np.matmul(X_test, self.W) 70 | 71 | 72 | Y_predic[Y_predic > 0] = 1 73 | Y_predic[Y_predic<0] = -1 74 | evaluation = np.count_nonzero(Y_predic != Y_test) 75 | 76 | for i in range(len(X_test)): 77 | print('X_test[i] : ', X_test[i]) 78 | print('w: ', w) 79 | 80 | Y_predic = np.matmul(X_test, self.w) 81 | subtract = np.abs(Y_test - Y_predic) 82 | average = np.mean(subtract) 83 | 84 | mae=np.mean(subtract) 85 | mse=np.mean((subtract)**2) 86 | 87 | 88 | return average, mae, mse 89 | model = Perceptron() 90 | model.evaluation() -------------------------------------------------------------------------------- /Perceptron/readme.md: -------------------------------------------------------------------------------- 1 | Screen Shot 1400-05-29 at 23 11 07 2 | 3 | # loss 4 | Screen Shot 1400-06-01 at 14 27 50 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MachineLearning-Exercises --------------------------------------------------------------------------------