{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# KNN Classification\n", "\n", "\n", "KNN最邻近规则,主要应用领域是对未知事物的识别,即判断未知事物属于哪一类,判断思想是,基于欧几里得定理,判断未知事物的特征和哪一类已知事物的的特征最接近;\n", "\n", "K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。\n", "\n", "KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成正比(组合函数)。\n", "\n", "该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。\n", "\n", "K-NN可以说是一种最直接的用来分类未知数据的方法。基本通过下面这张图跟文字说明就可以明白K-NN是干什么的\n", "![knn](images/knn.png)\n", "\n", "简单来说,K-NN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,给新数据归类。\n", "\n", "\n", "算法步骤:\n", "\n", "* step.1---初始化距离为最大值\n", "* step.2---计算未知样本和每个训练样本的距离dist\n", "* step.3---得到目前K个最临近样本中的最大距离maxdist\n", "* step.4---如果dist小于maxdist,则将该训练样本作为K-最近邻样本\n", "* step.5---重复步骤2、3、4,直到未知样本和所有训练样本的距离都算完\n", "* step.6---统计K-最近邻样本中每个类标号出现的次数\n", "* step.7---选择出现频率最大的类标号作为未知样本的类标号" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Program" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import operator\n", "\n", "class KNN(object):\n", "\n", " def __init__(self, k=3):\n", " self.k = k\n", "\n", " def fit(self, x, y):\n", " self.x = x\n", " self.y = y\n", "\n", " def _square_distance(self, v1, v2):\n", " return np.sum(np.square(v1-v2))\n", "\n", " def _vote(self, ys):\n", " ys_unique = np.unique(ys)\n", " vote_dict = {}\n", " for y in ys:\n", " if y not in vote_dict.keys():\n", " vote_dict[y] = 1\n", " else:\n", " vote_dict[y] += 1\n", " sorted_vote_dict = sorted(vote_dict.items(), key=operator.itemgetter(1), reverse=True)\n", " return sorted_vote_dict[0][0]\n", "\n", " def predict(self, x):\n", " y_pred = []\n", " for i in range(len(x)):\n", " dist_arr = [self._square_distance(x[i], self.x[j]) for j in range(len(self.x))]\n", " sorted_index = np.argsort(dist_arr)\n", " top_k_index = sorted_index[:self.k]\n", " y_pred.append(self._vote(ys=self.y[top_k_index]))\n", " return np.array(y_pred)\n", "\n", " def score(self, y_true=None, y_pred=None):\n", " if y_true is None and y_pred is None:\n", " y_pred = self.predict(self.x)\n", " y_true = self.y\n", " score = 0.0\n", " for i in range(len(y_true)):\n", " if y_true[i] == y_pred[i]:\n", " score += 1\n", " score /= len(y_true)\n", " return score" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# data generation\n", "np.random.seed(314)\n", "data_size_1 = 300\n", "x1_1 = np.random.normal(loc=5.0, scale=1.0, size=data_size_1)\n", "x2_1 = np.random.normal(loc=4.0, scale=1.0, size=data_size_1)\n", "y_1 = [0 for _ in range(data_size_1)]\n", "\n", "data_size_2 = 400\n", "x1_2 = np.random.normal(loc=10.0, scale=2.0, size=data_size_2)\n", "x2_2 = np.random.normal(loc=8.0, scale=2.0, size=data_size_2)\n", "y_2 = [1 for _ in range(data_size_2)]\n", "\n", "x1 = np.concatenate((x1_1, x1_2), axis=0)\n", "x2 = np.concatenate((x2_1, x2_2), axis=0)\n", "x = np.hstack((x1.reshape(-1,1), x2.reshape(-1,1)))\n", "y = np.concatenate((y_1, y_2), axis=0)\n", "\n", "data_size_all = data_size_1+data_size_2\n", "shuffled_index = np.random.permutation(data_size_all)\n", "x = x[shuffled_index]\n", "y = y[shuffled_index]\n", "\n", "split_index = int(data_size_all*0.7)\n", "x_train = x[:split_index]\n", "y_train = y[:split_index]\n", "x_test = x[split_index:]\n", "y_test = y[split_index:]\n", "\n", "# visualize data\n", "plt.scatter(x_train[:,0], x_train[:,1], c=y_train, marker='.')\n", "plt.title(\"train data\")\n", "plt.show()\n", "plt.scatter(x_test[:,0], x_test[:,1], c=y_test, marker='.')\n", "plt.title(\"test data\")\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train accuracy: 0.986\n", "test accuracy: 0.957\n" ] } ], "source": [ "# data preprocessing\n", "x_train = (x_train - np.min(x_train, axis=0)) / (np.max(x_train, axis=0) - np.min(x_train, axis=0))\n", "x_test = (x_test - np.min(x_test, axis=0)) / (np.max(x_test, axis=0) - np.min(x_test, axis=0))\n", "\n", "# knn classifier\n", "clf = KNN(k=3)\n", "clf.fit(x_train, y_train)\n", "\n", "print('train accuracy: {:.3}'.format(clf.score()))\n", "\n", "y_test_pred = clf.predict(x_test)\n", "print('test accuracy: {:.3}'.format(clf.score(y_test, y_test_pred)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## sklearn program" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature dimensions: (1797, 64)\n", "Label dimensions: (1797,)\n" ] } ], "source": [ "% matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "from sklearn import datasets, neighbors, linear_model\n", "\n", "# load data\n", "digits = datasets.load_digits()\n", "X_digits = digits.data\n", "y_digits = digits.target\n", "\n", "print(\"Feature dimensions: \", X_digits.shape)\n", "print(\"Label dimensions: \", y_digits.shape)\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot sample images\n", "nplot = 10\n", "fig, axes = plt.subplots(nrows=1, ncols=nplot)\n", "\n", "for i in range(nplot):\n", " img = X_digits[i].reshape(8, 8)\n", " axes[i].imshow(img)\n", " axes[i].set_title(y_digits[i])\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# split train / test data\n", "n_samples = len(X_digits)\n", "n_train = int(0.4 * n_samples)\n", "\n", "X_train = X_digits[:n_train]\n", "y_train = y_digits[:n_train]\n", "X_test = X_digits[n_train:]\n", "y_test = y_digits[n_train:]\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "KNN score: 0.953661\n", "LogisticRegression score: 0.908248\n" ] } ], "source": [ "# do KNN classification\n", "knn = neighbors.KNeighborsClassifier()\n", "logistic = linear_model.LogisticRegression()\n", "\n", "print('KNN score: %f' % knn.fit(X_train, y_train).score(X_test, y_test))\n", "print('LogisticRegression score: %f' % logistic.fit(X_train, y_train).score(X_test, y_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References\n", "* [Digits Classification Exercise](http://scikit-learn.org/stable/auto_examples/exercises/plot_digits_classification_exercise.html)\n", "* [knn算法的原理与实现](https://zhuanlan.zhihu.com/p/36549000)" ] } ], "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.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }