{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import numpy as np\n", "import sklearn\n", "from sklearn import svm, datasets, metrics\n", "from sklearn.neighbors import KNeighborsClassifier\n", "import pickle" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Features: ['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", "labels: ['malignant' 'benign']\n", "data: [[1.799e+01 1.038e+01 1.228e+02 ... 2.654e-01 4.601e-01 1.189e-01]\n", " [2.057e+01 1.777e+01 1.329e+02 ... 1.860e-01 2.750e-01 8.902e-02]\n", " [1.969e+01 2.125e+01 1.300e+02 ... 2.430e-01 3.613e-01 8.758e-02]\n", " ...\n", " [1.660e+01 2.808e+01 1.083e+02 ... 1.418e-01 2.218e-01 7.820e-02]\n", " [2.060e+01 2.933e+01 1.401e+02 ... 2.650e-01 4.087e-01 1.240e-01]\n", " [7.760e+00 2.454e+01 4.792e+01 ... 0.000e+00 2.871e-01 7.039e-02]]\n", "target: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 0\n", " 1 0 1 0 0 1 1 1 0 0 1 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1\n", " 1 1 1 1 1 1 0 0 0 1 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1\n", " 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 0 0 1 0\n", " 1 0 1 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 0 1 1\n", " 1 0 1 1 1 1 1 0 0 1 1 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1\n", " 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1\n", " 1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0\n", " 0 1 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1\n", " 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 1 1\n", " 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1\n", " 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 0\n", " 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", " 1 1 1 1 1 1 1 0 0 0 0 0 0 1]\n" ] } ], "source": [ "cancer = datasets.load_breast_cancer()\n", "print(\"Features:\", cancer.feature_names)\n", "print(\"labels:\", cancer.target_names)\n", "print(\"data:\", cancer.data)\n", "print(\"target:\", cancer.target)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1.160e+01 2.449e+01 7.423e+01 4.172e+02 7.474e-02 5.688e-02 1.974e-02\n", " 1.313e-02 1.935e-01 5.878e-02 2.512e-01 1.786e+00 1.961e+00 1.821e+01\n", " 6.122e-03 2.337e-02 1.596e-02 6.998e-03 3.194e-02 2.211e-03 1.244e+01\n", " 3.162e+01 8.139e+01 4.765e+02 9.545e-02 1.361e-01 7.239e-02 4.815e-02\n", " 3.244e-01 6.745e-02]\n", " [1.288e+01 1.822e+01 8.445e+01 4.931e+02 1.218e-01 1.661e-01 4.825e-02\n", " 5.303e-02 1.709e-01 7.253e-02 4.426e-01 1.169e+00 3.176e+00 3.437e+01\n", " 5.273e-03 2.329e-02 1.405e-02 1.244e-02 1.816e-02 3.299e-03 1.505e+01\n", " 2.437e+01 9.931e+01 6.747e+02 1.456e-01 2.961e-01 1.246e-01 1.096e-01\n", " 2.582e-01 8.893e-02]\n", " [1.086e+01 2.148e+01 6.851e+01 3.605e+02 7.431e-02 4.227e-02 0.000e+00\n", " 0.000e+00 1.661e-01 5.948e-02 3.163e-01 1.304e+00 2.115e+00 2.067e+01\n", " 9.579e-03 1.104e-02 0.000e+00 0.000e+00 3.004e-02 2.228e-03 1.166e+01\n", " 2.477e+01 7.408e+01 4.123e+02 1.001e-01 7.348e-02 0.000e+00 0.000e+00\n", " 2.458e-01 6.592e-02]\n", " [2.020e+01 2.683e+01 1.337e+02 1.234e+03 9.905e-02 1.669e-01 1.641e-01\n", " 1.265e-01 1.875e-01 6.020e-02 9.761e-01 1.892e+00 7.128e+00 1.036e+02\n", " 8.439e-03 4.674e-02 5.904e-02 2.536e-02 3.710e-02 4.286e-03 2.419e+01\n", " 3.381e+01 1.600e+02 1.671e+03 1.278e-01 3.416e-01 3.703e-01 2.152e-01\n", " 3.271e-01 7.632e-02]\n", " [2.047e+01 2.067e+01 1.347e+02 1.299e+03 9.156e-02 1.313e-01 1.523e-01\n", " 1.015e-01 2.166e-01 5.419e-02 8.336e-01 1.736e+00 5.168e+00 1.004e+02\n", " 4.938e-03 3.089e-02 4.093e-02 1.699e-02 2.816e-02 2.719e-03 2.323e+01\n", " 2.715e+01 1.520e+02 1.645e+03 1.097e-01 2.534e-01 3.092e-01 1.613e-01\n", " 3.220e-01 6.386e-02]]\n" ] } ], "source": [ "x = cancer.data\n", "y = cancer.target\n", "\n", "# Split into train, dev, test sets with 90 / 5 / 5 split\n", "x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(\n", " x,y,test_size=0.1)\n", "\n", "x_test, x_dev, y_test, y_dev = sklearn.model_selection.train_test_split(\n", " x_test, y_test, test_size=0.5)\n", "\n", "print(x_train[:5])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.9285714285714286\n" ] } ], "source": [ "classes = cancer.target_names\n", "clf = svm.SVC(kernel='linear', gamma='scale')\n", "clf.fit(x_train, y_train)\n", "\n", "y_pred = clf.predict(x_test)\n", "acc = metrics.accuracy_score(y_test, y_pred)\n", "print(acc)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.9310344827586207\n", "0.9655172413793104\n", "0.9310344827586207\n", "0.896551724137931\n", "0.896551724137931\n", "0.896551724137931\n", "0.896551724137931\n", "0.896551724137931\n", "0.9310344827586207\n", "0.9310344827586207\n", "0.6896551724137931\n", "0.896551724137931\n", "0.9310344827586207\n", "0.896551724137931\n", "0.9310344827586207\n", "0.9310344827586207\n", "0.9310344827586207\n", "0.9655172413793104\n", "0.9655172413793104\n", "0.9655172413793104\n", "0.6896551724137931\n", "0.6896551724137931\n", "0.6896551724137931\n", "0.4827586206896552\n", "0.41379310344827586\n", "0.41379310344827586\n", "0.41379310344827586\n", "0.41379310344827586\n", "0.41379310344827586\n", "0.41379310344827586\n" ] } ], "source": [ "# Tune parameters of kernel, C, gamma \n", "# Note: use logarithmic scale random values\n", "kernels = ['linear','rbf','sigmoid']\n", "C_values = [0.001, 0.01, 0.1, 1, 5, 25, 50, 100, 500, 1000]\n", "\n", "\n", "\n", "best = 0\n", "for kernel in kernels:\n", " for C in C_values:\n", " classes = cancer.target_names\n", " clf = svm.SVC(kernel=kernel, C=C, gamma='scale')\n", " clf.fit(x_train, y_train)\n", " y_pred = clf.predict(x_dev)\n", " acc = metrics.accuracy_score(y_dev, y_pred)\n", " print(acc)\n", " if acc > best:\n", " best = acc\n", " with open('cancerModel.pickle','wb') as f:\n", " pickle.dump(clf,f)\n", " \n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.9285714285714286\n" ] } ], "source": [ "pickle_in = open('cancerModel.pickle','rb')\n", "clf = pickle.load(pickle_in)\n", "y_pred = clf.predict(x_test)\n", "acc = metrics.accuracy_score(y_test, y_pred)\n", "print(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 }