Master-DataScience-Notes/1year/2trimester/Coding for Data Science - Python language/Python/Examples/ML - Linear regression, KNN, SVM.ipynb
2020-03-02 16:47:45 +01:00

1263 lines
116 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ML - Linear regression, KNN, SVM"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Linear regression"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... \\\n",
"0 GP F 18 U GT3 A 4 4 at_home teacher ... \n",
"1 GP F 17 U GT3 T 1 1 at_home other ... \n",
"2 GP F 15 U LE3 T 1 1 at_home other ... \n",
"3 GP F 15 U GT3 T 4 2 health services ... \n",
"4 GP F 16 U GT3 T 3 3 other other ... \n",
"\n",
" famrel freetime goout Dalc Walc health absences G1 G2 G3 \n",
"0 4 3 4 1 1 3 6 5 6 6 \n",
"1 5 3 3 1 1 3 4 5 5 6 \n",
"2 4 3 2 2 3 3 10 7 8 10 \n",
"3 3 2 2 1 1 5 2 15 14 15 \n",
"4 4 3 2 1 2 5 4 6 10 10 \n",
"\n",
"[5 rows x 33 columns]\n"
]
}
],
"source": [
"#Import Library\n",
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn import linear_model\n",
"import sklearn\n",
"from sklearn.utils import shuffle\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib import style\n",
"import pickle\n",
"\n",
"data = pd.read_csv(\"Datasets/Students/student-mat.csv\", sep=\";\")\n",
"# Since our data is seperated by semicolons we need to do sep=\";\"\n",
"print(data.head())"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"data = data[[\"G1\", \"G2\", \"G3\", \"studytime\", \"failures\", \"absences\"]]\n",
"predict = \"G3\"\n",
"\n",
"X = np.array(data.drop([predict], 1)) # Features\n",
"y = np.array(data[predict]) # Labels"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size=0.1)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9072825900231904\n",
"Coefficient: \n",
" [ 0.13527031 0.98751848 -0.20498797 -0.33339246 0.0360702 ]\n",
"Intercept: \n",
" -1.3353139222187735\n",
"11.953607354545625 [11 12 2 0 10] 13\n",
"8.648370883609443 [9 9 2 0 8] 9\n",
"6.748413614780693 [ 6 8 1 3 16] 8\n",
"14.253304400739522 [15 14 2 0 4] 14\n",
"8.012543885152066 [10 8 2 0 14] 9\n",
"18.95845802835205 [18 18 1 0 8] 18\n",
"8.6393604136566 [10 9 2 0 4] 11\n",
"13.130515603322937 [14 13 2 0 4] 13\n",
"8.524114358116751 [ 8 8 1 0 30] 8\n",
"9.358341590467683 [ 9 9 1 0 22] 9\n",
"18.440271505465734 [18 18 3 0 5] 19\n",
"9.83186686648655 [10 10 1 0 4] 10\n",
"-0.5278570449856139 [9 0 2 0 0] 0\n",
"5.831032204076057 [5 8 2 3 0] 7\n",
"8.538406750456677 [ 7 10 3 1 0] 10\n",
"15.033412181729727 [14 15 2 0 2] 15\n",
"10.677527304643373 [11 11 2 0 2] 11\n",
"9.13533268256865 [11 9 2 0 14] 9\n",
"10.54225699206339 [10 11 2 0 2] 12\n",
"13.479784353849112 [14 13 1 0 8] 13\n",
"10.677527304643373 [11 11 2 0 2] 11\n",
"16.131563989318995 [15 16 3 0 7] 15\n",
"12.025747745812037 [11 12 2 0 12] 11\n",
"-1.0033856381389292 [7 0 3 0 0] 0\n",
"3.542127489909987 [6 5 1 2 0] 0\n",
"6.4544900042839535 [8 7 1 0 0] 6\n",
"-1.6660055594329843 [4 0 1 2 0] 0\n",
"13.973753305626712 [14 14 2 0 0] 14\n",
"11.020208321069754 [13 11 2 0 4] 11\n",
"8.089796550968265 [ 9 9 2 2 11] 9\n",
"15.351456208328791 [16 15 3 0 9] 16\n",
"13.446136894068955 [15 13 2 0 9] 15\n",
"11.953885441248763 [14 12 2 1 8] 12\n",
"-0.9268021619226335 [7 0 1 1 0] 0\n",
"13.381531513205376 [15 14 3 2 4] 15\n",
"16.354601213039867 [17 16 2 0 0] 17\n",
"10.812797617223357 [12 11 2 0 2] 12\n",
"12.197088254025228 [12 12 2 0 13] 13\n",
"12.866562712262764 [10 13 1 0 6] 13\n",
"7.2370205211272065 [8 8 2 0 0] 0\n"
]
}
],
"source": [
"\n",
"linear = linear_model.LinearRegression()\n",
"\n",
"linear.fit(x_train, y_train)\n",
"acc = linear.score(x_test, y_test)\n",
"print(acc)\n",
"\n",
"print('Coefficient: \\n', linear.coef_)\n",
"print('Intercept: \\n', linear.intercept_)\n",
"\n",
"predictions = linear.predict(x_test)\n",
"\n",
"for x in range(len(predictions)):\n",
" print(predictions[x], x_test[x], y_test[x])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Saving model and importing"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.utils import shuffle\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib import style\n",
"import pickle"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Saving "
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [],
"source": [
"with open(\"Models/studentgrades.pickle\", \"wb\") as f:\n",
" pickle.dump(linear, f)\n",
"\n",
"# linear is the name of the model we created in the last tutorial\n",
"# it should be defined above this"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Loading model "
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [],
"source": [
"pickle_in = open(\"Models/studentgrades.pickle\", \"rb\")\n",
"linear = pickle.load(pickle_in)\n",
"\n",
"# Now we can use linear to predict grades like before"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Training multiple model\n"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.7120505837839677\n",
"Accuracy: 0.8419740188965523\n",
"Accuracy: 0.8020262406782782\n",
"Accuracy: 0.6940409192793664\n",
"Accuracy: 0.8940235536728673\n",
"Accuracy: 0.8145923637342816\n",
"Accuracy: 0.8471013396643304\n",
"Accuracy: 0.7832990829886533\n",
"Accuracy: 0.8054626583260116\n",
"Accuracy: 0.8402321980392969\n",
"Accuracy: 0.8331033509590885\n",
"Accuracy: 0.8458394692949511\n",
"Accuracy: 0.9357285240967607\n",
"Accuracy: 0.9110387297485635\n",
"Accuracy: 0.7468333796226976\n",
"Accuracy: 0.7767352849982638\n",
"Accuracy: 0.8364676561627661\n",
"Accuracy: 0.8527521275793825\n",
"Accuracy: 0.8992992485819427\n",
"Accuracy: 0.7452038544962007\n",
"\n",
"Best accuracy: 0.9357285240967607\n"
]
}
],
"source": [
"# TRAIN MODEL MULTIPLE TIMES FOR BEST SCORE\n",
"best = 0\n",
"for _ in range(20):\n",
" x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size=0.1)\n",
"\n",
" linear = linear_model.LinearRegression()\n",
" \n",
" linear.fit(x_train, y_train)\n",
" acc = linear.score(x_test, y_test)\n",
" print(\"Accuracy: \" + str(acc))\n",
" \n",
" # If the current model has a better score than one we've already trained then save it\n",
" if acc > best:\n",
" best = acc\n",
" with open(\"Models/studentgrades.pickle\", \"wb\") as f:\n",
" pickle.dump(linear, f)\n",
" \n",
"print(\"\\nBest accuracy: \", best)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plotting data"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No handles with labels found to put in legend.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Drawing and plotting model\n",
"style.use(\"ggplot\")\n",
"plot = \"G1\" # Change this to G1, G2, studytime or absences to see other graphs\n",
"plt.scatter(data[plot], data[\"G3\"]) \n",
"plt.legend(loc=4)\n",
"plt.xlabel(plot)\n",
"plt.ylabel(\"Final Grade\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No handles with labels found to put in legend.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot = \"G2\" # Change this to G1, G2, studytime or absences to see other graphs\n",
"plt.scatter(data[plot], data[\"G3\"]) \n",
"plt.legend(loc=4)\n",
"plt.xlabel(plot)\n",
"plt.ylabel(\"Final Grade\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"No handles with labels found to put in legend.\n"
]
},
{
"data": {
"image/png": "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hZaWFlRUVGDu3LmIiIhATEwMnn/+eXz99dcAALVajVu3buH27dsIDw/HsGHDfBIDkSs8syDy0JUrV/DRRx/hH//4B0wmE0wmE8aMGeOTz+65eFV9fT3MZjNee+01a5sgCNZ9Zs+ejT//+c946623EBkZiRdeeAETJ070SRxEzrBYEHmopKQEv/jFL1BQUIDw8HDs3r3bo7UOIiIicO/ePevrxsZGu316Pj5ap9NBrVZj586ddvc/ACA2Nhbz588H0PUk1TVr1iAtLQ3JyckPkhaRR3gZishD7e3t0Gq1CA8PR1VVFb788kuP3vfII4/gu+++Q319Pdra2nDw4EGX+8fFxeGpp57Cnj170NbWBovFgpqaGuslr+PHj1sXtomMjATQtXIakT/xzILIQ/PmzcOePXvw3nvvIS0tDc8884x1ERpXRowYgWeeeQa//e1vERUVhWnTpuHUqVMu37No0SLs3bsXS5YsQXt7O5KSkjBt2jQAwNWrV7F79260tbUhNjYW//mf/4kBAwb4JEciZ7ieBRERucVzVyIicovFgoiI3GKxICIit1gsiIjILRYLIiJyi8WCiIjcYrEgIiK3WCyIiMit/w9mimwHPBILZgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot = \"failures\" # Change this to G1, G2, studytime or absences to see other graphs\n",
"plt.scatter(data[plot], data[\"G3\"]) \n",
"plt.legend(loc=4)\n",
"plt.xlabel(plot)\n",
"plt.ylabel(\"Final Grade\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# K-Nearest Neighbors (KNN)"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" buying maint door persons lug_boot safety class\n",
"0 vhigh vhigh 2 2 small low unacc\n",
"1 vhigh vhigh 2 2 small med unacc\n",
"2 vhigh vhigh 2 2 small high unacc\n",
"3 vhigh vhigh 2 2 med low unacc\n",
"4 vhigh vhigh 2 2 med med unacc\n"
]
}
],
"source": [
"import sklearn\n",
"from sklearn.utils import shuffle\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn import linear_model, preprocessing\n",
"\n",
"data = pd.read_csv(\"Datasets/Car Data Set/car.data\")\n",
"print(data.head())\n",
"\n",
"le = preprocessing.LabelEncoder()\n",
"buying = le.fit_transform(list(data[\"buying\"]))\n",
"maint = le.fit_transform(list(data[\"maint\"]))\n",
"door = le.fit_transform(list(data[\"door\"]))\n",
"persons = le.fit_transform(list(data[\"persons\"]))\n",
"lug_boot = le.fit_transform(list(data[\"lug_boot\"]))\n",
"safety = le.fit_transform(list(data[\"safety\"]))\n",
"cls = le.fit_transform(list(data[\"class\"]))\n",
" \n",
"predict = \"class\" #optional\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy model: 0.9479768786127167\n"
]
}
],
"source": [
"X = list(zip(buying, maint, door, persons, lug_boot, safety))\n",
"y = list(cls)\n",
"\n",
"x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size = 0.1)\n",
"\n",
"model = KNeighborsClassifier(n_neighbors=9)\n",
"\n",
"model.fit(x_train, y_train)\n",
"acc = model.score(x_test, y_test)\n",
"print(\"Accuracy model: \",acc)\n"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Predicted: good Data: (3, 3, 3, 2, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[1237, 705, 154, 339, 1066, 1092, 239, 757, 1143]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (3, 2, 2, 2, 2, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 680, 814, 913, 466, 842, 266, 927, 508, 1218]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 0, 3, 1, 0, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1115, 94, 1417, 673, 1000, 1512, 796, 11, 510]],\n",
" dtype=int64))\n",
"Predicted: acc Data: (1, 2, 3, 1, 2, 0) Actual: acc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 460, 1480, 1498, 942, 1268, 78, 766, 1521, 970]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 0, 2, 0, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 571, 1239, 222, 76, 31, 1546, 531, 1126, 211]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 3, 1, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1161, 1285, 1110, 1290, 1347, 1189, 118, 695, 1171]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 1, 2, 2, 1, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 194, 1086, 82, 1238, 1025, 998, 173, 1483, 440]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 2, 3, 1, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1339, 306, 999, 663, 1524, 865, 1470, 168, 1515]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 2, 1, 0, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 721, 487, 1241, 867, 261, 15, 119, 1529, 1013]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 2, 1, 1, 0, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[181, 887, 809, 238, 529, 433, 866, 736, 34]], dtype=int64))\n",
"Predicted: good Data: (0, 3, 3, 0, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[ 795, 644, 979, 526, 91, 437, 1425, 1545, 619]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (2, 2, 0, 2, 0, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 883, 598, 48, 52, 1294, 21, 423, 1325, 574]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 1, 2, 2, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1125, 267, 548, 1029, 1372, 1473, 732, 353, 422]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 0, 3, 2, 0, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1.41421356,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[ 240, 385, 1099, 1483, 445, 1115, 1177, 1301, 370]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 2, 0, 0, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 299, 368, 166, 1131, 277, 92, 164, 403, 1036]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 1, 2, 0, 0, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 337, 1348, 309, 836, 941, 928, 620, 831, 533]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 3, 0, 1, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 910, 380, 593, 282, 1314, 1313, 546, 226, 495]],\n",
" dtype=int64))\n",
"Predicted: vgood Data: (2, 2, 2, 1, 1, 0) Actual: vgood\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 679, 622, 754, 37, 805, 1218, 1084, 83, 431]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 3, 1, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 350, 586, 357, 872, 803, 1552, 142, 222, 1115]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 3, 2, 2, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1021, 79, 1309, 1326, 1365, 667, 1068, 732, 475]],\n",
" dtype=int64))\n",
"Predicted: acc Data: (1, 1, 1, 2, 0, 2) Actual: acc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 410, 416, 1477, 369, 969, 66, 1360, 1172, 181]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 0, 0, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1020, 656, 747, 456, 1071, 1010, 605, 120, 853]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 1, 1, 1, 2) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 27, 895, 930, 745, 204, 1201, 115, 1400, 1491]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 1, 3, 2, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1388, 1034, 1252, 652, 611, 1353, 1125, 548, 255]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 0, 2, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[1024, 773, 1482, 1171, 901, 1394, 444, 176, 941]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 3, 2, 0, 0, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 2, 84, 1192, 1152, 1374, 159, 1081, 1532, 207]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 3, 1, 1, 2, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1122, 345, 879, 256, 1457, 1042, 701, 1410, 1170]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 2, 1, 2, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 970, 1076, 1426, 512, 1548, 476, 1455, 1265, 1001]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 2, 0, 1, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1062, 529, 400, 433, 763, 1419, 647, 633, 1211]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 1, 3, 2, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 634, 30, 255, 705, 1478, 1038, 1385, 770, 201]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 1, 2, 2, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 201, 770, 150, 923, 112, 1388, 748, 1353, 1308]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 0, 0, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 185, 456, 987, 1322, 692, 1071, 1074, 55, 774]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 3, 3, 1, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1437, 371, 242, 1451, 93, 794, 1193, 498, 332]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 3, 0, 0, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 920, 380, 463, 546, 119, 693, 15, 1122, 1212]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 0, 2, 2, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 214, 326, 20, 353, 573, 1308, 784, 1493, 1385]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 1, 0, 1, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1045, 1297, 1235, 919, 637, 496, 453, 1463, 412]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 2, 2, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 561, 440, 811, 381, 1250, 1133, 82, 259, 411]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 3, 2, 1, 1, 2) Actual: unacc\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 894, 1324, 1021, 761, 992, 643, 830, 823, 1326]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 3, 0, 0, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 645, 90, 1393, 1176, 1424, 731, 1479, 1274, 510]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 0, 1, 2, 1, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 746, 193, 407, 228, 224, 1044, 1243, 1278, 1027]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (1, 0, 0, 2, 1, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1094, 439, 676, 1416, 500, 1375, 746, 193, 819]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 0, 2, 2, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[ 893, 1483, 1234, 126, 1543, 1475, 673, 531, 194]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 0, 2, 1, 1, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 20, 326, 901, 1491, 178, 528, 444, 770, 1385]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 2, 2, 0, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 867, 1407, 927, 915, 1336, 361, 1529, 300, 1035]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 1, 0, 2, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 592, 558, 1525, 923, 1357, 270, 518, 206, 971]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 3, 3, 2, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1188, 364, 580, 29, 626, 1466, 106, 1186, 680]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 3, 1, 2, 0, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[441, 59, 926, 559, 768, 505, 607, 316, 81]], dtype=int64))\n",
"Predicted: good Data: (0, 2, 2, 2, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[ 675, 965, 88, 1179, 57, 246, 1250, 381, 525]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 2, 0, 2, 0) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 476, 952, 1442, 1181, 145, 187, 636, 970, 543]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 2, 2, 2, 1, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1233, 1210, 525, 151, 538, 360, 344, 998, 82]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 0, 0, 0, 0, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 243, 1397, 954, 815, 847, 706, 848, 892, 439]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 3, 3, 2, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1022, 1231, 239, 1430, 51, 522, 26, 339, 1053]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 1, 3, 0, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1448, 1061, 898, 452, 570, 367, 1069, 606, 1394]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 3, 3, 0, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1192, 587, 1522, 1081, 493, 1004, 1186, 917, 334]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 3, 3, 0, 1, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 480, 591, 1206, 884, 666, 984, 669, 767, 1120]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 3, 1, 0, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1078, 903, 564, 951, 1000, 1150, 430, 730, 271]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 3, 1, 0, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1412, 1122, 226, 1088, 1500, 751, 1212, 1457, 1350]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 2, 3, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 897, 743, 984, 236, 467, 480, 1389, 286, 452]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (1, 0, 1, 1, 0, 2) Actual: unacc\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1477, 1205, 1201, 1106, 66, 900, 1003, 1400, 599]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 2, 3, 0, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[699, 858, 301, 537, 889, 917, 170, 334, 499]], dtype=int64))\n",
"Predicted: good Data: (2, 3, 3, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 51, 666, 984, 504, 459, 105, 587, 509, 499]], dtype=int64))\n",
"Predicted: good Data: (2, 2, 1, 2, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 659, 902, 1140, 1304, 398, 678, 712, 373, 319]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 0, 3, 2, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 711, 958, 1099, 1234, 1230, 1418, 1000, 1177, 1115]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 2, 1, 2, 1, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1025, 310, 1427, 1519, 1453, 876, 948, 88, 1360]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 3, 3, 0, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1437, 1425, 493, 587, 1370, 619, 276, 242, 399]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 0, 1, 1, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 785, 870, 930, 1155, 137, 1102, 1491, 223, 573]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 0, 0, 0, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 449, 565, 243, 97, 1196, 633, 848, 38, 420]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 3, 2, 1, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1464, 888, 563, 34, 881, 612, 1082, 232, 761]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (3, 1, 3, 1, 0, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1376, 611, 1252, 1078, 1184, 1012, 1334, 1080, 1245]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 0, 1, 0, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 863, 1405, 815, 780, 845, 1397, 488, 1321, 14]],\n",
" dtype=int64))\n",
"Predicted: acc Data: (1, 2, 3, 2, 0, 2) Actual: acc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 103, 448, 660, 1262, 1490, 972, 534, 184, 1229]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 3, 2, 0, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 867, 50, 1223, 15, 254, 361, 560, 728, 1035]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 2, 0, 0, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1469, 1169, 1209, 719, 1432, 322, 449, 554, 1196]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 3, 2, 1, 0, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1458, 159, 674, 1316, 1242, 260, 292, 2, 788]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (2, 2, 3, 1, 0, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1262, 318, 596, 534, 1236, 279, 583, 741, 1537]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 0, 1, 0, 1, 0) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1072, 682, 1097, 847, 342, 819, 220, 1446, 954]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 1, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 635, 747, 1163, 1538, 536, 1050, 1377, 216, 1359]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 0, 1, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 602, 1211, 97, 647, 1476, 742, 1167, 633, 265]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 3, 3, 2, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1414, 1528, 1365, 93, 1451, 327, 1068, 1191, 364]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 1, 3, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 499, 1111, 367, 1478, 1482, 898, 444, 537, 1394]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 2, 2, 2, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 816, 151, 246, 42, 1250, 198, 908, 1265, 82]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 1, 2, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 744, 671, 547, 1265, 885, 1382, 41, 315, 274]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 3, 0, 0, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[ 11, 321, 96, 730, 594, 1298, 1000, 1512, 165]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 2, 0, 2, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1516, 653, 506, 1185, 582, 5, 1006, 1517, 148]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 1, 2, 1, 2, 0) Actual: unacc\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1214, 113, 1434, 654, 145, 1426, 28, 970, 1113]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 3, 1, 0, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 481, 89, 235, 1046, 976, 702, 347, 492, 966]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 1, 1, 2, 0, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1248, 351, 697, 1391, 224, 1226, 633, 602, 1006]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (1, 0, 1, 1, 2, 2) Actual: unacc\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 962, 245, 1377, 204, 1400, 434, 990, 1020, 747]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 1, 2, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 602, 1211, 1543, 468, 893, 850, 1172, 265, 1025]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 3, 3, 2, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 13, 1068, 717, 79, 302, 93, 242, 1138, 934]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 2, 1, 2, 2, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 209, 246, 690, 712, 1153, 198, 613, 229, 373]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 1, 1, 2, 2, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1516, 1044, 547, 1434, 315, 113, 1517, 672, 1006]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 0, 2, 2, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[213, 194, 445, 407, 259, 228, 531, 82, 978]], dtype=int64))\n",
"Predicted: good Data: (1, 2, 3, 1, 2, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1435, 735, 1470, 512, 236, 1515, 1455, 743, 183]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 2, 0, 1, 0) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 62, 420, 187, 340, 145, 31, 1126, 1113, 1220]],\n",
" dtype=int64))\n",
"Predicted: vgood Data: (1, 1, 0, 2, 0, 0) Actual: vgood\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 676, 1321, 351, 1014, 1378, 1375, 1039, 1248, 274]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 1, 2, 0, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 337, 889, 1394, 537, 748, 941, 230, 461, 176]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 0, 2, 0, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 128, 298, 1031, 176, 230, 632, 149, 773, 1135]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (3, 1, 0, 2, 0, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1357, 270, 317, 598, 21, 868, 1431, 186, 807]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 3, 0, 0, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 716, 1036, 40, 1551, 328, 109, 617, 33, 982]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 0, 2, 1, 2, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 839, 962, 1157, 695, 245, 39, 912, 127, 825]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 1, 2, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1039, 1121, 1549, 1415, 181, 1248, 887, 1360, 647]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 3, 0, 0, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1060, 36, 490, 1169, 244, 1107, 179, 1017, 449]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 3, 1, 2, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1413, 253, 1516, 74, 1187, 1185, 1270, 1350, 624]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (3, 1, 2, 2, 2, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 838, 150, 700, 47, 201, 1493, 101, 1135, 1308]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (2, 3, 2, 1, 0, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1180, 596, 741, 413, 232, 881, 63, 551, 292]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 2, 1, 2, 2, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 712, 814, 1304, 197, 466, 290, 1317, 487, 1307]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 0, 3, 1, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 125, 370, 445, 531, 1115, 343, 94, 222, 727]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 1, 1, 2, 1, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1032, 672, 850, 1254, 1006, 274, 547, 265, 351]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 3, 0, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1015, 100, 199, 1161, 1285, 1002, 773, 824, 1171]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 3, 0, 0, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1436, 843, 179, 102, 983, 852, 490, 1036, 322]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 3, 0, 2, 1, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 627, 1531, 140, 1427, 429, 233, 876, 355, 1439]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 1, 2, 1, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 575, 754, 461, 1030, 1275, 1076, 748, 1154, 622]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 0, 3, 2, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1.41421356,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[ 796, 445, 1115, 1251, 1099, 958, 126, 1230, 240]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 2, 3, 1, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1191, 1451, 1273, 498, 1553, 1194, 1481, 698, 170]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 2, 0, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 920, 1051, 75, 637, 261, 119, 919, 1178, 687]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (2, 3, 1, 1, 1, 0) Actual: unacc\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1457, 1539, 879, 394, 1489, 1190, 392, 751, 797]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 0, 2, 1, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[ 713, 1189, 1385, 444, 412, 773, 20, 72, 634]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 2, 2, 0, 0, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1532, 159, 330, 377, 1080, 260, 1174, 300, 207]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 1, 1, 1, 2, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1452, 885, 1095, 219, 933, 414, 107, 1382, 691]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 3, 3, 0, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1411, 405, 1425, 428, 437, 493, 526, 168, 556]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 2, 0, 0, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 544, 449, 1456, 1017, 133, 97, 188, 763, 1503]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 0, 2, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[ 148, 1517, 1278, 1006, 625, 113, 349, 457, 547]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 0, 0, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[1016, 43, 994, 774, 248, 1071, 863, 639, 954]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 3, 2, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 826, 1251, 1238, 663, 82, 1256, 445, 1139, 1552]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 2, 3, 0, 0, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 911, 1224, 399, 1533, 834, 556, 1151, 1437, 96]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 0, 3, 1, 0, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[1176, 1177, 731, 1475, 1115, 370, 240, 937, 1205]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 2, 0, 2, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 568, 1043, 1211, 468, 116, 710, 776, 1419, 1062]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (2, 0, 1, 2, 1, 0) Actual: unacc\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1416, 1303, 0, 1132, 294, 746, 436, 455, 1033]],\n",
" dtype=int64))\n",
"Predicted: vgood Data: (1, 1, 3, 1, 0, 0) Actual: vgood\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1417, 1158, 135, 1078, 911, 703, 1000, 160, 958]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 2, 0, 0, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1444, 164, 102, 567, 249, 1505, 1131, 1209, 723]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 2, 1, 1, 2, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1108, 608, 659, 712, 686, 613, 487, 721, 1440]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 2, 2, 1, 2, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 965, 352, 654, 1515, 306, 283, 512, 1426, 908]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 1, 1, 0, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 320, 1207, 139, 1155, 1241, 223, 786, 553, 432]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 0, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 55, 762, 311, 1168, 1026, 1300, 729, 1101, 1396]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 2, 3, 0, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 587, 276, 117, 1061, 570, 1481, 509, 1004, 698]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (0, 0, 3, 2, 1, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 94, 445, 796, 228, 1256, 1164, 1124, 958, 1486]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 1, 2, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 434, 1381, 714, 1540, 204, 1134, 177, 115, 916]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 1, 0, 0, 1, 2) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 146, 1362, 1485, 871, 1266, 541, 1168, 46, 311]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 3, 0, 1, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 359, 827, 1291, 738, 919, 920, 546, 495, 1042]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 2, 0, 0, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 111, 62, 1533, 45, 1306, 187, 1255, 160, 549]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 3, 3, 0, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 29, 864, 917, 1450, 334, 1495, 254, 1336, 17]],\n",
" dtype=int64))\n",
"Predicted: vgood Data: (1, 2, 0, 1, 0, 0) Actual: vgood\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1321, 221, 809, 1209, 400, 529, 1378, 322, 387]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 2, 3, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 509, 1009, 570, 1199, 499, 367, 459, 858, 666]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 0, 4, 1, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[ 384, 557, 313, 1264, 1356, 890, 1454, 832, 1334]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 1, 0, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1130, 25, 521, 133, 565, 97, 1019, 602, 988]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 2, 3, 1, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 301, 961, 1184, 611, 609, 583, 170, 652, 330]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 0, 1, 0, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1322, 479, 223, 773, 1074, 1241, 1024, 870, 813]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 0, 0, 1, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1049, 1010, 997, 1020, 524, 986, 990, 284, 799]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 3, 0, 1, 1, 2) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 907, 1305, 288, 1472, 429, 196, 233, 402, 579]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 1, 2, 1, 1) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1360, 382, 373, 1029, 1502, 850, 274, 1127, 267]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 0, 3, 1, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1158, 1298, 451, 430, 1115, 343, 1177, 1000, 510]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 3, 2, 1, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[1217, 390, 1179, 486, 891, 908, 272, 965, 1429]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (3, 1, 2, 2, 0, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 152, 1279, 317, 1358, 1388, 770, 831, 784, 533]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 1, 2, 0, 2, 2) Actual: good\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[1171, 1163, 367, 216, 72, 1482, 1199, 1069, 158]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 3, 0, 0, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 702, 976, 1100, 1145, 200, 1240, 1461, 1281, 1244]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (3, 1, 3, 2, 0, 2) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1.41421356,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[1494, 262, 8, 255, 152, 831, 770, 1227, 1279]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 2, 0, 0, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 403, 736, 529, 1036, 1432, 817, 322, 647, 1173]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 3, 2, 2, 2, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[1187, 806, 955, 1179, 253, 908, 1200, 485, 7]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 2, 1, 0, 1, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 446, 297, 629, 889, 210, 555, 1013, 1178, 261]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (1, 3, 2, 1, 0, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 336, 1260, 794, 949, 2, 477, 1374, 707, 612]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 1, 0, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 479, 1074, 1097, 1028, 664, 1446, 54, 774, 1016]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 1, 2, 0, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 111, 31, 62, 1479, 6, 1346, 1393, 549, 539]],\n",
" dtype=int64))\n",
"Predicted: good Data: (1, 1, 0, 0, 1, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 875, 1072, 954, 249, 1196, 1396, 848, 554, 45]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 0, 2, 0, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1.41421356, 1.41421356, 1.41421356, 1.41421356]]), array([[1130, 549, 426, 510, 878, 1255, 1126, 1239, 1475]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (2, 1, 0, 2, 1, 0) Actual: acc\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 676, 640, 1033, 835, 206, 1525, 1014, 1416, 406]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 0, 2, 1, 0, 1) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 451, 1475, 1346, 1115, 16, 531, 673, 549, 126]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (3, 1, 0, 1, 0, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1. , 1.41421356]]), array([[ 157, 425, 186, 180, 85, 780, 1405, 957, 1182]],\n",
" dtype=int64))\n",
"Predicted: good Data: (0, 0, 1, 2, 2, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 990, 986, 434, 811, 1133, 366, 801, 1504, 407]],\n",
" dtype=int64))\n",
"Predicted: good Data: (3, 3, 3, 0, 0, 2) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 17, 251, 56, 1537, 540, 1395, 858, 170, 851]],\n",
" dtype=int64))\n",
"Predicted: unacc Data: (3, 1, 2, 1, 1, 2) Actual: unacc\n",
"N: (array([[1., 1., 1., 1., 1., 1., 1., 1., 1.]]), array([[ 444, 1333, 831, 141, 748, 941, 1520, 770, 575]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 2, 0, 0, 2, 0) Actual: good\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1. , 1.41421356, 1.41421356]]), array([[ 719, 1500, 1212, 1355, 994, 264, 581, 983, 1128]],\n",
" dtype=int64))\n",
"Predicted: good Data: (2, 0, 0, 2, 0, 0) Actual: unacc\n",
"N: (array([[1. , 1. , 1. , 1. , 1. ,\n",
" 1. , 1.41421356, 1.41421356, 1.41421356]]), array([[ 455, 70, 1225, 1375, 1014, 1416, 494, 1249, 780]],\n",
" dtype=int64))\n"
]
}
],
"source": [
"predicted = model.predict(x_test)\n",
"names = [\"unacc\", \"acc\", \"good\", \"vgood\"]\n",
"\n",
"for x in range(len(predicted)):\n",
" print(\"Predicted: \", names[predicted[x]], \"Data: \", x_test[x], \"Actual: \", names[y_test[x]])\n",
" n = model.kneighbors([x_test[x]], 9, True)\n",
" print(\"N: \", n)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Support Vector Machines (SVM)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['mean radius' 'mean texture' 'mean perimeter' 'mean area'\n",
" 'mean smoothness' 'mean compactness' 'mean concavity'\n",
" 'mean concave points' 'mean symmetry' 'mean fractal dimension'\n",
" 'radius error' 'texture error' 'perimeter error' 'area error'\n",
" 'smoothness error' 'compactness error' 'concavity error'\n",
" 'concave points error' 'symmetry error' 'fractal dimension error'\n",
" 'worst radius' 'worst texture' 'worst perimeter' 'worst area'\n",
" 'worst smoothness' 'worst compactness' 'worst concavity'\n",
" 'worst concave points' 'worst symmetry' 'worst fractal dimension']\n",
"['malignant' 'benign']\n"
]
}
],
"source": [
"import sklearn\n",
"from sklearn import datasets\n",
"from sklearn import svm\n",
"from sklearn import metrics\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"\n",
"cancer = datasets.load_breast_cancer()\n",
"\n",
"print(cancer.feature_names)\n",
"print(cancer.target_names)\n"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1.095e+01 2.135e+01 7.190e+01 ... 1.424e-01 2.964e-01 9.606e-02]\n",
" [1.300e+01 2.182e+01 8.750e+01 ... 2.060e-01 4.378e-01 1.072e-01]\n",
" [1.184e+01 1.894e+01 7.551e+01 ... 6.913e-02 2.535e-01 7.993e-02]\n",
" ...\n",
" [1.187e+01 2.154e+01 7.683e+01 ... 8.750e-02 2.305e-01 9.952e-02]\n",
" [1.094e+01 1.859e+01 7.039e+01 ... 7.887e-02 2.251e-01 7.732e-02]\n",
" [1.049e+01 1.861e+01 6.686e+01 ... 6.528e-02 2.213e-01 7.842e-02]] [0 0 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 0 1 0 1 0 0 0 0 1 1 0 1 0 1 1 1 0 1 1\n",
" 1 0 1 1 0 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 1 1\n",
" 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 1 1 1\n",
" 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0 1 1 1 1 1\n",
" 0 0 0 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 1 1 0 1 1 0 1 0 0 0 0 1 0 1\n",
" 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 0\n",
" 1 0 1 0 1 1 1 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 0 1 0 1 1 1 0 1 0 1 1 1 1 0\n",
" 1 1 0 1 1 0 1 1 1 0 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1\n",
" 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 1 0\n",
" 0 0 0 0 1 0 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 0 1 1 1\n",
" 0 1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 1 0 1 1 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0\n",
" 1 1 1 1 1 1 1 1 0 0 1 0 1 0 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 0 0 0 1 1 1 0 1\n",
" 0 1 1 1 0 0 1 0 1 1 1]\n"
]
}
],
"source": [
"x = cancer.data\n",
"y = cancer.target\n",
"\n",
"x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(x, y, test_size=0.2)\n",
"\n",
"print(x_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 0.9385964912280702\n"
]
}
],
"source": [
"clf = svm.SVC(kernel=\"linear\")\n",
"clf.fit(x_train, y_train)\n",
"\n",
"y_pred = clf.predict(x_test)\n",
"\n",
"acc = metrics.accuracy_score(y_test, y_pred)\n",
"\n",
"print(\"Accuracy: \",acc)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}