算法系列——KNN分类"/>
python机器学习手写算法系列——KNN分类
现实当中,富人的邻居可能也是富人,穷人的邻居可能也是穷人。如果你的邻居都是富人,那么,你很可能也是富人。基于此,我们有了KNN算法。KNN的全名是K-Nearest Neighbors,即K个最近的邻居。他通过距离被预测点最近的K个邻居来预测被预测点。
如下图所示,绿色的圆形是被预测点。它周围有红色三角和蓝色正方形。如果我们取K为3,那么,它的三个邻居是两个红色三角和一个蓝色正方形。因为它的邻居里面,最多的就是红色三角,所以我们预测它也是红色三角。
(图一)
首先,我们载入数据。这里我们以iris数据集为例。
import math
from collections import Counter
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
# Create color maps
cmap_light = ListedColormap(['orange', 'cyan', 'cornflowerblue'])
cmap_bold = ListedColormap(['darkorange', 'c', 'darkblue'])
from sklearn import neighbors, datasetsn_neighbors = 15# import some data to play with
iris = datasets.load_iris()# we only take the first two features. We could avoid this ugly
# slicing by using a two-dim dataset
X = iris.data[:, :2]
y = iris.target
接着,我们写一个KNNClassifier类。这里,最关键的参数当然是k,或者叫n_neighbors。接着,我们写一个fit方法。这个方法除了“记住”数据外,不做任何事情。因为这个特点,我们叫KNN为lazy algorithm。在预测方法predict_one里,我们首先计算被预测点到数据集中每个点的距离,我们得到了 d i s t a n c e _ a r r a y distance\_array distance_array。我们用numpy里面的argsort函数,把这些距离从小到大排序,并得到他们的坐标。我们取前k个坐标,得到相应的标签 n e i g h b o u r _ l a b e l s neighbour\_labels nei
更多推荐
python机器学习手写算法系列——KNN分类
发布评论