标签:
以上为中继点老师课堂笔记,请注意版权
KNN 思路
kNN算法又称为k近邻分类(k-nearest neighbor classification)算法。
最简单平凡的分类器就是死记硬背式的分类器,记住所有的训练数据,对于新的数据则直接和训练数据匹配,如果存在相近属性的训练数据,则直接用它的分类来作为新数据的分类。这种方式有一个明显的缺点,那就是很可能一个新数据与训练数据属性值差异很大时,无法找到完全匹配的训练记录。
kNN算法则是从训练集中找到和新数据最接近的k条记录,然后根据他们的主要分类来决定新数据的类别。该算法涉及3个主要因素:训练集、距离或相似的衡量、k的大小。
通常最近邻居分类器适用于特征与目标类之间的关系为比较复杂的数字类型,或者说二者关系难以理解,但是相似类间特征总是相似。kNN算法:
kNN算法的指导思想是“近朱者赤,近墨者黑”,根据与待分类数据集中的最近的k个训练集中的分类标签来对决定其类别
以判断用户的喜欢为例,基于余弦相似度的计算方法就是把用户的喜好作为n-维坐标系中的一个点,通过连接这个点与坐标系的原点构成一条直线(向量),两个用户之间的相似度值就是两条直线(向量)间夹角的余弦值。因为连接代表用户评分的点与原点的直线都会相交于原点,夹角越小代表两个用户越相似,夹角越大代表两个用户的相似度越小。
余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感。因此没法衡量每个维数值的差异,会导致这样一个情况:比如用户对内容评分,5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得出的结果是0.98,两者极为相似,但从评分上看X似乎不喜欢这2个内容,而Y比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性,就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如X和Y的评分均值都是3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8, 相似度为负值并且差异不小,但显然更加符合现实
根据欧氏距离和余弦相似度各自的计算方式和衡量特征,分别适用于不同的数据分析模型:
投票决定:少数服从多数,近邻中哪个类别的点最多就分为该类。
加权投票法:根据距离的远近,对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)
很明显k的选择对最终结果大有影响,这就是机器学习中几点的bias与variance取舍问题,鱼和熊掌不可兼得。如果k很大,那么可以减少干扰数据的影响,但是此时就导致了系统性偏差,比如如果取k为总的训练数据数,那么每次投票肯定都是训练数据中多的类别胜利。显然训练数据的系统性偏差会影响结果。而如果k=1,那么某个干扰数据或者异常数据会影响最终结果的准确性,所以我们始终是在bias与variance直接取舍。
投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。
有了计算距离的方法,也有了k的取值,是否我们就可以开始分类了?简单考虑一下,比如我们度量各个特征的时候刻度单位不同,那么会带来什么问题。特征A取值是从0~1,另一个特征B则是0~10000,这里特征B的1000,不代表是特征A 的1的1000倍,因此我们要对数据进行标准化。传统的是采用最小最大值标准化方法:
数据已经标准化了是否就ok了?不是的,欧几里德距离只能用于数字,对于nominal变量(分类变量),无法处理。这个时候我们可以通过dummy(哑元)来处理。比如:
那如果不止2类,是多个呢?一种方法就是我创建(n-1)个哑元变量,还有一种就是如果你的分类变量是有顺序的,而且每一级间的间隔是固定的那你可以用比如1,2,3来代表冷,温暖,热。不过这时一定要注意这个间隔的问题,比如穷人,中产,富人,显然中产和穷人,富人和中产的差距就不是一样的。
乳腺癌的早期检测来源对乳腺异常包块的检测。如果存在包块,那么会继续乳腺穿刺取样,之后利用显微镜下的分析来判断是良性还是恶性。如果我们可以用机器学习来完成癌症细胞的自动识别则我们可以为健康系统带来大大好处,比如检测效率的提升。同时自动的筛选系统可以大大减少人工的主观性。
使用Breast Cancer Wisconsin Diagnostic数据集:
标签:
原文地址:http://blog.csdn.net/boss111/article/details/51107405