当前位置:   article > 正文

sklearn中的聚类算法K-Means_sklearn kmeans

sklearn kmeans

1.1 无监督学习与聚类算法

有监督学习”的一部分,即是说,模型在训练的时候,即需要特征矩阵X,也需要真实标签y

有相当一部分算法属于“无监督学习”,无监督的算法在训练的时候只需要特征矩阵X,不需要标签。

1.2 sklearn中的聚类算法

聚类算法在sklearn中有两种表现形式,一种是类(和我们目前为止学过的分类算法以及数据预处理方法们都一样),需要实例化,训练并使用接口和属性来调用结果。另一种是函数(function),只需要输入特征矩阵和超参数,即可返回聚类的结果和各种指标。

意思就是录入的数据可以是有多种特征矩阵的方式,而不是监督学习中的列才是特征;在KMEAN中行和列都是特征

2 KMeans

2.1 KMeans是如何工作的

关键概念:簇与质心

在KMeans算法中,簇的个数K是一个超参数,需要我们人为输入来确定。KMeans的核心任务就是根据我们设定好的K,找出K个最优的质心,并将离这些质心最近的数据分别分配到这些质心代表的簇中去

那什么情况下,质心的位置会不再变化呢?当我们找到一个质心,在每次迭代中被分配到这个质心上的样本都是一致的,即每次新生成的簇都是一致的,所有的样本点都不会再从一个簇转移到另一个簇,质心就不会变化了。

2.2 簇内误差平方和的定义和解惑

被分在同一个簇中的数据是有相似性的,而不同簇中的数据是不同的,当聚类完毕之后,我们就要分别去研究每个簇中的样本都有什么样的性质,从而根据业务需求制定不同的商业或者科技策略。

。这个听上去和我们在上周的评分卡案例中讲解的“分箱”概念有些类似,即我们分箱的目的是希望,一个箱内的人有着相似的信用风险,而不同箱的人的信用风险差异巨大,以此来区别不同信用度的人,因此我们追求“组内差异小,组间差异大”

聚类算法也是同样的目的,我们追求“簇内差异小,簇外差异大”。而这个“差异“,由样本点到其所在簇的质心的距离来衡量。

如我们采用欧几里得距离,则一个簇中所有样本点到质心的距离的平方和为:

理解:损失函数针对的是对逻辑回归之类的有参数的求解,是求参数产生的;

如果不是求参数产生的,而是要整体平方和最小,则不称为损失函数。

而这些组合,都可以由严格的数学证明来推导。在sklearn当中,我们无法选择使用的距离,只能使用欧式距离。因此,我们也无需去担忧这些距离所搭配的质心选择是如何得来的了。

2.3 KMeans算法的时间复杂度

除了模型本身的效果之外,我们还使用另一种角度来度量算法:算法复杂度。

算法的复杂度分为时间复杂度和空间复杂度,时间复杂度是指执行算法所需要的计算工作量,常用大O符号表述;而空间复杂度是指执行这个算法所需要的内存空间。

也就是付出与收获的问题

3 sklearn.cluster.KMeans

3.1 重要参数n_clusters

n_clusters是KMeans中的k,表示着我们告诉模型我们要分几类。这是KMeans当中唯一一个必填的参数,默认为8类,但通常我们的聚类结果会是一个小于8的结果。通常,在开始聚类之前,我们并不知道n_clusters究竟是多少,因此我们要对它进行探索。

————也就是说不会默认为8,而是会手工调整

3.1.1 先进行一次聚类看看吧

首先,我们来自己创建一个数据集。这样的数据集是我们自己创建,所以是有标签的。

  1. from sklearn.datasets import make_blobs
  2. import matplotlib.pyplot as plt
  3. #自己创建数据集
  4. X, y = make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号