KNN算法(监督学习,适用于少量数据)
kNN思想
该算法的思想是:一个样本与数据集中的k个样本最相似,如果这k个样本中的大多数属于某一个类别,则该样本也属于这个类别。
(1)KNN属于惰性学习(lazy-learning)
这是与急切学习(eager learning)相对应的,因为KNN没有显式的学习过程!也就是说没有训练阶段,从上面的例子就可以看出,数据集事先已有了分类和特征值,待收到新样本后直接进行处理。
(2)KNN的计算复杂度较高
我们从上面的例子可以看到,新样本需要与数据集中每个数据进行距离计算,计算复杂度和数据集中的数据数目n成正比,也就是说,KNN的时间复杂度为O(n),因此KNN一般适用于样本数较少的数据集。
(3)k取不同值时,分类结果可能会有显著不同。
k值选择中,如果设置较小的k值,说明在较小的范围内进行训练和统计,误差较大且容易产生过拟合的情况;k值较大时意味着在较大的范围中学习,可以减少学习的误差,但是在其统计范围变大了,说明模型变简单了,容易在预测的时候发生分类错误。
Kmeans思想(无监督,适合大量数据)
基本K-Means算法的思想很简单,(1)事先确定常数K,常数K意味着最终的聚类类别数,(2)首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),(3)将样本点归到最相似的类中,(4)接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。
**
Scaling 的必要性
(1)防止那些相对较大的数值范围(Numeric Ranges)的特征压倒那些相对较小的数值范围的特征。很多分