[机器学习] 看了一下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
相关文章推荐
- cron表达式
- js获取url的参数值
- PrestaShop 网站后台配置(三)
- applicationContext.xml
- oracle 常用命令
- vi命令,替换操作,文本格式转换,在整个文件中替换,在行首尾添加字符串
- Assigning to ‘ d<xxxxDelegate>' from incompatible type ‘xxViewController *const __strong'
- 分页处理
- HTTP协议及请求/响应模型
- eclipse无法删除集群上的数据
- Java用ScriptEngine解析脚本
- dwz dialog中删除或单击某按钮刷新dialog
- struts2拦截器 简单了解
- 汇编helloworld程序
- [Ocean Modelling for Begineers] Ch4. Long Waves in a Channel
- spring-webservice.xml
- Nginx缩略图和Fastdfs整合以及image_filter配置,7点经验结论和5个参考资料
- 简单使用Disruptor
- Oracle数据库、实例、用户、表空间、表之间的关系
- 关于自定义相机照片横竖屏转换问题的解决