├── README.md
├── 1 variable linear regression.py
├── KNN - K Nearest Neighbors .ipynb
├── Logistic Regression Multi Variable .ipynb
├── multi variable linear regression.ipynb
├── diabetes.csv
└── K means Clustering.ipynb
/README.md:
--------------------------------------------------------------------------------
1 | # Machine-Learning
2 | Pure python implementation of most used machine learning Algorithms.
3 |
4 |
1. Linear Regression:
5 |
6 | * Linear Regression with 1 Variable.
7 | * Linear Regression with multple Variables.
8 |
9 | 2. Logistic Regression:
10 | * Logistic Regression With Multiple Features
11 |
12 | 3. KNN (K-Nearest Neighbors)
13 | * KNN implementation
14 |
15 | 4. K Means Clustering
16 |
17 |
18 | * K Means Clustering
19 |
20 | 5. Decision Tree (For continuous Features)
21 |
22 | * Decision Tree
23 |
24 |
25 |
26 |
27 | Upcoming
28 |
29 | * Neural Networks
30 |
31 |
--------------------------------------------------------------------------------
/1 variable linear regression.py:
--------------------------------------------------------------------------------
1 |
2 | import numpy as np
3 |
4 | # We are inputting sample data in x and the value in ys
5 | x = np.array([140.00,155.00,159.00,179.00], dtype=np.float64)
6 |
7 | y = np.array([60.00,62.00,67.00,70.00],dtype=np.float64 )
8 | w = 0
9 | b = 0
10 | alpha = 1.0e-2
11 | m = len(x)
12 | iterations=50
13 |
14 | gd = []
15 |
16 |
17 | # impletmenting our Linear Regression
18 |
19 | def model(x,w,b):
20 | return w*x+b
21 |
22 |
23 | # cost function
24 |
25 | def cost_func(w,b):
26 | cost = 0
27 | for idx in range(m):
28 | cost += (model(x[idx],w,b)-y[idx])**2.00
29 |
30 | cost = cost/(2*m)
31 | return cost
32 |
33 |
34 | # you can further optimize it by combining both function and using one single loop
35 |
36 | def update_w(w,b):
37 | value = 0
38 |
39 | for idx in range(m):
40 | value += (model(x[idx],w,b) -y[idx] )* x[idx]
41 |
42 | return value
43 |
44 | def update_b(w,b):
45 | value = 0
46 | for idx in range(m):
47 | value += model(x[idx],w,b) -y[idx]
48 | return value
49 |
50 |
51 |
52 | def gradient_descent():
53 |
54 | global w
55 | global b
56 |
57 | for i in range(iterations):
58 |
59 | tempw = w
60 | w = tempw - alpha*((update_w(tempw,b))/m)
61 |
62 | tempb = b
63 | b = tempb - alpha *((update_b(tempw,tempb))/m)
64 |
65 | cost = cost_func(w,b)
66 | gd.append(cost)
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | gradient_descent()
77 |
78 | print(gd[0:10], gd[9990:99999])
79 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/KNN - K Nearest Neighbors .ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import numpy as np\n",
10 | "from sklearn.datasets import load_iris\n",
11 | "from sklearn.model_selection import train_test_split\n",
12 | "from operator import itemgetter\n"
13 | ]
14 | },
15 | {
16 | "cell_type": "code",
17 | "execution_count": 2,
18 | "metadata": {},
19 | "outputs": [],
20 | "source": [
21 | "\n",
22 | "# Give your input for x and y values\n",
23 | "\n",
24 | "x, y = load_iris(return_X_y = True)\n",
25 | "\n",
26 | "m = len(y)\n",
27 | "n = len(x[0])\n",
28 | "\n",
29 | "x_train, x_test, y_train, y_test = train_test_split( x, y, test_size=0.20, random_state=4)\n",
30 | "categories=np.unique(y_train)\n",
31 | "\n",
32 | "\n"
33 | ]
34 | },
35 | {
36 | "cell_type": "code",
37 | "execution_count": 3,
38 | "metadata": {},
39 | "outputs": [],
40 | "source": [
41 | "def KNN(x_train, y_train, x_single,k_val):\n",
42 | " k = k_val\n",
43 | " distance = (x_single-x_train)**2\n",
44 | " distance = distance.sum(axis=1)\n",
45 | " distance=np.sqrt(distance)\n",
46 | " shorted_distance = np.argsort(distance, axis=0)\n",
47 | " nearest_values = np.zeros(k)\n",
48 | "\n",
49 | " for i in range(k):\n",
50 | " nearest_values[i] = y_train[shorted_distance[i]]\n",
51 | "\n",
52 | " found_categories, categories_counts = np.unique(nearest_values, return_counts=True)\n",
53 | " max_category_index = np.argmax(categories_counts)\n",
54 | "\n",
55 | " max_category = found_categories[max_category_index]\n",
56 | " \n",
57 | " return max_category"
58 | ]
59 | },
60 | {
61 | "cell_type": "code",
62 | "execution_count": 4,
63 | "metadata": {},
64 | "outputs": [],
65 | "source": [
66 | "def performance_test(x_train,y_train, x_test,y_test):\n",
67 | "\n",
68 | " valid = 0\n",
69 | " for idx, i in enumerate(x_test):\n",
70 | " \n",
71 | " y_pred = KNN(x_train, y_train,i, k_val=10) \n",
72 | " y_truth = y_test[idx]\n",
73 | "\n",
74 | " if(y_pred==y_truth):\n",
75 | " valid +=1\n",
76 | " \n",
77 | " accuracy = (valid/len(x_test))*100\n",
78 | " return accuracy\n"
79 | ]
80 | },
81 | {
82 | "cell_type": "code",
83 | "execution_count": 6,
84 | "metadata": {},
85 | "outputs": [
86 | {
87 | "name": "stdout",
88 | "output_type": "stream",
89 | "text": [
90 | "Our Models Accuracy : 96.66666666666667\n"
91 | ]
92 | }
93 | ],
94 | "source": [
95 | "print(\"Our Models Accuracy : \"+str(performance_test(x_train,y_train, x_test,y_test)))"
96 | ]
97 | }
98 | ],
99 | "metadata": {
100 | "kernelspec": {
101 | "display_name": "Python 3",
102 | "language": "python",
103 | "name": "python3"
104 | },
105 | "language_info": {
106 | "codemirror_mode": {
107 | "name": "ipython",
108 | "version": 3
109 | },
110 | "file_extension": ".py",
111 | "mimetype": "text/x-python",
112 | "name": "python",
113 | "nbconvert_exporter": "python",
114 | "pygments_lexer": "ipython3",
115 | "version": "3.11.3"
116 | },
117 | "orig_nbformat": 4
118 | },
119 | "nbformat": 4,
120 | "nbformat_minor": 2
121 | }
122 |
--------------------------------------------------------------------------------
/Logistic Regression Multi Variable .ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 8,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import numpy as np\n",
10 | "import math"
11 | ]
12 | },
13 | {
14 | "cell_type": "code",
15 | "execution_count": 98,
16 | "metadata": {},
17 | "outputs": [],
18 | "source": [
19 | "\n",
20 | "# Give your input for x and y values\n",
21 | "\n",
22 | "\n",
23 | "from sklearn import datasets\n",
24 | "from sklearn import linear_model\n",
25 | "from sklearn.datasets import load_iris\n",
26 | "x, y = load_iris(return_X_y = True)\n",
27 | "\n",
28 | "m = len(y)\n",
29 | "n = len(x[0])\n",
30 | "\n",
31 | "# initializing weights and bias as 0\n",
32 | "\n",
33 | "w = np.zeros(x.shape[1])\n",
34 | "b = 0\n",
35 | "\n",
36 | "# Total numbers of iterations to perform\n",
37 | "\n",
38 | "iteration = 100\n",
39 | "\n",
40 | "# Learning rate alpha\n",
41 | "\n",
42 | "alpha = 0.001"
43 | ]
44 | },
45 | {
46 | "cell_type": "code",
47 | "execution_count": 4,
48 | "metadata": {},
49 | "outputs": [
50 | {
51 | "name": "stdout",
52 | "output_type": "stream",
53 | "text": [
54 | "[4.9 3. 1.4 0.2] 0 150 4\n"
55 | ]
56 | }
57 | ],
58 | "source": [
59 | "print(x[1], y[1], m,n)"
60 | ]
61 | },
62 | {
63 | "cell_type": "code",
64 | "execution_count": 33,
65 | "metadata": {},
66 | "outputs": [],
67 | "source": [
68 | "# Defining Our Logistic Regression Model\n",
69 | "\n",
70 | "def model(x,w,b):\n",
71 | " LinReg = np.dot(x,np.transpose(w))+b\n",
72 | " return 1/(1+np.exp(-LinReg))"
73 | ]
74 | },
75 | {
76 | "cell_type": "code",
77 | "execution_count": 11,
78 | "metadata": {},
79 | "outputs": [],
80 | "source": [
81 | "# Defining Our Cost Function \n",
82 | "\n",
83 | "def cost_function():\n",
84 | " value = 0\n",
85 | " for i in range(m):\n",
86 | " value += -y[i] * np.log(model(x[i], w,b)) - (1-y[i]) * np.log(1-(model(x[i],w,b)))\n",
87 | " \n",
88 | " return value/(2*m)"
89 | ]
90 | },
91 | {
92 | "cell_type": "code",
93 | "execution_count": 12,
94 | "metadata": {},
95 | "outputs": [],
96 | "source": [
97 | "def update_b(w,b):\n",
98 | " value = 0 \n",
99 | " for i in range(m):\n",
100 | " value += (model(x[i],w,b) - y[i])\n",
101 | "\n",
102 | " return value"
103 | ]
104 | },
105 | {
106 | "cell_type": "code",
107 | "execution_count": 99,
108 | "metadata": {},
109 | "outputs": [],
110 | "source": [
111 | "# Gradient Descent is same as MultiVariable Linear Regression. \n",
112 | "\n",
113 | "def gradient_decent():\n",
114 | " global b\n",
115 | " global w\n",
116 | "\n",
117 | " for i in range(iteration):\n",
118 | " tempw = w\n",
119 | " \n",
120 | " \n",
121 | " for j in range(n):\n",
122 | "\n",
123 | " derivative_val_w = 0 \n",
124 | "\n",
125 | " for k in range(m):\n",
126 | " \n",
127 | " \n",
128 | " \n",
129 | " derivative_val_w += (model(x[k],w,b) - y[k])*x[k][j]\n",
130 | "\n",
131 | " w[j] = w[j] - alpha*(derivative_val_w/m)\n",
132 | " \n",
133 | " \n",
134 | " tempb = b \n",
135 | " b = tempb - alpha *((update_b(tempw,tempb))/m)\n",
136 | " if i% math.ceil(iteration / 10) == 0:\n",
137 | " \n",
138 | " print(f\" iterations: \" +str(i) + f\" cost : {cost_function():8.2f}\")"
139 | ]
140 | },
141 | {
142 | "cell_type": "code",
143 | "execution_count": 100,
144 | "metadata": {},
145 | "outputs": [
146 | {
147 | "name": "stdout",
148 | "output_type": "stream",
149 | "text": [
150 | " iterations: 0 cost : 0.67\n",
151 | " iterations: 10 cost : 0.45\n",
152 | " iterations: 20 cost : 0.28\n",
153 | " iterations: 30 cost : 0.16\n",
154 | " iterations: 40 cost : 0.05\n",
155 | " iterations: 50 cost : -0.03\n",
156 | " iterations: 60 cost : -0.10\n",
157 | " iterations: 70 cost : -0.17\n",
158 | " iterations: 80 cost : -0.23\n",
159 | " iterations: 90 cost : -0.28\n",
160 | "[0.18919137 0.05816237 0.21744632 0.084229 ]\n"
161 | ]
162 | }
163 | ],
164 | "source": [
165 | "\n",
166 | "gradient_decent()\n",
167 | "print(w)\n"
168 | ]
169 | }
170 | ],
171 | "metadata": {
172 | "kernelspec": {
173 | "display_name": "Python 3",
174 | "language": "python",
175 | "name": "python3"
176 | },
177 | "language_info": {
178 | "codemirror_mode": {
179 | "name": "ipython",
180 | "version": 3
181 | },
182 | "file_extension": ".py",
183 | "mimetype": "text/x-python",
184 | "name": "python",
185 | "nbconvert_exporter": "python",
186 | "pygments_lexer": "ipython3",
187 | "version": "3.11.3"
188 | },
189 | "orig_nbformat": 4
190 | },
191 | "nbformat": 4,
192 | "nbformat_minor": 2
193 | }
194 |
--------------------------------------------------------------------------------
/multi variable linear regression.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 476,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import numpy as np\n",
10 | "import math"
11 | ]
12 | },
13 | {
14 | "cell_type": "code",
15 | "execution_count": 506,
16 | "metadata": {},
17 | "outputs": [
18 | {
19 | "name": "stdout",
20 | "output_type": "stream",
21 | "text": [
22 | "[2104 5 1 45]\n"
23 | ]
24 | }
25 | ],
26 | "source": [
27 | "\n",
28 | "# Give your input for x and y values\n",
29 | "# For better testing I have taken the inputs(x and y values), total number of iterations, alpha value from coursera machine learning course. \n",
30 | "\n",
31 | "\n",
32 | "\n",
33 | "x = np.array([[2104, 5, 1, 45], [1416, 3, 2, 40], [852, 2, 1, 35]])\n",
34 | "y = np.array([460, 232, 178])\n",
35 | "\n",
36 | "m = len(y)\n",
37 | "n = len(x[0])\n",
38 | "\n",
39 | "# initializing weights and bias as 0\n",
40 | "\n",
41 | "w = np.zeros(x.shape[1])\n",
42 | "b = 0\n",
43 | "\n",
44 | "# Total numbers of iterations to perform\n",
45 | "\n",
46 | "iteration = 1000\n",
47 | "\n",
48 | "# Learning rate alpha\n",
49 | "\n",
50 | "alpha = 5.0e-7"
51 | ]
52 | },
53 | {
54 | "cell_type": "code",
55 | "execution_count": 449,
56 | "metadata": {},
57 | "outputs": [],
58 | "source": [
59 | "# Our linear Regression Model\n",
60 | "\n",
61 | "def model(x,w,b):\n",
62 | " return np.dot(x,np.transpose(w))+b"
63 | ]
64 | },
65 | {
66 | "cell_type": "code",
67 | "execution_count": 450,
68 | "metadata": {},
69 | "outputs": [],
70 | "source": [
71 | "def cost_function():\n",
72 | " cost=0\n",
73 | " for idx in range(m):\n",
74 | " cost += (model(x[idx],w,b) - y[idx])**2\n",
75 | "\n",
76 | "\n",
77 | " return cost/(2*m)\n",
78 | " "
79 | ]
80 | },
81 | {
82 | "cell_type": "code",
83 | "execution_count": 451,
84 | "metadata": {},
85 | "outputs": [],
86 | "source": [
87 | "def update_b(w,b):\n",
88 | " value = 0 \n",
89 | " for i in range(m):\n",
90 | " value += (model(x[i],w,b) - y[i])\n",
91 | "\n",
92 | " return value"
93 | ]
94 | },
95 | {
96 | "cell_type": "code",
97 | "execution_count": 507,
98 | "metadata": {},
99 | "outputs": [],
100 | "source": [
101 | "def gradient_decent():\n",
102 | " global b\n",
103 | " global w\n",
104 | "\n",
105 | " for i in range(iteration):\n",
106 | " tempw = w\n",
107 | " \n",
108 | " \n",
109 | " for j in range(n):\n",
110 | "\n",
111 | " derivative_val_w = 0 \n",
112 | "\n",
113 | " for k in range(m):\n",
114 | " \n",
115 | " \n",
116 | " \n",
117 | " derivative_val_w += (model(x[k],tempw,b) - y[k])*x[k][j]\n",
118 | "\n",
119 | " w[j] = w[j] - alpha*(derivative_val_w/m)\n",
120 | " \n",
121 | " \n",
122 | " tempb = b \n",
123 | " b = tempb - alpha *((update_b(tempw,tempb))/m)\n",
124 | " if i% math.ceil(iteration / 10) == 0:\n",
125 | " \n",
126 | " print(f\" iterations: \" +str(i) + f\" cost : {cost_function():0.2f}\")\n",
127 | " \n",
128 | " "
129 | ]
130 | },
131 | {
132 | "cell_type": "code",
133 | "execution_count": 508,
134 | "metadata": {},
135 | "outputs": [
136 | {
137 | "name": "stdout",
138 | "output_type": "stream",
139 | "text": [
140 | " iterations: 0 cost : 2511.04\n",
141 | " iterations: 100 cost : 695.11\n",
142 | " iterations: 200 cost : 694.05\n",
143 | " iterations: 300 cost : 693.00\n",
144 | " iterations: 400 cost : 691.95\n",
145 | " iterations: 500 cost : 690.92\n",
146 | " iterations: 600 cost : 689.89\n",
147 | " iterations: 700 cost : 688.87\n",
148 | " iterations: 800 cost : 687.87\n",
149 | " iterations: 900 cost : 686.87\n"
150 | ]
151 | }
152 | ],
153 | "source": [
154 | "gradient_decent()"
155 | ]
156 | },
157 | {
158 | "cell_type": "code",
159 | "execution_count": null,
160 | "metadata": {
161 | "tags": []
162 | },
163 | "outputs": [],
164 | "source": [
165 | "# Coursera's results \n",
166 | "\n",
167 | "\n",
168 | "Iteration 0: Cost 2529.46 \n",
169 | "Iteration 100: Cost 695.99 \n",
170 | "Iteration 200: Cost 694.92 \n",
171 | "Iteration 300: Cost 693.86 \n",
172 | "Iteration 400: Cost 692.81 \n",
173 | "Iteration 500: Cost 691.77 \n",
174 | "Iteration 600: Cost 690.73 \n",
175 | "Iteration 700: Cost 689.71 \n",
176 | "Iteration 800: Cost 688.70 \n",
177 | "Iteration 900: Cost 687.69\n",
178 | "\n",
179 | "# Our Results \n",
180 | " iterations: 0 cost : 2511.04\n",
181 | " iterations: 100 cost : 695.11\n",
182 | " iterations: 200 cost : 694.05\n",
183 | " iterations: 300 cost : 693.00\n",
184 | " iterations: 400 cost : 691.95\n",
185 | " iterations: 500 cost : 690.92\n",
186 | " iterations: 600 cost : 689.89\n",
187 | " iterations: 700 cost : 688.87\n",
188 | " iterations: 800 cost : 687.87\n",
189 | " iterations: 900 cost : 686.87\n",
190 | "\n"
191 | ]
192 | }
193 | ],
194 | "metadata": {
195 | "kernelspec": {
196 | "display_name": "Python 3",
197 | "language": "python",
198 | "name": "python3"
199 | },
200 | "language_info": {
201 | "codemirror_mode": {
202 | "name": "ipython",
203 | "version": 3
204 | },
205 | "file_extension": ".py",
206 | "mimetype": "text/x-python",
207 | "name": "python",
208 | "nbconvert_exporter": "python",
209 | "pygments_lexer": "ipython3",
210 | "version": "3.11.3"
211 | },
212 | "orig_nbformat": 4
213 | },
214 | "nbformat": 4,
215 | "nbformat_minor": 2
216 | }
217 |
--------------------------------------------------------------------------------
/diabetes.csv:
--------------------------------------------------------------------------------
1 | 6,148,72,35,0,33.6,0.627,50,1
2 | 1,85,66,29,0,26.6,0.351,31,0
3 | 8,183,64,0,0,23.3,0.672,32,1
4 | 1,89,66,23,94,28.1,0.167,21,0
5 | 0,137,40,35,168,43.1,2.288,33,1
6 | 5,116,74,0,0,25.6,0.201,30,0
7 | 3,78,50,32,88,31,0.248,26,1
8 | 10,115,0,0,0,35.3,0.134,29,0
9 | 2,197,70,45,543,30.5,0.158,53,1
10 | 8,125,96,0,0,0,0.232,54,1
11 | 4,110,92,0,0,37.6,0.191,30,0
12 | 10,168,74,0,0,38,0.537,34,1
13 | 10,139,80,0,0,27.1,1.441,57,0
14 | 1,189,60,23,846,30.1,0.398,59,1
15 | 5,166,72,19,175,25.8,0.587,51,1
16 | 7,100,0,0,0,30,0.484,32,1
17 | 0,118,84,47,230,45.8,0.551,31,1
18 | 7,107,74,0,0,29.6,0.254,31,1
19 | 1,103,30,38,83,43.3,0.183,33,0
20 | 1,115,70,30,96,34.6,0.529,32,1
21 | 3,126,88,41,235,39.3,0.704,27,0
22 | 8,99,84,0,0,35.4,0.388,50,0
23 | 7,196,90,0,0,39.8,0.451,41,1
24 | 9,119,80,35,0,29,0.263,29,1
25 | 11,143,94,33,146,36.6,0.254,51,1
26 | 10,125,70,26,115,31.1,0.205,41,1
27 | 7,147,76,0,0,39.4,0.257,43,1
28 | 1,97,66,15,140,23.2,0.487,22,0
29 | 13,145,82,19,110,22.2,0.245,57,0
30 | 5,117,92,0,0,34.1,0.337,38,0
31 | 5,109,75,26,0,36,0.546,60,0
32 | 3,158,76,36,245,31.6,0.851,28,1
33 | 3,88,58,11,54,24.8,0.267,22,0
34 | 6,92,92,0,0,19.9,0.188,28,0
35 | 10,122,78,31,0,27.6,0.512,45,0
36 | 4,103,60,33,192,24,0.966,33,0
37 | 11,138,76,0,0,33.2,0.42,35,0
38 | 9,102,76,37,0,32.9,0.665,46,1
39 | 2,90,68,42,0,38.2,0.503,27,1
40 | 4,111,72,47,207,37.1,1.39,56,1
41 | 3,180,64,25,70,34,0.271,26,0
42 | 7,133,84,0,0,40.2,0.696,37,0
43 | 7,106,92,18,0,22.7,0.235,48,0
44 | 9,171,110,24,240,45.4,0.721,54,1
45 | 7,159,64,0,0,27.4,0.294,40,0
46 | 0,180,66,39,0,42,1.893,25,1
47 | 1,146,56,0,0,29.7,0.564,29,0
48 | 2,71,70,27,0,28,0.586,22,0
49 | 7,103,66,32,0,39.1,0.344,31,1
50 | 7,105,0,0,0,0,0.305,24,0
51 | 1,103,80,11,82,19.4,0.491,22,0
52 | 1,101,50,15,36,24.2,0.526,26,0
53 | 5,88,66,21,23,24.4,0.342,30,0
54 | 8,176,90,34,300,33.7,0.467,58,1
55 | 7,150,66,42,342,34.7,0.718,42,0
56 | 1,73,50,10,0,23,0.248,21,0
57 | 7,187,68,39,304,37.7,0.254,41,1
58 | 0,100,88,60,110,46.8,0.962,31,0
59 | 0,146,82,0,0,40.5,1.781,44,0
60 | 0,105,64,41,142,41.5,0.173,22,0
61 | 2,84,0,0,0,0,0.304,21,0
62 | 8,133,72,0,0,32.9,0.27,39,1
63 | 5,44,62,0,0,25,0.587,36,0
64 | 2,141,58,34,128,25.4,0.699,24,0
65 | 7,114,66,0,0,32.8,0.258,42,1
66 | 5,99,74,27,0,29,0.203,32,0
67 | 0,109,88,30,0,32.5,0.855,38,1
68 | 2,109,92,0,0,42.7,0.845,54,0
69 | 1,95,66,13,38,19.6,0.334,25,0
70 | 4,146,85,27,100,28.9,0.189,27,0
71 | 2,100,66,20,90,32.9,0.867,28,1
72 | 5,139,64,35,140,28.6,0.411,26,0
73 | 13,126,90,0,0,43.4,0.583,42,1
74 | 4,129,86,20,270,35.1,0.231,23,0
75 | 1,79,75,30,0,32,0.396,22,0
76 | 1,0,48,20,0,24.7,0.14,22,0
77 | 7,62,78,0,0,32.6,0.391,41,0
78 | 5,95,72,33,0,37.7,0.37,27,0
79 | 0,131,0,0,0,43.2,0.27,26,1
80 | 2,112,66,22,0,25,0.307,24,0
81 | 3,113,44,13,0,22.4,0.14,22,0
82 | 2,74,0,0,0,0,0.102,22,0
83 | 7,83,78,26,71,29.3,0.767,36,0
84 | 0,101,65,28,0,24.6,0.237,22,0
85 | 5,137,108,0,0,48.8,0.227,37,1
86 | 2,110,74,29,125,32.4,0.698,27,0
87 | 13,106,72,54,0,36.6,0.178,45,0
88 | 2,100,68,25,71,38.5,0.324,26,0
89 | 15,136,70,32,110,37.1,0.153,43,1
90 | 1,107,68,19,0,26.5,0.165,24,0
91 | 1,80,55,0,0,19.1,0.258,21,0
92 | 4,123,80,15,176,32,0.443,34,0
93 | 7,81,78,40,48,46.7,0.261,42,0
94 | 4,134,72,0,0,23.8,0.277,60,1
95 | 2,142,82,18,64,24.7,0.761,21,0
96 | 6,144,72,27,228,33.9,0.255,40,0
97 | 2,92,62,28,0,31.6,0.13,24,0
98 | 1,71,48,18,76,20.4,0.323,22,0
99 | 6,93,50,30,64,28.7,0.356,23,0
100 | 1,122,90,51,220,49.7,0.325,31,1
101 | 1,163,72,0,0,39,1.222,33,1
102 | 1,151,60,0,0,26.1,0.179,22,0
103 | 0,125,96,0,0,22.5,0.262,21,0
104 | 1,81,72,18,40,26.6,0.283,24,0
105 | 2,85,65,0,0,39.6,0.93,27,0
106 | 1,126,56,29,152,28.7,0.801,21,0
107 | 1,96,122,0,0,22.4,0.207,27,0
108 | 4,144,58,28,140,29.5,0.287,37,0
109 | 3,83,58,31,18,34.3,0.336,25,0
110 | 0,95,85,25,36,37.4,0.247,24,1
111 | 3,171,72,33,135,33.3,0.199,24,1
112 | 8,155,62,26,495,34,0.543,46,1
113 | 1,89,76,34,37,31.2,0.192,23,0
114 | 4,76,62,0,0,34,0.391,25,0
115 | 7,160,54,32,175,30.5,0.588,39,1
116 | 4,146,92,0,0,31.2,0.539,61,1
117 | 5,124,74,0,0,34,0.22,38,1
118 | 5,78,48,0,0,33.7,0.654,25,0
119 | 4,97,60,23,0,28.2,0.443,22,0
120 | 4,99,76,15,51,23.2,0.223,21,0
121 | 0,162,76,56,100,53.2,0.759,25,1
122 | 6,111,64,39,0,34.2,0.26,24,0
123 | 2,107,74,30,100,33.6,0.404,23,0
124 | 5,132,80,0,0,26.8,0.186,69,0
125 | 0,113,76,0,0,33.3,0.278,23,1
126 | 1,88,30,42,99,55,0.496,26,1
127 | 3,120,70,30,135,42.9,0.452,30,0
128 | 1,118,58,36,94,33.3,0.261,23,0
129 | 1,117,88,24,145,34.5,0.403,40,1
130 | 0,105,84,0,0,27.9,0.741,62,1
131 | 4,173,70,14,168,29.7,0.361,33,1
132 | 9,122,56,0,0,33.3,1.114,33,1
133 | 3,170,64,37,225,34.5,0.356,30,1
134 | 8,84,74,31,0,38.3,0.457,39,0
135 | 2,96,68,13,49,21.1,0.647,26,0
136 | 2,125,60,20,140,33.8,0.088,31,0
137 | 0,100,70,26,50,30.8,0.597,21,0
138 | 0,93,60,25,92,28.7,0.532,22,0
139 | 0,129,80,0,0,31.2,0.703,29,0
140 | 5,105,72,29,325,36.9,0.159,28,0
141 | 3,128,78,0,0,21.1,0.268,55,0
142 | 5,106,82,30,0,39.5,0.286,38,0
143 | 2,108,52,26,63,32.5,0.318,22,0
144 | 10,108,66,0,0,32.4,0.272,42,1
145 | 4,154,62,31,284,32.8,0.237,23,0
146 | 0,102,75,23,0,0,0.572,21,0
147 | 9,57,80,37,0,32.8,0.096,41,0
148 | 2,106,64,35,119,30.5,1.4,34,0
149 | 5,147,78,0,0,33.7,0.218,65,0
150 | 2,90,70,17,0,27.3,0.085,22,0
151 | 1,136,74,50,204,37.4,0.399,24,0
152 | 4,114,65,0,0,21.9,0.432,37,0
153 | 9,156,86,28,155,34.3,1.189,42,1
154 | 1,153,82,42,485,40.6,0.687,23,0
155 | 8,188,78,0,0,47.9,0.137,43,1
156 | 7,152,88,44,0,50,0.337,36,1
157 | 2,99,52,15,94,24.6,0.637,21,0
158 | 1,109,56,21,135,25.2,0.833,23,0
159 | 2,88,74,19,53,29,0.229,22,0
160 | 17,163,72,41,114,40.9,0.817,47,1
161 | 4,151,90,38,0,29.7,0.294,36,0
162 | 7,102,74,40,105,37.2,0.204,45,0
163 | 0,114,80,34,285,44.2,0.167,27,0
164 | 2,100,64,23,0,29.7,0.368,21,0
165 | 0,131,88,0,0,31.6,0.743,32,1
166 | 6,104,74,18,156,29.9,0.722,41,1
167 | 3,148,66,25,0,32.5,0.256,22,0
168 | 4,120,68,0,0,29.6,0.709,34,0
169 | 4,110,66,0,0,31.9,0.471,29,0
170 | 3,111,90,12,78,28.4,0.495,29,0
171 | 6,102,82,0,0,30.8,0.18,36,1
172 | 6,134,70,23,130,35.4,0.542,29,1
173 | 2,87,0,23,0,28.9,0.773,25,0
174 | 1,79,60,42,48,43.5,0.678,23,0
175 | 2,75,64,24,55,29.7,0.37,33,0
176 | 8,179,72,42,130,32.7,0.719,36,1
177 | 6,85,78,0,0,31.2,0.382,42,0
178 | 0,129,110,46,130,67.1,0.319,26,1
179 | 5,143,78,0,0,45,0.19,47,0
180 | 5,130,82,0,0,39.1,0.956,37,1
181 | 6,87,80,0,0,23.2,0.084,32,0
182 | 0,119,64,18,92,34.9,0.725,23,0
183 | 1,0,74,20,23,27.7,0.299,21,0
184 | 5,73,60,0,0,26.8,0.268,27,0
185 | 4,141,74,0,0,27.6,0.244,40,0
186 | 7,194,68,28,0,35.9,0.745,41,1
187 | 8,181,68,36,495,30.1,0.615,60,1
188 | 1,128,98,41,58,32,1.321,33,1
189 | 8,109,76,39,114,27.9,0.64,31,1
190 | 5,139,80,35,160,31.6,0.361,25,1
191 | 3,111,62,0,0,22.6,0.142,21,0
192 | 9,123,70,44,94,33.1,0.374,40,0
193 | 7,159,66,0,0,30.4,0.383,36,1
194 | 11,135,0,0,0,52.3,0.578,40,1
195 | 8,85,55,20,0,24.4,0.136,42,0
196 | 5,158,84,41,210,39.4,0.395,29,1
197 | 1,105,58,0,0,24.3,0.187,21,0
198 | 3,107,62,13,48,22.9,0.678,23,1
199 | 4,109,64,44,99,34.8,0.905,26,1
200 | 4,148,60,27,318,30.9,0.15,29,1
201 | 0,113,80,16,0,31,0.874,21,0
202 | 1,138,82,0,0,40.1,0.236,28,0
203 | 0,108,68,20,0,27.3,0.787,32,0
204 | 2,99,70,16,44,20.4,0.235,27,0
205 | 6,103,72,32,190,37.7,0.324,55,0
206 | 5,111,72,28,0,23.9,0.407,27,0
207 | 8,196,76,29,280,37.5,0.605,57,1
208 | 5,162,104,0,0,37.7,0.151,52,1
209 | 1,96,64,27,87,33.2,0.289,21,0
210 | 7,184,84,33,0,35.5,0.355,41,1
211 | 2,81,60,22,0,27.7,0.29,25,0
212 | 0,147,85,54,0,42.8,0.375,24,0
213 | 7,179,95,31,0,34.2,0.164,60,0
214 | 0,140,65,26,130,42.6,0.431,24,1
215 | 9,112,82,32,175,34.2,0.26,36,1
216 | 12,151,70,40,271,41.8,0.742,38,1
217 | 5,109,62,41,129,35.8,0.514,25,1
218 | 6,125,68,30,120,30,0.464,32,0
219 | 5,85,74,22,0,29,1.224,32,1
220 | 5,112,66,0,0,37.8,0.261,41,1
221 | 0,177,60,29,478,34.6,1.072,21,1
222 | 2,158,90,0,0,31.6,0.805,66,1
223 | 7,119,0,0,0,25.2,0.209,37,0
224 | 7,142,60,33,190,28.8,0.687,61,0
225 | 1,100,66,15,56,23.6,0.666,26,0
226 | 1,87,78,27,32,34.6,0.101,22,0
227 | 0,101,76,0,0,35.7,0.198,26,0
228 | 3,162,52,38,0,37.2,0.652,24,1
229 | 4,197,70,39,744,36.7,2.329,31,0
230 | 0,117,80,31,53,45.2,0.089,24,0
231 | 4,142,86,0,0,44,0.645,22,1
232 | 6,134,80,37,370,46.2,0.238,46,1
233 | 1,79,80,25,37,25.4,0.583,22,0
234 | 4,122,68,0,0,35,0.394,29,0
235 | 3,74,68,28,45,29.7,0.293,23,0
236 | 4,171,72,0,0,43.6,0.479,26,1
237 | 7,181,84,21,192,35.9,0.586,51,1
238 | 0,179,90,27,0,44.1,0.686,23,1
239 | 9,164,84,21,0,30.8,0.831,32,1
240 | 0,104,76,0,0,18.4,0.582,27,0
241 | 1,91,64,24,0,29.2,0.192,21,0
242 | 4,91,70,32,88,33.1,0.446,22,0
243 | 3,139,54,0,0,25.6,0.402,22,1
244 | 6,119,50,22,176,27.1,1.318,33,1
245 | 2,146,76,35,194,38.2,0.329,29,0
246 | 9,184,85,15,0,30,1.213,49,1
247 | 10,122,68,0,0,31.2,0.258,41,0
248 | 0,165,90,33,680,52.3,0.427,23,0
249 | 9,124,70,33,402,35.4,0.282,34,0
250 | 1,111,86,19,0,30.1,0.143,23,0
251 | 9,106,52,0,0,31.2,0.38,42,0
252 | 2,129,84,0,0,28,0.284,27,0
253 | 2,90,80,14,55,24.4,0.249,24,0
254 | 0,86,68,32,0,35.8,0.238,25,0
255 | 12,92,62,7,258,27.6,0.926,44,1
256 | 1,113,64,35,0,33.6,0.543,21,1
257 | 3,111,56,39,0,30.1,0.557,30,0
258 | 2,114,68,22,0,28.7,0.092,25,0
259 | 1,193,50,16,375,25.9,0.655,24,0
260 | 11,155,76,28,150,33.3,1.353,51,1
261 | 3,191,68,15,130,30.9,0.299,34,0
262 | 3,141,0,0,0,30,0.761,27,1
263 | 4,95,70,32,0,32.1,0.612,24,0
264 | 3,142,80,15,0,32.4,0.2,63,0
265 | 4,123,62,0,0,32,0.226,35,1
266 | 5,96,74,18,67,33.6,0.997,43,0
267 | 0,138,0,0,0,36.3,0.933,25,1
268 | 2,128,64,42,0,40,1.101,24,0
269 | 0,102,52,0,0,25.1,0.078,21,0
270 | 2,146,0,0,0,27.5,0.24,28,1
271 | 10,101,86,37,0,45.6,1.136,38,1
272 | 2,108,62,32,56,25.2,0.128,21,0
273 | 3,122,78,0,0,23,0.254,40,0
274 | 1,71,78,50,45,33.2,0.422,21,0
275 | 13,106,70,0,0,34.2,0.251,52,0
276 | 2,100,70,52,57,40.5,0.677,25,0
277 | 7,106,60,24,0,26.5,0.296,29,1
278 | 0,104,64,23,116,27.8,0.454,23,0
279 | 5,114,74,0,0,24.9,0.744,57,0
280 | 2,108,62,10,278,25.3,0.881,22,0
281 | 0,146,70,0,0,37.9,0.334,28,1
282 | 10,129,76,28,122,35.9,0.28,39,0
283 | 7,133,88,15,155,32.4,0.262,37,0
284 | 7,161,86,0,0,30.4,0.165,47,1
285 | 2,108,80,0,0,27,0.259,52,1
286 | 7,136,74,26,135,26,0.647,51,0
287 | 5,155,84,44,545,38.7,0.619,34,0
288 | 1,119,86,39,220,45.6,0.808,29,1
289 | 4,96,56,17,49,20.8,0.34,26,0
290 | 5,108,72,43,75,36.1,0.263,33,0
291 | 0,78,88,29,40,36.9,0.434,21,0
292 | 0,107,62,30,74,36.6,0.757,25,1
293 | 2,128,78,37,182,43.3,1.224,31,1
294 | 1,128,48,45,194,40.5,0.613,24,1
295 | 0,161,50,0,0,21.9,0.254,65,0
296 | 6,151,62,31,120,35.5,0.692,28,0
297 | 2,146,70,38,360,28,0.337,29,1
298 | 0,126,84,29,215,30.7,0.52,24,0
299 | 14,100,78,25,184,36.6,0.412,46,1
300 | 8,112,72,0,0,23.6,0.84,58,0
301 | 0,167,0,0,0,32.3,0.839,30,1
302 | 2,144,58,33,135,31.6,0.422,25,1
303 | 5,77,82,41,42,35.8,0.156,35,0
304 | 5,115,98,0,0,52.9,0.209,28,1
305 | 3,150,76,0,0,21,0.207,37,0
306 | 2,120,76,37,105,39.7,0.215,29,0
307 | 10,161,68,23,132,25.5,0.326,47,1
308 | 0,137,68,14,148,24.8,0.143,21,0
309 | 0,128,68,19,180,30.5,1.391,25,1
310 | 2,124,68,28,205,32.9,0.875,30,1
311 | 6,80,66,30,0,26.2,0.313,41,0
312 | 0,106,70,37,148,39.4,0.605,22,0
313 | 2,155,74,17,96,26.6,0.433,27,1
314 | 3,113,50,10,85,29.5,0.626,25,0
315 | 7,109,80,31,0,35.9,1.127,43,1
316 | 2,112,68,22,94,34.1,0.315,26,0
317 | 3,99,80,11,64,19.3,0.284,30,0
318 | 3,182,74,0,0,30.5,0.345,29,1
319 | 3,115,66,39,140,38.1,0.15,28,0
320 | 6,194,78,0,0,23.5,0.129,59,1
321 | 4,129,60,12,231,27.5,0.527,31,0
322 | 3,112,74,30,0,31.6,0.197,25,1
323 | 0,124,70,20,0,27.4,0.254,36,1
324 | 13,152,90,33,29,26.8,0.731,43,1
325 | 2,112,75,32,0,35.7,0.148,21,0
326 | 1,157,72,21,168,25.6,0.123,24,0
327 | 1,122,64,32,156,35.1,0.692,30,1
328 | 10,179,70,0,0,35.1,0.2,37,0
329 | 2,102,86,36,120,45.5,0.127,23,1
330 | 6,105,70,32,68,30.8,0.122,37,0
331 | 8,118,72,19,0,23.1,1.476,46,0
332 | 2,87,58,16,52,32.7,0.166,25,0
333 | 1,180,0,0,0,43.3,0.282,41,1
334 | 12,106,80,0,0,23.6,0.137,44,0
335 | 1,95,60,18,58,23.9,0.26,22,0
336 | 0,165,76,43,255,47.9,0.259,26,0
337 | 0,117,0,0,0,33.8,0.932,44,0
338 | 5,115,76,0,0,31.2,0.343,44,1
339 | 9,152,78,34,171,34.2,0.893,33,1
340 | 7,178,84,0,0,39.9,0.331,41,1
341 | 1,130,70,13,105,25.9,0.472,22,0
342 | 1,95,74,21,73,25.9,0.673,36,0
343 | 1,0,68,35,0,32,0.389,22,0
344 | 5,122,86,0,0,34.7,0.29,33,0
345 | 8,95,72,0,0,36.8,0.485,57,0
346 | 8,126,88,36,108,38.5,0.349,49,0
347 | 1,139,46,19,83,28.7,0.654,22,0
348 | 3,116,0,0,0,23.5,0.187,23,0
349 | 3,99,62,19,74,21.8,0.279,26,0
350 | 5,0,80,32,0,41,0.346,37,1
351 | 4,92,80,0,0,42.2,0.237,29,0
352 | 4,137,84,0,0,31.2,0.252,30,0
353 | 3,61,82,28,0,34.4,0.243,46,0
354 | 1,90,62,12,43,27.2,0.58,24,0
355 | 3,90,78,0,0,42.7,0.559,21,0
356 | 9,165,88,0,0,30.4,0.302,49,1
357 | 1,125,50,40,167,33.3,0.962,28,1
358 | 13,129,0,30,0,39.9,0.569,44,1
359 | 12,88,74,40,54,35.3,0.378,48,0
360 | 1,196,76,36,249,36.5,0.875,29,1
361 | 5,189,64,33,325,31.2,0.583,29,1
362 | 5,158,70,0,0,29.8,0.207,63,0
363 | 5,103,108,37,0,39.2,0.305,65,0
364 | 4,146,78,0,0,38.5,0.52,67,1
365 | 4,147,74,25,293,34.9,0.385,30,0
366 | 5,99,54,28,83,34,0.499,30,0
367 | 6,124,72,0,0,27.6,0.368,29,1
368 | 0,101,64,17,0,21,0.252,21,0
369 | 3,81,86,16,66,27.5,0.306,22,0
370 | 1,133,102,28,140,32.8,0.234,45,1
371 | 3,173,82,48,465,38.4,2.137,25,1
372 | 0,118,64,23,89,0,1.731,21,0
373 | 0,84,64,22,66,35.8,0.545,21,0
374 | 2,105,58,40,94,34.9,0.225,25,0
375 | 2,122,52,43,158,36.2,0.816,28,0
376 | 12,140,82,43,325,39.2,0.528,58,1
377 | 0,98,82,15,84,25.2,0.299,22,0
378 | 1,87,60,37,75,37.2,0.509,22,0
379 | 4,156,75,0,0,48.3,0.238,32,1
380 | 0,93,100,39,72,43.4,1.021,35,0
381 | 1,107,72,30,82,30.8,0.821,24,0
382 | 0,105,68,22,0,20,0.236,22,0
383 | 1,109,60,8,182,25.4,0.947,21,0
384 | 1,90,62,18,59,25.1,1.268,25,0
385 | 1,125,70,24,110,24.3,0.221,25,0
386 | 1,119,54,13,50,22.3,0.205,24,0
387 | 5,116,74,29,0,32.3,0.66,35,1
388 | 8,105,100,36,0,43.3,0.239,45,1
389 | 5,144,82,26,285,32,0.452,58,1
390 | 3,100,68,23,81,31.6,0.949,28,0
391 | 1,100,66,29,196,32,0.444,42,0
392 | 5,166,76,0,0,45.7,0.34,27,1
393 | 1,131,64,14,415,23.7,0.389,21,0
394 | 4,116,72,12,87,22.1,0.463,37,0
395 | 4,158,78,0,0,32.9,0.803,31,1
396 | 2,127,58,24,275,27.7,1.6,25,0
397 | 3,96,56,34,115,24.7,0.944,39,0
398 | 0,131,66,40,0,34.3,0.196,22,1
399 | 3,82,70,0,0,21.1,0.389,25,0
400 | 3,193,70,31,0,34.9,0.241,25,1
401 | 4,95,64,0,0,32,0.161,31,1
402 | 6,137,61,0,0,24.2,0.151,55,0
403 | 5,136,84,41,88,35,0.286,35,1
404 | 9,72,78,25,0,31.6,0.28,38,0
405 | 5,168,64,0,0,32.9,0.135,41,1
406 | 2,123,48,32,165,42.1,0.52,26,0
407 | 4,115,72,0,0,28.9,0.376,46,1
408 | 0,101,62,0,0,21.9,0.336,25,0
409 | 8,197,74,0,0,25.9,1.191,39,1
410 | 1,172,68,49,579,42.4,0.702,28,1
411 | 6,102,90,39,0,35.7,0.674,28,0
412 | 1,112,72,30,176,34.4,0.528,25,0
413 | 1,143,84,23,310,42.4,1.076,22,0
414 | 1,143,74,22,61,26.2,0.256,21,0
415 | 0,138,60,35,167,34.6,0.534,21,1
416 | 3,173,84,33,474,35.7,0.258,22,1
417 | 1,97,68,21,0,27.2,1.095,22,0
418 | 4,144,82,32,0,38.5,0.554,37,1
419 | 1,83,68,0,0,18.2,0.624,27,0
420 | 3,129,64,29,115,26.4,0.219,28,1
421 | 1,119,88,41,170,45.3,0.507,26,0
422 | 2,94,68,18,76,26,0.561,21,0
423 | 0,102,64,46,78,40.6,0.496,21,0
424 | 2,115,64,22,0,30.8,0.421,21,0
425 | 8,151,78,32,210,42.9,0.516,36,1
426 | 4,184,78,39,277,37,0.264,31,1
427 | 0,94,0,0,0,0,0.256,25,0
428 | 1,181,64,30,180,34.1,0.328,38,1
429 | 0,135,94,46,145,40.6,0.284,26,0
430 | 1,95,82,25,180,35,0.233,43,1
431 | 2,99,0,0,0,22.2,0.108,23,0
432 | 3,89,74,16,85,30.4,0.551,38,0
433 | 1,80,74,11,60,30,0.527,22,0
434 | 2,139,75,0,0,25.6,0.167,29,0
435 | 1,90,68,8,0,24.5,1.138,36,0
436 | 0,141,0,0,0,42.4,0.205,29,1
437 | 12,140,85,33,0,37.4,0.244,41,0
438 | 5,147,75,0,0,29.9,0.434,28,0
439 | 1,97,70,15,0,18.2,0.147,21,0
440 | 6,107,88,0,0,36.8,0.727,31,0
441 | 0,189,104,25,0,34.3,0.435,41,1
442 | 2,83,66,23,50,32.2,0.497,22,0
443 | 4,117,64,27,120,33.2,0.23,24,0
444 | 8,108,70,0,0,30.5,0.955,33,1
445 | 4,117,62,12,0,29.7,0.38,30,1
446 | 0,180,78,63,14,59.4,2.42,25,1
447 | 1,100,72,12,70,25.3,0.658,28,0
448 | 0,95,80,45,92,36.5,0.33,26,0
449 | 0,104,64,37,64,33.6,0.51,22,1
450 | 0,120,74,18,63,30.5,0.285,26,0
451 | 1,82,64,13,95,21.2,0.415,23,0
452 | 2,134,70,0,0,28.9,0.542,23,1
453 | 0,91,68,32,210,39.9,0.381,25,0
454 | 2,119,0,0,0,19.6,0.832,72,0
455 | 2,100,54,28,105,37.8,0.498,24,0
456 | 14,175,62,30,0,33.6,0.212,38,1
457 | 1,135,54,0,0,26.7,0.687,62,0
458 | 5,86,68,28,71,30.2,0.364,24,0
459 | 10,148,84,48,237,37.6,1.001,51,1
460 | 9,134,74,33,60,25.9,0.46,81,0
461 | 9,120,72,22,56,20.8,0.733,48,0
462 | 1,71,62,0,0,21.8,0.416,26,0
463 | 8,74,70,40,49,35.3,0.705,39,0
464 | 5,88,78,30,0,27.6,0.258,37,0
465 | 10,115,98,0,0,24,1.022,34,0
466 | 0,124,56,13,105,21.8,0.452,21,0
467 | 0,74,52,10,36,27.8,0.269,22,0
468 | 0,97,64,36,100,36.8,0.6,25,0
469 | 8,120,0,0,0,30,0.183,38,1
470 | 6,154,78,41,140,46.1,0.571,27,0
471 | 1,144,82,40,0,41.3,0.607,28,0
472 | 0,137,70,38,0,33.2,0.17,22,0
473 | 0,119,66,27,0,38.8,0.259,22,0
474 | 7,136,90,0,0,29.9,0.21,50,0
475 | 4,114,64,0,0,28.9,0.126,24,0
476 | 0,137,84,27,0,27.3,0.231,59,0
477 | 2,105,80,45,191,33.7,0.711,29,1
478 | 7,114,76,17,110,23.8,0.466,31,0
479 | 8,126,74,38,75,25.9,0.162,39,0
480 | 4,132,86,31,0,28,0.419,63,0
481 | 3,158,70,30,328,35.5,0.344,35,1
482 | 0,123,88,37,0,35.2,0.197,29,0
483 | 4,85,58,22,49,27.8,0.306,28,0
484 | 0,84,82,31,125,38.2,0.233,23,0
485 | 0,145,0,0,0,44.2,0.63,31,1
486 | 0,135,68,42,250,42.3,0.365,24,1
487 | 1,139,62,41,480,40.7,0.536,21,0
488 | 0,173,78,32,265,46.5,1.159,58,0
489 | 4,99,72,17,0,25.6,0.294,28,0
490 | 8,194,80,0,0,26.1,0.551,67,0
491 | 2,83,65,28,66,36.8,0.629,24,0
492 | 2,89,90,30,0,33.5,0.292,42,0
493 | 4,99,68,38,0,32.8,0.145,33,0
494 | 4,125,70,18,122,28.9,1.144,45,1
495 | 3,80,0,0,0,0,0.174,22,0
496 | 6,166,74,0,0,26.6,0.304,66,0
497 | 5,110,68,0,0,26,0.292,30,0
498 | 2,81,72,15,76,30.1,0.547,25,0
499 | 7,195,70,33,145,25.1,0.163,55,1
500 | 6,154,74,32,193,29.3,0.839,39,0
501 | 2,117,90,19,71,25.2,0.313,21,0
502 | 3,84,72,32,0,37.2,0.267,28,0
503 | 6,0,68,41,0,39,0.727,41,1
504 | 7,94,64,25,79,33.3,0.738,41,0
505 | 3,96,78,39,0,37.3,0.238,40,0
506 | 10,75,82,0,0,33.3,0.263,38,0
507 | 0,180,90,26,90,36.5,0.314,35,1
508 | 1,130,60,23,170,28.6,0.692,21,0
509 | 2,84,50,23,76,30.4,0.968,21,0
510 | 8,120,78,0,0,25,0.409,64,0
511 | 12,84,72,31,0,29.7,0.297,46,1
512 | 0,139,62,17,210,22.1,0.207,21,0
513 | 9,91,68,0,0,24.2,0.2,58,0
514 | 2,91,62,0,0,27.3,0.525,22,0
515 | 3,99,54,19,86,25.6,0.154,24,0
516 | 3,163,70,18,105,31.6,0.268,28,1
517 | 9,145,88,34,165,30.3,0.771,53,1
518 | 7,125,86,0,0,37.6,0.304,51,0
519 | 13,76,60,0,0,32.8,0.18,41,0
520 | 6,129,90,7,326,19.6,0.582,60,0
521 | 2,68,70,32,66,25,0.187,25,0
522 | 3,124,80,33,130,33.2,0.305,26,0
523 | 6,114,0,0,0,0,0.189,26,0
524 | 9,130,70,0,0,34.2,0.652,45,1
525 | 3,125,58,0,0,31.6,0.151,24,0
526 | 3,87,60,18,0,21.8,0.444,21,0
527 | 1,97,64,19,82,18.2,0.299,21,0
528 | 3,116,74,15,105,26.3,0.107,24,0
529 | 0,117,66,31,188,30.8,0.493,22,0
530 | 0,111,65,0,0,24.6,0.66,31,0
531 | 2,122,60,18,106,29.8,0.717,22,0
532 | 0,107,76,0,0,45.3,0.686,24,0
533 | 1,86,66,52,65,41.3,0.917,29,0
534 | 6,91,0,0,0,29.8,0.501,31,0
535 | 1,77,56,30,56,33.3,1.251,24,0
536 | 4,132,0,0,0,32.9,0.302,23,1
537 | 0,105,90,0,0,29.6,0.197,46,0
538 | 0,57,60,0,0,21.7,0.735,67,0
539 | 0,127,80,37,210,36.3,0.804,23,0
540 | 3,129,92,49,155,36.4,0.968,32,1
541 | 8,100,74,40,215,39.4,0.661,43,1
542 | 3,128,72,25,190,32.4,0.549,27,1
543 | 10,90,85,32,0,34.9,0.825,56,1
544 | 4,84,90,23,56,39.5,0.159,25,0
545 | 1,88,78,29,76,32,0.365,29,0
546 | 8,186,90,35,225,34.5,0.423,37,1
547 | 5,187,76,27,207,43.6,1.034,53,1
548 | 4,131,68,21,166,33.1,0.16,28,0
549 | 1,164,82,43,67,32.8,0.341,50,0
550 | 4,189,110,31,0,28.5,0.68,37,0
551 | 1,116,70,28,0,27.4,0.204,21,0
552 | 3,84,68,30,106,31.9,0.591,25,0
553 | 6,114,88,0,0,27.8,0.247,66,0
554 | 1,88,62,24,44,29.9,0.422,23,0
555 | 1,84,64,23,115,36.9,0.471,28,0
556 | 7,124,70,33,215,25.5,0.161,37,0
557 | 1,97,70,40,0,38.1,0.218,30,0
558 | 8,110,76,0,0,27.8,0.237,58,0
559 | 11,103,68,40,0,46.2,0.126,42,0
560 | 11,85,74,0,0,30.1,0.3,35,0
561 | 6,125,76,0,0,33.8,0.121,54,1
562 | 0,198,66,32,274,41.3,0.502,28,1
563 | 1,87,68,34,77,37.6,0.401,24,0
564 | 6,99,60,19,54,26.9,0.497,32,0
565 | 0,91,80,0,0,32.4,0.601,27,0
566 | 2,95,54,14,88,26.1,0.748,22,0
567 | 1,99,72,30,18,38.6,0.412,21,0
568 | 6,92,62,32,126,32,0.085,46,0
569 | 4,154,72,29,126,31.3,0.338,37,0
570 | 0,121,66,30,165,34.3,0.203,33,1
571 | 3,78,70,0,0,32.5,0.27,39,0
572 | 2,130,96,0,0,22.6,0.268,21,0
573 | 3,111,58,31,44,29.5,0.43,22,0
574 | 2,98,60,17,120,34.7,0.198,22,0
575 | 1,143,86,30,330,30.1,0.892,23,0
576 | 1,119,44,47,63,35.5,0.28,25,0
577 | 6,108,44,20,130,24,0.813,35,0
578 | 2,118,80,0,0,42.9,0.693,21,1
579 | 10,133,68,0,0,27,0.245,36,0
580 | 2,197,70,99,0,34.7,0.575,62,1
581 | 0,151,90,46,0,42.1,0.371,21,1
582 | 6,109,60,27,0,25,0.206,27,0
583 | 12,121,78,17,0,26.5,0.259,62,0
584 | 8,100,76,0,0,38.7,0.19,42,0
585 | 8,124,76,24,600,28.7,0.687,52,1
586 | 1,93,56,11,0,22.5,0.417,22,0
587 | 8,143,66,0,0,34.9,0.129,41,1
588 | 6,103,66,0,0,24.3,0.249,29,0
589 | 3,176,86,27,156,33.3,1.154,52,1
590 | 0,73,0,0,0,21.1,0.342,25,0
591 | 11,111,84,40,0,46.8,0.925,45,1
592 | 2,112,78,50,140,39.4,0.175,24,0
593 | 3,132,80,0,0,34.4,0.402,44,1
594 | 2,82,52,22,115,28.5,1.699,25,0
595 | 6,123,72,45,230,33.6,0.733,34,0
596 | 0,188,82,14,185,32,0.682,22,1
597 | 0,67,76,0,0,45.3,0.194,46,0
598 | 1,89,24,19,25,27.8,0.559,21,0
599 | 1,173,74,0,0,36.8,0.088,38,1
600 | 1,109,38,18,120,23.1,0.407,26,0
601 | 1,108,88,19,0,27.1,0.4,24,0
602 | 6,96,0,0,0,23.7,0.19,28,0
603 | 1,124,74,36,0,27.8,0.1,30,0
604 | 7,150,78,29,126,35.2,0.692,54,1
605 | 4,183,0,0,0,28.4,0.212,36,1
606 | 1,124,60,32,0,35.8,0.514,21,0
607 | 1,181,78,42,293,40,1.258,22,1
608 | 1,92,62,25,41,19.5,0.482,25,0
609 | 0,152,82,39,272,41.5,0.27,27,0
610 | 1,111,62,13,182,24,0.138,23,0
611 | 3,106,54,21,158,30.9,0.292,24,0
612 | 3,174,58,22,194,32.9,0.593,36,1
613 | 7,168,88,42,321,38.2,0.787,40,1
614 | 6,105,80,28,0,32.5,0.878,26,0
615 | 11,138,74,26,144,36.1,0.557,50,1
616 | 3,106,72,0,0,25.8,0.207,27,0
617 | 6,117,96,0,0,28.7,0.157,30,0
618 | 2,68,62,13,15,20.1,0.257,23,0
619 | 9,112,82,24,0,28.2,1.282,50,1
620 | 0,119,0,0,0,32.4,0.141,24,1
621 | 2,112,86,42,160,38.4,0.246,28,0
622 | 2,92,76,20,0,24.2,1.698,28,0
623 | 6,183,94,0,0,40.8,1.461,45,0
624 | 0,94,70,27,115,43.5,0.347,21,0
625 | 2,108,64,0,0,30.8,0.158,21,0
626 | 4,90,88,47,54,37.7,0.362,29,0
627 | 0,125,68,0,0,24.7,0.206,21,0
628 | 0,132,78,0,0,32.4,0.393,21,0
629 | 5,128,80,0,0,34.6,0.144,45,0
630 | 4,94,65,22,0,24.7,0.148,21,0
631 | 7,114,64,0,0,27.4,0.732,34,1
632 | 0,102,78,40,90,34.5,0.238,24,0
633 | 2,111,60,0,0,26.2,0.343,23,0
634 | 1,128,82,17,183,27.5,0.115,22,0
635 | 10,92,62,0,0,25.9,0.167,31,0
636 | 13,104,72,0,0,31.2,0.465,38,1
637 | 5,104,74,0,0,28.8,0.153,48,0
638 | 2,94,76,18,66,31.6,0.649,23,0
639 | 7,97,76,32,91,40.9,0.871,32,1
640 | 1,100,74,12,46,19.5,0.149,28,0
641 | 0,102,86,17,105,29.3,0.695,27,0
642 | 4,128,70,0,0,34.3,0.303,24,0
643 | 6,147,80,0,0,29.5,0.178,50,1
644 | 4,90,0,0,0,28,0.61,31,0
645 | 3,103,72,30,152,27.6,0.73,27,0
646 | 2,157,74,35,440,39.4,0.134,30,0
647 | 1,167,74,17,144,23.4,0.447,33,1
648 | 0,179,50,36,159,37.8,0.455,22,1
649 | 11,136,84,35,130,28.3,0.26,42,1
650 | 0,107,60,25,0,26.4,0.133,23,0
651 | 1,91,54,25,100,25.2,0.234,23,0
652 | 1,117,60,23,106,33.8,0.466,27,0
653 | 5,123,74,40,77,34.1,0.269,28,0
654 | 2,120,54,0,0,26.8,0.455,27,0
655 | 1,106,70,28,135,34.2,0.142,22,0
656 | 2,155,52,27,540,38.7,0.24,25,1
657 | 2,101,58,35,90,21.8,0.155,22,0
658 | 1,120,80,48,200,38.9,1.162,41,0
659 | 11,127,106,0,0,39,0.19,51,0
660 | 3,80,82,31,70,34.2,1.292,27,1
661 | 10,162,84,0,0,27.7,0.182,54,0
662 | 1,199,76,43,0,42.9,1.394,22,1
663 | 8,167,106,46,231,37.6,0.165,43,1
664 | 9,145,80,46,130,37.9,0.637,40,1
665 | 6,115,60,39,0,33.7,0.245,40,1
666 | 1,112,80,45,132,34.8,0.217,24,0
667 | 4,145,82,18,0,32.5,0.235,70,1
668 | 10,111,70,27,0,27.5,0.141,40,1
669 | 6,98,58,33,190,34,0.43,43,0
670 | 9,154,78,30,100,30.9,0.164,45,0
671 | 6,165,68,26,168,33.6,0.631,49,0
672 | 1,99,58,10,0,25.4,0.551,21,0
673 | 10,68,106,23,49,35.5,0.285,47,0
674 | 3,123,100,35,240,57.3,0.88,22,0
675 | 8,91,82,0,0,35.6,0.587,68,0
676 | 6,195,70,0,0,30.9,0.328,31,1
677 | 9,156,86,0,0,24.8,0.23,53,1
678 | 0,93,60,0,0,35.3,0.263,25,0
679 | 3,121,52,0,0,36,0.127,25,1
680 | 2,101,58,17,265,24.2,0.614,23,0
681 | 2,56,56,28,45,24.2,0.332,22,0
682 | 0,162,76,36,0,49.6,0.364,26,1
683 | 0,95,64,39,105,44.6,0.366,22,0
684 | 4,125,80,0,0,32.3,0.536,27,1
685 | 5,136,82,0,0,0,0.64,69,0
686 | 2,129,74,26,205,33.2,0.591,25,0
687 | 3,130,64,0,0,23.1,0.314,22,0
688 | 1,107,50,19,0,28.3,0.181,29,0
689 | 1,140,74,26,180,24.1,0.828,23,0
690 | 1,144,82,46,180,46.1,0.335,46,1
691 | 8,107,80,0,0,24.6,0.856,34,0
692 | 13,158,114,0,0,42.3,0.257,44,1
693 | 2,121,70,32,95,39.1,0.886,23,0
694 | 7,129,68,49,125,38.5,0.439,43,1
695 | 2,90,60,0,0,23.5,0.191,25,0
696 | 7,142,90,24,480,30.4,0.128,43,1
697 | 3,169,74,19,125,29.9,0.268,31,1
698 | 0,99,0,0,0,25,0.253,22,0
699 | 4,127,88,11,155,34.5,0.598,28,0
700 | 4,118,70,0,0,44.5,0.904,26,0
701 | 2,122,76,27,200,35.9,0.483,26,0
702 | 6,125,78,31,0,27.6,0.565,49,1
703 | 1,168,88,29,0,35,0.905,52,1
704 | 2,129,0,0,0,38.5,0.304,41,0
705 | 4,110,76,20,100,28.4,0.118,27,0
706 | 6,80,80,36,0,39.8,0.177,28,0
707 | 10,115,0,0,0,0,0.261,30,1
708 | 2,127,46,21,335,34.4,0.176,22,0
709 | 9,164,78,0,0,32.8,0.148,45,1
710 | 2,93,64,32,160,38,0.674,23,1
711 | 3,158,64,13,387,31.2,0.295,24,0
712 | 5,126,78,27,22,29.6,0.439,40,0
713 | 10,129,62,36,0,41.2,0.441,38,1
714 | 0,134,58,20,291,26.4,0.352,21,0
715 | 3,102,74,0,0,29.5,0.121,32,0
716 | 7,187,50,33,392,33.9,0.826,34,1
717 | 3,173,78,39,185,33.8,0.97,31,1
718 | 10,94,72,18,0,23.1,0.595,56,0
719 | 1,108,60,46,178,35.5,0.415,24,0
720 | 5,97,76,27,0,35.6,0.378,52,1
721 | 4,83,86,19,0,29.3,0.317,34,0
722 | 1,114,66,36,200,38.1,0.289,21,0
723 | 1,149,68,29,127,29.3,0.349,42,1
724 | 5,117,86,30,105,39.1,0.251,42,0
725 | 1,111,94,0,0,32.8,0.265,45,0
726 | 4,112,78,40,0,39.4,0.236,38,0
727 | 1,116,78,29,180,36.1,0.496,25,0
728 | 0,141,84,26,0,32.4,0.433,22,0
729 | 2,175,88,0,0,22.9,0.326,22,0
730 | 2,92,52,0,0,30.1,0.141,22,0
731 | 3,130,78,23,79,28.4,0.323,34,1
732 | 8,120,86,0,0,28.4,0.259,22,1
733 | 2,174,88,37,120,44.5,0.646,24,1
734 | 2,106,56,27,165,29,0.426,22,0
735 | 2,105,75,0,0,23.3,0.56,53,0
736 | 4,95,60,32,0,35.4,0.284,28,0
737 | 0,126,86,27,120,27.4,0.515,21,0
738 | 8,65,72,23,0,32,0.6,42,0
739 | 2,99,60,17,160,36.6,0.453,21,0
740 | 1,102,74,0,0,39.5,0.293,42,1
741 | 11,120,80,37,150,42.3,0.785,48,1
742 | 3,102,44,20,94,30.8,0.4,26,0
743 | 1,109,58,18,116,28.5,0.219,22,0
744 | 9,140,94,0,0,32.7,0.734,45,1
745 | 13,153,88,37,140,40.6,1.174,39,0
746 | 12,100,84,33,105,30,0.488,46,0
747 | 1,147,94,41,0,49.3,0.358,27,1
748 | 1,81,74,41,57,46.3,1.096,32,0
749 | 3,187,70,22,200,36.4,0.408,36,1
750 | 6,162,62,0,0,24.3,0.178,50,1
751 | 4,136,70,0,0,31.2,1.182,22,1
752 | 1,121,78,39,74,39,0.261,28,0
753 | 3,108,62,24,0,26,0.223,25,0
754 | 0,181,88,44,510,43.3,0.222,26,1
755 | 8,154,78,32,0,32.4,0.443,45,1
756 | 1,128,88,39,110,36.5,1.057,37,1
757 | 7,137,90,41,0,32,0.391,39,0
758 | 0,123,72,0,0,36.3,0.258,52,1
759 | 1,106,76,0,0,37.5,0.197,26,0
760 | 6,190,92,0,0,35.5,0.278,66,1
761 | 2,88,58,26,16,28.4,0.766,22,0
762 | 9,170,74,31,0,44,0.403,43,1
763 | 9,89,62,0,0,22.5,0.142,33,0
764 | 10,101,76,48,180,32.9,0.171,63,0
765 | 2,122,70,27,0,36.8,0.34,27,0
766 | 5,121,72,23,112,26.2,0.245,30,0
767 | 1,126,60,0,0,30.1,0.349,47,1
768 | 1,93,70,31,0,30.4,0.315,23,0
--------------------------------------------------------------------------------
/K means Clustering.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 419,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import numpy as np\n",
10 | "from sklearn.datasets import make_blobs\n",
11 | "import matplotlib.pyplot as plt\n"
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 760,
17 | "metadata": {},
18 | "outputs": [
19 | {
20 | "data": {
21 | "image/png": "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",
22 | "text/plain": [
23 | ""
24 | ]
25 | },
26 | "metadata": {},
27 | "output_type": "display_data"
28 | }
29 | ],
30 | "source": [
31 | "x, y= make_blobs(n_samples=1000, centers=5, n_features=2,\n",
32 | " cluster_std=0.20, random_state=10)\n",
33 | "plt.scatter(x[:, 0], x[:, 1]);"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": 700,
39 | "metadata": {},
40 | "outputs": [],
41 | "source": [
42 | "def cal_centroid(x,centroid , k ,distance, curr_map):\n",
43 | " \n",
44 | "\n",
45 | " for i in range(0,k):\n",
46 | "\n",
47 | " distance[:, i] = np.sum(((x-centroid[i])**2), axis=1).T\n",
48 | " \n",
49 | "\n",
50 | " for i in range(0,len(curr_map)):\n",
51 | " \n",
52 | " min_index = np.argmin(distance[i])\n",
53 | " curr_map[i] = min_index\n",
54 | "\n",
55 | " for i in range(0, k):\n",
56 | " \n",
57 | " group = np.where(curr_map==i)\n",
58 | " \n",
59 | " \n",
60 | " group_mean = np.mean(x[group],axis=0)\n",
61 | " \n",
62 | "\n",
63 | " centroid[i] = group_mean\n",
64 | "\n",
65 | " return x, centroid,k, distance, curr_map \n",
66 | "\n"
67 | ]
68 | },
69 | {
70 | "cell_type": "code",
71 | "execution_count": 754,
72 | "metadata": {},
73 | "outputs": [],
74 | "source": [
75 | "def K_means(x,k, iterations):\n",
76 | " n = len(x)\n",
77 | " centroid = x[np.random.randint(n, size=k),:]\n",
78 | " distance = np.zeros((n, k))\n",
79 | " \n",
80 | " curr_map = np.zeros(n)\n",
81 | "\n",
82 | " steps = 0\n",
83 | " \n",
84 | " while (steps "
112 | ]
113 | },
114 | "metadata": {},
115 | "output_type": "display_data"
116 | }
117 | ],
118 | "source": [
119 | "plt.scatter(x[:, 0], x[:, 1]);\n",
120 | "plt.scatter(centroid[:, 0], centroid[:, 1], c='red');"
121 | ]
122 | },
123 | {
124 | "cell_type": "code",
125 | "execution_count": 767,
126 | "metadata": {},
127 | "outputs": [
128 | {
129 | "data": {
130 | "text/plain": [
131 | "(array([[-0.03864426, -5.50399379],\n",
132 | " [-6.04360812, 5.2238616 ],\n",
133 | " [ 2.66638169, 4.97302933],\n",
134 | " [-6.64117501, -8.24490345],\n",
135 | " [ 5.45190976, -9.59175177]]),\n",
136 | " 100)"
137 | ]
138 | },
139 | "execution_count": 767,
140 | "metadata": {},
141 | "output_type": "execute_result"
142 | }
143 | ],
144 | "source": [
145 | "centroid, steps"
146 | ]
147 | }
148 | ],
149 | "metadata": {
150 | "kernelspec": {
151 | "display_name": "Python 3",
152 | "language": "python",
153 | "name": "python3"
154 | },
155 | "language_info": {
156 | "codemirror_mode": {
157 | "name": "ipython",
158 | "version": 3
159 | },
160 | "file_extension": ".py",
161 | "mimetype": "text/x-python",
162 | "name": "python",
163 | "nbconvert_exporter": "python",
164 | "pygments_lexer": "ipython3",
165 | "version": "3.11.3"
166 | }
167 | },
168 | "nbformat": 4,
169 | "nbformat_minor": 2
170 | }
171 |
--------------------------------------------------------------------------------