k-means算法

算法篇

k-means

k-means属于无监督学习中的聚类算法,只适用于没有标签的数据集,用来处理聚类问题,需要自己来划分预测结果。
所谓聚类问题,就是给定一个数据集D,每个样本有n个属性,使用某种算法将数据集D分为k个子集,使每个子集内部元素之间的相似度尽可能的高,使集合和集合之间的各个元素之间的相似度尽可能的低,每个子集称为一个簇。
聚类的目的:类内相似,类外相异

算法原理

  1. 从数据D随机选取k个元素,作为k个簇各自的聚类中心,k个元素可以是数据中的元素也可以不是数据中的元素
  2. 分别计算剩下的元素和k个聚类中心的相似度(计算距离,越近就是 相似度越高),并将其归属为最相似的簇
  3. 根据聚类结果,重新划分聚类中心,并且计算距离
  4. 重复2,3操作,直至满足停止条件
    停止条件为:聚类结果基本不再发生变化,或者达到一定的迭代次数

算法特点

  • 需要自定义k值
  • 数据如果受量纲的影响,需要对数据进行标准化,所谓量纲就是某几列特征数据差距较大
  • 会受异常值的影响(如果存在异常值,通常会自成一类)
  • 会收敛于局部最优(随机初始化的聚类中心,可能无法达到全局最优)
    k-means算法之前,需要考虑是否要去异常、是否要数据标准化
    衡量聚类效果:观察每个样本到各自聚类中心距离的和

算法的代码实现

from sklearn.cluster import KMeans
from sklearn.preprocessing import MaxAbsScaler  # 小数定标标准化
from sklearn.preprocessing import MinMaxScaler  # 离差标准化
from sklearn.preprocessing import StandardScaler  # 标准差标准化
# 评估指标-----轮廓系数
from sklearn.metrics import silhouetee_score

# 由于是聚类算法,数据可能存在量纲,需要标准化,在使用算法之前
# 实例化
sca = MaxAbsScaler()
sca = MinMaxScaler()
sca = StandardScaler()
# 拟合
sca.fit( 训练集特征 )
# 处理数据
X_train = sca.transform( 训练集特征 )


# 实例化
km = KMeans()
# 参数:
# n_clusters=3,表示k=3,也就是随机三个聚类中心,最小值是2
# init,聚类中心初始化方法,默认k-means++
# max_iter,最大迭代次数,默认300,如果后期无法收敛可以尝试增加迭代次数
# random_state=1,随机种子,默认是None

# 拟合
km.fit( 训练集特征 )

# 查看聚类中心
print('聚类中心:', km.cluster_centers_)

# 查看预测结果
# 可以直接传入训练集,也可以传入自定义二维数组
y_pred = km.predict( 训练集特征 )
print('整个数据的类别:', y_pred)

# 查看SSE---误差平方和
# 默认是取反操作,大多数情况得出来的是负值【-inf, 0】
# 绝对值越小越好
score = km.score(X_train, y_pred)
print('SSE', score)

# 评估指标----轮廓系数(-1, 1),越大越好
print('轮廓系数:', silhouetee_score(X_train, y_pred))

k-means获取最优k值的方法

手肘法

计算不同k值的SSE,绘制图像,选择图像拐点的k值相对是比较好的,由于图像画出来类似于手肘,所以叫手肘法,选取手肘拐点即可。手肘法选取的就是相对较好的点,也就相当于一个折中效果,使预测结果不会太差,防止过拟合现象的发生。
在这里插入图片描述

获取最优轮廓系数

如果想要最优的点,还是要选取最高的点。
设置不同的k值进行测试计算轮廓系数,就能得到最优的k值对应的最优的轮廓系数,也可以绘图进行观察,选取最高。但是为了防止过拟合的现象,也可以通过手肘进行选取最优k值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值