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

KNN分类算法

KNN是一种比较容易的分类算法,俗称K邻值算法,是一种挺容易理解监督式算法。
KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离进行分类判断或者回归。
本人也是新手,对这块比较感兴趣,正在慢慢摸索,如果有不对的地方欢迎指出来。


wiki上面的例子:

KNN分类的demo

这个绿色的测试样例应该被分配到蓝色的第一类别还是红色的第二类别?
如果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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KNN (k-Nearest Neighbors)算法是一种基于实例的学习(instance-based learning)算法,它是一种非参数化算法,因为它不会对数据出任何假设,而是通过在训练集中查找最近邻居来对新的数据点进行分类或回归。 在KNN算法中,k是一个整数,代表要查找的最近邻居的数量。给定一个未知数据点,KNN算法会在已知数据点中查找k个最近邻居(可以使用欧几里得距离、曼哈顿距离、余弦相似度等度量方法),并将这些邻居的标签或值(对于分类或回归问题)进行汇总,最终将该未知数据点分类或预测为具有最多邻居的标签或值。这种算法的基本思想是:如果一个样本在特征空间中的k个邻居大多数属于某一类别,则该样本也属于这个类别。 KNN算法的优点是简单易懂、易于实现,适用于各种类型的数据、多分类问题和回归问题。但它也有一些缺点,比如当训练集中的数据量很大时,查询新的数据点的时间可能会很耗时;此外,对于高维数据,由于维度灾难的影响,KNN算法的性能可能会下降。 在实践中,我们可以使用一些技巧来优化KNN算法的性能,如使用KD树、球树等数据结构来加速搜索;对特征进行降维或特征选择等技巧来缓解维度灾难;对数据进行归一化或标准化等处理来提高算法的鲁棒性和准确性。 总之,KNN算法虽然简单,但在实际应用中却具有广泛的适用性和优越的性能,是机器学习领域中不可或缺的一种算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值