机器学习算法——KNN
来源:互联网 发布:vr unity3d 比ue4清晰 编辑:程序博客网 时间:2024/06/18 13:16
Introduction
学完python基本用法、numpy、pandas等数据分析库、机器学习应用的基本流程,kaggle竞赛的简单实践之后,下一步计划系统学学机器学习算法。一方面,理解算法中超参数的含义和理解他们是如何影响模型性能,在模型调优的过程中可以手动调节;另一方面,理解每种算法的应用范围和他们的优缺点等,在选择算法时不再盲目。同时,加深自己理论推导能力和抽象概念理解能力,进一步,提高编程算法实现能力等。最终,面试过程中底气更足一点吧。
结合之前的内容,先从最陌生的看k近邻算法开始。
Method
k近邻算法即K-Nearest Neighbor algorithm,简称KNN算法,是一种有监督算法而非k-means,可以进行分类和回归。
优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高
适应数据范围:数值型和标称型
什么是KNN
基本思想:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居),这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
- 如果K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
- 如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。
于此我们看到,当无法判定当前待分类点是从属于已知分类中的哪一类时,我们可以依据统计学的理论看它所处的位置特征,衡量它周围邻居的权重,而把它归为(或分配)到权重更大的那一类。这就是K近邻算法的核心思想。
k近邻模型三要素
距离度量
参考:从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
总结:各种“距离”的应用场景简单概括为:
空间:欧氏距离;
路径:曼哈顿距离;
国际象棋国王:切比雪夫距离。
以上三种的统一形式:闵可夫斯基距离。
加权:标准化欧氏距离;
排除量纲和依存:马氏距离;
向量差距:夹角余弦;
编码差别:汉明距离;
集合近似度:杰卡德类似系数与距离;
相关:相关系数与相关距离。
注意点:由不同距离度量所确定的最近邻是不同的。
两实例点的距离是两个实例点相似程度的反映。
k值的选择(超参数)
- (近朱者赤近墨者黑)如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,因为邻近的实例点如果是噪声,预测就会出错。换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
- (墙头草,风往哪边刮就往哪边倒)如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。
- K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。
K近邻算法的实现:KD树
KNeighborsRegressor和RadiusNeighborsRegressor
X = [[0], [1], [2], [3]]y = [0, 0, 1, 1]from sklearn.neighbors import KNeighborsClassifierneigh = KNeighborsClassifier(n_neighbors=3)neigh.fit(X, y) KNeighborsClassifier(...)print(neigh.predict([[1.1]]))[0]print(neigh.predict_proba([[0.9]]))[[ 0.66666667 0.33333333]]
- 机器学习算法——KNN
- 机器学习实战——kNN算法
- 机器学习之一——kNN算法
- 机器学习算法——KNN
- 机器学习算法——KNN
- 机器学习实战——kNN算法
- 机器学习实战—实施kNN算法
- 机器学习实战—笔记-kNN算法
- 机器学习—KNN
- 《机器学习》 KNN算法
- 机器学习:KNN算法
- 机器学习-KNN 算法
- 【机器学习】kNN算法
- 机器学习 -- kNN算法
- 机器学习---kNN算法
- 机器学习--kNN算法
- 机器学习--KNN算法
- 机器学习算法-kNN
- CI框架多文件上传以及优化上传方法
- BOM基础三
- CentOS7下实现多系统网络yum服务器
- Hashmap和Hashtable比较
- 9.1 为什么要使用概率
- 机器学习算法——KNN
- js中字符串常用方法
- spring boot maven多模块项目编写单元测试
- 命令行选项解析函数(C语言):getopt()、getopt_long()和getopt_long_only
- JAVA的一些细节备忘
- java 经典死锁----纯手写,如有雷同纯属巧合
- abstract类和接口
- PMP第十一章 项目风险管理
- fabric源码解析10——文档翻译之Architecture