【数据科学】kNN算法笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011240016/article/details/84562530

kNN的主要思想:根据某个对象的属性值找到相似的对象们,让对象们一起投票决定这个对象属于哪一类。

这里银行的信息是,根据属性值找到的对象们,并不是来源于一个类,如果是一个类的话,直接将这个待分类对象归类为此类就完成了。

既然是投票,就意味着可能是平票,如果平了的话,就随便选择一个类作为此类的分类即可。

《数据科学实战》这本书里举的例子很贴近我们的生活,引用过来,作为参考:

假设一个人会对自己看过的每部电影都打上“好看”或者“不好看”的标签,现在根据这些历史标签信息,如果给定一部新的电影叫作《狂野的数据》, 我们可以用 k 近邻的方法预测此人是否会觉得这部电影好看。方法首先是要确定电影的属性值,包括电影的长度、风格、性爱场景数、奥斯卡最佳演员的个数以及电影的拍摄预算等。根据这些属性,我们可以找到与《狂野的数据》最相似的 k 部电影,并记录下这 k 部电影的标签信息。如果这些电影总体来看包括更多的是“好看”的标签(这个过程,叫作“投票” ) ,那么我们也自然会预测《狂野的数据》这部电影会得到此人的青睐。

这个例子里,引出了kNNk的含义,根据属性找到最相似的k个。

其实这个比较好理解,有投票过程,就意味着要确定投票人数,这个数字就是k啦。

而现在的问题是,如何根据多种标签寻找到最相似的k部电影。

实际上,kNN需要解决两个核心问题:

  • 如何根据属性来定义个体之间的相似性
  • 如何确定k的值

kNN的详细步骤

  • 确定相似性定义:距离
  • 将数据分割为训练数据 + 测试数据
  • 选择模型评价标准
  • 选择不同的k值,应用kNN模型,看模型效果(这是选择k的过程)
  • 基于模型评价标准,选出最优的k值
  • 确定k后,测试模型表现(用测试数据)

针对kNN的两个核心问题,第一,相似性衡量的距离是开始就选定好的,k的值是根据多个k值进行对比得出的。

但是,我们并不能穷尽k的选择,只是在有限次的选择中找到最优的。

另外,kNN模型,是无需训练的,只有一个k值是参数,模型本身不包含参数,只有规则。

相似性度量:距离

距离的测量方法选择,有点具体问题具体分析的味道。

另外,还要注意到数据的量纲计算导致的差别,尽量让不同特征的数值在同一水平上,不然,一个特征数值在十万级别,一个在百级别,那距离的度量,就会被这个大万级别的带偏了。比如:

  • 250000
  • 500

为了使其大致进入同一个量级,可以用250千代替250000,250和500就在一个量级了。

距离的度量选择很多,常见的有:

  • 欧式距离
  • 余弦相似度
  • Jaccard距离:衡量两个集合的相似度
  • Mahalanobis 距离
  • Hamming距离
  • Manhattan距离

这里我都没有放公式,且距离还有很多其他选择,比较好的实际操作方式是,根据问题定义,去查别人是怎么选择的距离。

上面这些距离度量是很整洁的,但是现实数据是多样的,如果需要判别的特征值取值类型都不同,比如有连续值,有分类值,上面这些距离衡量就不能直接用,我们就得变通,甚至是定义自己的距离衡量指标。

一些名词辨析

敏感度 && 特异性:上帝的归上帝,凯撒的归凯撒。

举例子:

敏感度(sensitivity):所有患病的人被诊断为患病,也叫真阳性率(true positive rate),也叫召回率(recall)
特异性(specificity):所有未患病的人被诊断为未患病,也叫真阴性率

END.

猜你喜欢

转载自blog.csdn.net/u011240016/article/details/84562530