K-means 聚类学习

对着背影说爱祢 提交于 2019-12-03 10:32:21

没有监督标签,只有x特征值,没有y,没有办法去预测,没有办法证明你做的对错,这样的数据集,我们能做的是什么呢?就是非监督机器学习。常见的算法就是聚类或者降维。聚类做的是什么?就是挖掘数据集中的规律的存在,通过把相似的数据归类,帮助我们探索数据集里的样本如何划分,比如可以将用户分群,不同的营销策略。聚类里包含的算法也是非常多。

 

聚类的基本思路是:物以类聚,人以群分。通过特征,计算样本之间的相似度。

 

K-means 聚类学习:

第一步:确定一个超参数k,k就是打算把样本聚集为几类。

第二步:在所有的样本中,随机的选择三个点,作为聚类的初始中心。

第三步:依次计算除这三个中心点以外的每一个点,和三个中心点的距离。然后找出样本点离哪个中心点最近。

第四歩:将所有点划分到离它最近的那个中心点所代表的簇中去。

第五步:所有样本会被划分k个类别,有了k堆数据,分别计算这k个簇的质心。例如:

第六步:生成k个新的聚类中心点,以这k个新的重点重新重复3-5歩。

第七歩:终止条件(一):在重复的聚类过程中,所有样本点的分类结果都不再发生变化;(二)或者达到你设定的算法最大迭代次数,例如max_iter = 200 .

 

原理-算法实现:

 https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans 
 
 KMeans(
    n_clusters=8, # int, optional  聚类的数量
    init='k-means++', # 一种选择初始质心的方法
    n_init=10,# 使用不同质心种子运行k-means算法的次数。 在inertia,最终结果将是n_init连续运行的最佳输出。
    max_iter=300, # 最大迭代次数,如果超过此次数将不会继续迭代
    tol=0.0001, # MSE 下降到什么数值大小的时候停止迭代
    precompute_distances='auto',
    verbose=0,
    random_state=None, # 随机数种子
    copy_x=True,
    n_jobs=None, # 使用cpu核心数量
    algorithm='auto',
)

模型评估

下面来说说Kmeans算法的模型效果评估,模型算法的评估主要是从以下几个方面来进行度量

1、样本离最近聚类中心的总和(inertias)


# inertias:其是K均值模型对象的属性,表示样本距离最近的聚类中心的总和,它是作为在没有真实分类标签下的非监督式评估指标,该值越小越好,值越小证明样本在类间的分布越集中,即类内的距离越小。

 2、轮廓系数


# 轮廓系数:它用来计算所有样本的平均轮廓系数,使用平均群内距离和每个样本的平均最近簇距离来计算,它是一种非监督式评估指标。其最高值为1,最差值为-1,0附近的值表示重叠的聚类,负值通常表示样本已被分配到错误的集群。

 

 https://scikit-learn.org/stable/modules/generated/sklearn.metrics.silhouette_score.html#sklearn.metrics.silhouette_score 
 
通过轮廓系数找到最好的k值,其实就是调参。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!