您的位置:首页 > 其它

[机器学习] 看了一下KNN的介绍,那么动手做一个简单的例子

2015-11-06 16:24 519 查看

KNN分类算法

KNN是一种比较容易的分类算法,俗称K邻值算法,是一种挺容易理解监督式算法。

KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离进行分类判断或者回归。

本人也是新手,对这块比较感兴趣,正在慢慢摸索,如果有不对的地方欢迎指出来。

wiki上面的例子:



这个绿色的测试样例应该被分配到蓝色的第一类别还是红色的第二类别?

如果k定义为3,那么绿色的会被分配到红色这类,因为红色的有2个,而蓝色的方块只有一个。

如果K定义为5,那么有3个蓝色,2个红色,则分配为蓝色的那一类。

用python中sklearn包自带iris数据集来进行数据的归类分别。

In [1]: from sklearn import neighbors,datasets
In [2]: iris=datasets.load_iris()
In [3]: X,y=iris.data,iris.target
In [4]: knn=neighbors.KNeighborsClassifier(algorithm='kd_tree')
In [5]: knn.fit(X,y)
Out[5]:
KNeighborsClassifier(algorithm='kd_tree', leaf_size=30, metric='minkowski',
metric_params=None, n_neighbors=5, p=2, weights='uniform')
In [6]: knn.predict([1,3,5,2])
Out[6]: array([1])


KNN的算法有四种选择,’auto’,’ball_tree’, ‘brute’, ‘kd_tree’四种选项。在sklearn的api中有具体的说明.

wiki上面的一段话:

Data reduction is one of the most important problems for work with huge data sets. Usually, only some of the data points are needed for accurate classification. Those data are called the prototypes and can be found as follows:

Select the class-outliers, that is, training data that are classified incorrectly by k-NN (for a given k)

Separate the rest of the data into two sets: (i) the prototypes that are used for the classification decisions and (ii) the absorbed points that can be correctly classified by k-NN using prototypes. The absorbed points can then be removed from the training set.

wiki上面说,数据量大的时候,减少数据能提高分类的准确性。选出离群值,离群值会造成knn的分类不正确。将剩下的数据分成两种数据集,一种是用来做数据的测试集,一种作为训练集。

总结:

还有很多问题,比如多维的数据需要去维的话,应该根据什么来去除维度?数据量大的时候,运行效率的问题?底层的算法是怎么来通过数据来实现的。交叉验证又需要怎么搞?看过coursera上面的机器学习,Andrew ng说过是选取百分之六十为train,20%为cv,20%为test。满满的问题,我也是醉了。

欧几里得距离

KNN wiki

K近邻(KNN)算法详解及Python实现

用Python开始机器学习(4:KNN分类算法)

sklearn的api
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: