算法概述
机器学习算法可以分为三大类:监督学习、无监督学习和强化学习。监督学习可用于一个特定的数据集(训练集)具有某一属性(标签),但是其他数据没有标签或者需要预测标签的情况。无监督学习可用于给定的没有标签的数据集(数据不是预分配好的),目的就是要找出数据间的潜在关系。强化学习位于这两者之间,每次预测都有一定形式的反馈,但是没有精确的标签或者错误信息。下面我们就把机器学习中常用的十几种算法给大家罗列一下,也是我们后续学习的课程目录的主要内容:
聚类算法
今天,我们就从最为常用的聚类分析开始,给大家逐个讲解常用的机器学习算法。所谓聚类算法(clustering analysis)是指将一堆没有标签的数据自动划分成几类的方法,属于无监督学习方法。通俗的讲,就是给你一堆杂七杂八的样本数据把它们分成几个组,组内成员有一定的相似,不同组之间成员有一定的差别。看下面一张图,我们就明白“聚类”具体是做什么的了。
很多人把“聚类”和“分类”搞不清楚,两者所用的算法也是傻傻分不清楚,今天我们就来给大家好好讲讲。我们知道『物以类聚,人以群分』,“聚类分析”和“分类分析(Classification analysis)”不同。两者主要区别在于,分类是将一组数据根据不同的类区分,已经知道有哪些类,也就是数据已经有了类的标签。而聚类是一种事先不知道有多少类,通过算法学习,分出来了一些类别。分类跟聚类也分别是有监督学习和无监督学习的范畴。比如垃圾分类就是分类算法,我们事先已经知道垃圾分为干垃圾、厨余垃圾、可回收垃圾和有害垃圾等;而聚类是事先不知道的,打扫房间时你把杂物都分分类,这是聚类,你事先不知道所有的杂物改分为几类,你可能按照物品的用途分为3类,也可以按照物品大小分5类,这都是有可能的。聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来。总而言之,我们要清楚何为“聚类”,不要将其与“分类”概念搞混淆。
聚类的基本思想
基本设定:给定一个有N个对象的数据集,构造数据的K个簇,k<=n,并且满足下列条件:
基本思想:对于给定的类别K,首先给定初始的划分,通过迭代改变样本和簇的隶属关系,使得每一次改进之后的划分方案都较前一次好。
最终目标:根据样本之间的距离或者说是相似性(亲疏性),把越相似、差异越小的样本聚成一类(簇),最后形成多个簇,使同一个簇内部的样本相似度高,不同簇之间差异性高。
K-Means算法
01
基本概念
要学习聚类算法,我们就从最经典的开始。K-means算法,也被称为K-平均或K-均值,是一种广泛使用的聚类算法,或者成为其他聚类算法的基础,它是基于点与点距离的相似度来计算最佳类别归属。我们先讲几个相关概念:
02
算法流程
这个过程看似复杂难以理解,其实看得多了就容易明白,具体流程的演示如下图所示。
03
算法实例
在开始实例演示之前,我们说点题外话,那就是编程语言的问题。关于机器学习,有几种推荐的语言可以选择,有些人说Python,有些人说R,当然两种语言都可以。对于我们来说,因为我们不着重流程开发,而重点是数据解读和操作,所以还是用R语言多一点。不过,如果大家精力充足,建议Python和R都可以去学习一下的。
在这里,为了体现K-means算法的特点,我们用一个比较经典的数据来进行展示。简单介绍一下数据,这个数据是美国50个州的犯罪率统计,总共50行,4列。当然,对我们来说,这个数据只是一个演示,你也可以用自己的基因表达数据,或者甲基化数据,或者突变位点数据,或者检测到的各种数值。我们来看下,R代码如下所示,我们通过kmeans()函数去进行聚类分析,选定的初始k值是2,然后用factoextra包中的函数fviz_cluster()去进行可视化。结果如下:
当然,正如我们前面在介绍K-means聚类的时候所说的,k值是可以自己调整的,我们把k调整为3,4,5都可以,其聚类的结果就是我们定义的簇数。结果如下所示:
关于Kmeans聚类的算法实现,我们讲到这里,最关键的:文末联系客服领取代码。
04
算法总结
我们来总结一下Kmeans算法的优缺点,以及我们在使用中的注意事项。
优点:
缺点:
使用前注意事项:
本章小结
本节内容比较多,我们讲解了机器学习的算法概论,特别是聚类算法,其中着重解读和演示了Kmeans算法。Kmeans算法在我们的日常科研工作中用处颇多,举个实际的例子,我们检测了100个肿瘤病人的突变位点,想要用突变位点对病人进行分子分型,比如高危组、中危组、低危组等,这个时候不妨试试看K-means聚类哦。好了,关于Kmeans聚类,我们讲到这里,赶紧领取代码,拿着自己的数据做起来吧。