K-均值算法(K-Means)属于无监督学习、聚类算法。即将无标签的数据集进行分类,并且无训练过程(监督学习的数据集才存在训练一说)等,又可理解为自动分类器
。
本文对于原作者的代码进行了一点修改以符合当今情况。
K-均值算法(K-Means)的实现
这个算法不算是很难理解,实际上很容易理解,在此就不多废话了。
简单说说等下代码实现的思想原理以及相关的需要注意的一些东西。关于这个实现的过程中,会想从前一样,使用自制的数据集样本,在其中会选择两个作为最初的中心点(亦可通过洗牌后进行选择),然后将剩下的数据集与这两个中心点进行计算,通过得出的距离大小使得离得哪个中心点近就归属于那个中心点的分类处(非0即1的分类),接着会从这些已经各就各位的点中得出平均点。我们会设置一个最大迭代次数以及一个固定公差数(迭代次数在此不够严谨,仅仅起到学习认知的作用),关于这个公差数是起到一个监督的作用,若是在未得出平均点之前的数据点与中心点之间的公差数值大于固定公差数阈值,就说明优化失败了,之后这次的优化就忽略,直接进行下一次的优化过程(得出最佳平均点就是一次又一次优化的过程,最终目标就是得出最佳的平均点,最具代表性的点)。最终我们会通过数据可视化来进行图表结果的展示。
以下是实现代码。
实现代码
|
|
下面是训练过程以及图表展示相关的代码:
|
|
完整代码
|
|
铺助理解链接:
展示结果
这样在这里就完成了实现的过程。这个算法真的不怎么难,至少相较于上次的
SVM
来说。
项目应用
sklearn的K-Means模型训练
这次用到的数据是再熟悉不过的titanic
数据集,就是预测生死的那个kaggle
入门级比赛的那个,哈哈。
数据地址:https://pythonprogramming.net/static/downloads/machine-learning-data/titanic.xls
在利用这个数据时,先将数据集进行简单的数据预处理,以及将非数值数据进行简单的数值转换(即将非数值型数值转换为数值型数据),之后代入现成的sklearn
对应的K-Means模型进行训练,最后得出预测准确性。
下面是代码实现部分:
|
|
铺助理解链接:
下面是得出的结果:
由于数据简单的预处理了一下,所以准确性在0.3~0.7之间。
sklearn的K-Means模型自制数据集训练
这是用自制的数据集进行的模型训练,最后将结果进行图表展示,可以更好的理解这个在sklearn
模块中的现成K-Means
模型的运作情况。
以下是相关的代码实现:
|
|
结果图表展示:
还是不错的,有助于理解学习。
用手动实现的K-Means算法训练数据集
在此将要使用上面实现的K-Means算法来训练上面的titanic
数据集,将会输出预测准确性。
下面是实现的代码:
|
|
只是上面代码的连接罢了,代码本身也不难理解。
下面是输出的预测准确性:
额…效果不咋地…
这样一来这篇文章可以接近尾声了…不懂的地方可以去对应的课程去看看,还有的是,多看书,利用好搜索引擎。