计算机视觉工程师在面试过程当中主要考察三个内容:图像处理、机器学习、深度学习。然而,各种资料纷繁复杂,或是简单的知识点罗列,或是有着详细数学推导使人望而生畏的大部头。为了督促本身学习,也为了方便后人,决心将常考必会的知识点以通俗易懂的方式设立专栏进行讲解,努力作到长期更新。此专栏不求甚解,只追求应付通常面试。但愿该专栏羽翼渐丰之日,能够为你们免去寻找资料的劳累。每篇介绍一个知识点,没有前后顺序。想了解什么知识点能够私信或者评论,若是重要并且恰巧我也能学会,会尽快更新。最后,每个知识点我会参考不少资料。考虑到简洁性,就不引用了。若有冒犯之处,联系我进行删除或者补加引用。在此先提早致歉了!web
K均值聚类算法
k-means clustering algorithm
K-Means面试
原理
聚类问题:
样本标签未知,总类别数未知
使用聚类算法,发现样本在特征空间中的分布规律
从而把样本们分为不一样的类别算法
过程:
在样本的特征空间中,机器学习
随机选取k个样本,做为聚类质心(中心)
每个样本跟随一个离本身最近的质心,分为k个类
每个类从新计算质心((1,2),(2,1),(3,3)的质心就是(2,2)),获得k个质心。注意:与第一步中真实的样本做为质心不一样,这个时候通过计算获得的质心未必存在。好比上述的例子中并不存在(2,2)。因此此时的质心是虚拟的。
重复进行二、3直至模型拟合。svg
拟合判断标准
u是质心,总共k个
C是一类样本的集合
上述公式的意义就是:
全部样本点与本身的质心的欧氏距离平方的和
显然,该数值越小模型性能越好
便可以做为损失函数
当该损失函数稳定时,判断模型拟合函数
优缺点分析
高斯分布性能好,非凸分布性能很差性能
本身画了个图,方便解释:
能够看出,高斯分布的质心在数据内部
非凸分布的质心甚至和数据没什么重叠
因此分布决定质心存在的位置
质心位置的好坏影响了K-Means的性能学习
超参数K
K做为该算法惟一的超参数,是一把双刃剑
优势:选定K,模型的训练就不须要干预了,很简单
缺点:K的影响很大,K选很差,模型就不好,致使性能不稳定
选取方法:
1.经验。。。
2.手肘法
选若干个k,好比2,3,4,5,6
分别跑一遍K-Means,稳定后,获得5个损失(上面的那个公式)
通常损失先降低快,后降低慢,存在一个拐点,以下图
K=4多是一个不错的选择
由于曲线像手肘,因此叫手肘法。。。
3.ISODATA
该方法的K是动态变化的
如何变化?
该算法有分裂和合并操做
分裂:一类变两类
合并:两类变一类优化
选定初始K0,通常最后的K的范围大概是0.5*K0~2*K0。因此,即便K能够动态变化,K0的选择也得多少靠点谱
设定每类最少的样本数,若是少于最少样本数,这个类不能分裂
计算方差评定一个类中全部样本的分散程度,分散程度大于阈值,而且知足2中的条件,进行分裂
计算两个质心的距离,小于阈值,两个类合并
其他步骤和普通K-Means同样,只是每次聚类结束,要进行分裂和合并操做xml
随机的质心很差对性能影响很大
如图,随机的质心致使了不良的性能
解决方法:K-Means++
该方法和K-Means仅在初始选择质心的时候不一样:
随机选取第1个质心
选第n+1个质心时,计算剩余样本点与前n个质心的距离
离前n个质心距离越远,该样本点被选为第n+1个质心的几率越大
计算量
若是有N个样本,分为K类,迭代T轮
那么计算复杂度是O(NKT)
优势:复杂度是线性的
缺点:即便是线性的,当数据量太大时,计算量依然可观
解决方法:
1.利用三角形原理(elkan K-Means)
AB+BC>AC
若是样本点是X,有两个质心I,J
那么XI+XJ>IJ
换个角度来看
若是XI+XI
联立两个式子
XI
也就是说咱们不须要计算出每个样本点和全部质心的距离
咱们只须要计算样本点和一个质心的距离以及K个质心之间的距离
这样就能够判断样本点属于哪个质心
固然,若是XI+XI
不过,已经减小了不少计算量了
尤为是当模型快要拟合时,上式几乎都是成立的
2.Mini Batch K-Means
通常两种作法:
无放回采样进行K-Means,拟合后继续采样增长数据,再进行K-Means
对n个小样本集进行K-Means,而后取均值做为质心
其他缺点
对噪声、离群点敏感(能够将求平均改成求中位数)
每一个样本只能被归为一类
其他优化
核函数高维映射
特征归一化,好比(1000,1)和(5,2)的距离主要取决了第一个维度,这就很差了,须要归一化
数据预处理,去除一些噪声和离群点
聚类知识庞大,还有不少高级的优秀方法
若是不是专门研究这个方向
了解这些足以
完
欢迎讨论 欢迎吐槽