【机器学习】K近邻算法、k-mean算法

k-NN法

最近看一些面试试题,发现很多以前学习过的知识点几乎都很难系统的描述出来,故打算从今往后,学习过的知识点好好整理到CSDN上。

K近邻算法简单,直观,给定训练集,输入一个实例样本,计算样本与训练集样本的距离,选取离样本最为接近的K个实例,采取一定的判别准则(例如:多数投票表决),判定样本为某类。

K近邻模型三大要素

  • 距离度量
  • k值的选择
  • 判别准则

距离度量

k近邻模型的特征空间一般为n维的实数向量空间 R n R^n Rn,一般使用欧式距离,下面给出一些常见的距离公式:
L p L_p Lp距离
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p L_{p}(x_{i},x_{j})=(\sum_{l=1}^{n}\left | x_{i}^{(l)}-x_{j}^{(l)} \right |^p)^\frac{1}{p} Lp(xi,xj)=(l=1nxi(l)xj(l)p)p1
当P=2时,称为欧式距离:

L 2 ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ 2 ) 1 2 L_{2}(x_{i},x_{j})=(\sum_{l=1}^{n}\left | x_{i}^{(l)}-x_{j}^{(l)} \right |^2)^\frac{1}{2} L2(xi,xj)=(l=1nxi(l)xj(l)2)21
当P=1时,称为曼哈顿距离

K值的选择

如果k值选择较小,意味着模型容量较高,泛化误差较大,训练集拟合效果好;反过来,如果k值选择较大,则训练集拟合效果差,泛化能力强,使得模型更为简单,一般来说,k值的选择可以使用交叉验证来得到一个较优的值。

判别准则

判别准则一般为多数表决,即由输入实例的k个邻近的训练实例的多数类来决定输入实例的类别。

k-mean算法

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。
 如果用数据表达式表示,假设簇划分为 ( C 1 , C 2 , . . . C k ) (C_1,C_2,...C_k) (C1,C2,...Ck),则我们的目标是最小化平方误差E
  E = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 2 E = \sum_{i=1}^k\sum\limits_{x \in C_i} ||x-\mu_i||_2^2 E=i=1kxCixμi22
 其中 μ i μ_i μi是簇 C i C_i Ci的均值向量,有时也称为质心,表达式为:
  μ i = 1 ∣ ∣ C i ∣ ∣ ∑ x ∈ C i x μ_i=\frac{1}{ || C_i ||}\sum_{x \in C_i}x μi=Ci1xCix
 如果我们想直接求上式的最小值并不容易,这是一个NP难的问题,因此只能采用启发式的迭代方法。
 K-Means采用的启发式方式很简单,用下面一组图就可以形象的描述。
 在这里插入图片描述
上图a表达了初始的数据集,假设k=2。在图b中,我们随机选择了两个k类所对应的类别质心,即图中的红色质心和蓝色质心,然后分别求样本中所有点到这两个质心的距离,并标记每个样本的类别为和该样本距离最小的质心的类别,如图c所示,经过计算样本和红色质心和蓝色质心的距离,我们得到了所有样本点的第一轮迭代后的类别。此时我们对我们当前标记为红色和蓝色的点分别求其新的质心,如图4所示,新的红色质心和蓝色质心的位置已经发生了变动。图e和图f重复了我们在图c和图d的过程,即将所有点的类别标记为距离最近的质心的类别并求新的质心。最终我们得到的两个类别如图f。

当然在实际K-Mean算法中,我们一般会多次运行图c和图d,才能达到最终的比较优的类别。

传统K-mean的算法流程如下:

输入:训练集D={(x_1,y_1),(x_2,y_2),...}
输出:k个聚类簇
初始化k个聚类中心
while  聚类簇不再改变 or 达到一定迭代次数或其他某些条件:
	for 每个样本点 :
		for 每个聚类中心:
			计算样本点与聚类中心距离
		将样本归为最近的样本中心
	重新计算聚类中心
输出聚类中心

k-mean算法小结:

K-Means是个简单实用的聚类算法,这里对K-Means的优缺点做一个总结。

K-Means的主要优点有:

  • 1)原理比较简单,实现也是很容易,收敛速度快。

  • 2)聚类效果较优。

  • 3)算法的可解释度比较强。

  • 4)主要需要调参的参数仅仅是簇数k。

K-Means的主要缺点有:

  • 1)K值的选取不好把握

  • 2)对于不是凸的数据集比较难收敛

  • 3)如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。

  • 4) 采用迭代方法,得到的结果只是局部最优。

  • 5) 对噪音和异常点比较的敏感。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值