35、机器学习kmeans聚类

一、kmeans步骤

1、随机设置K个特征空间内的点作为初始的聚类中心

2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类
中心点作为标记类别

3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平
均值)

4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行
第二步过程

二、性能评估指标

轮廓系数: s c i = b i − a i m a x ⁡ ( b i , a i ) sc_{i}=\frac{b_i− a_i}{max⁡(b_i,a_i)} sci=max(bi,ai)biai
注:对于每个点i 为已聚类数据中的样本 ,b_i 为i 到其它族群的所有样本的平均
距离,a_i 为i 到本身簇的距离平均值

最终计算出所有的样本点的轮廓系数平均值

如果sc_i 小于0,说明a_i 的平均距离大于最近的其他簇。
聚类效果不好

如果sc_i 越大,说明a_i 的平均距离小于最近的其他簇。
聚类效果好

轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优
在这里插入图片描述
在这里插入图片描述

三、优缺点

特点分析:采用迭代式算法,直观易懂并且非常实用

缺点:容易收敛到局部最优解(多次聚类)
需要预先设定簇的数量(k-means++解决)

from sklearn.decomposition import PCA
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
##读取数据
aisles=pd.read_csv(r'C:\Users\ms\Desktop\ddup\机器学习算法基础\Data explorer\aisles.csv')
prior=pd.read_csv(r'C:\Users\ms\Desktop\ddup\机器学习算法基础\Data explorer\order_products__prior.csv')
orders=pd.read_csv(r'C:\Users\ms\Desktop\ddup\机器学习算法基础\Data explorer\orders.csv')
products=pd.read_csv(r'C:\Users\ms\Desktop\ddup\机器学习算法基础\Data explorer\products.csv')
##合并数据
mg=pd.merge(aisles,products,on=['aisle_id','aisle_id'])
mg=pd.merge(mg,prior,on=['product_id','product_id'])
mg=pd.merge(mg,orders,on=['order_id','order_id'])
print(mg.info())
##将列打横
data=pd.crosstab(mg.user_id,mg.aisle)
##对数据进行主成分分析
pca=PCA(n_components=0.9)
data=pca.fit_transform(data)
x=data[:500]###只取前500行数据
##构建并拟合kmeans模型
km=KMeans(n_clusters=4)
km.fit(x)
##预测分类
predict=km.predict(x)
###画图
color=['orange', 'green', 'blue', 'purple']
col_list=[color[i] for i in predict]
plt.figure(figsize=(10,10))

plt.scatter(x[:,1],x[:,20],color=col_list)
plt.xlabel("1")
plt.ylabel("20")
plt.show()

##合并数据
mg=pd.merge(aisles,products,on=['aisle_id','aisle_id'])
mg=pd.merge(mg,prior,on=['product_id','product_id'])
mg=pd.merge(mg,orders,on=['order_id','order_id'])
print(mg.info())

在这里插入图片描述

##将列打横
data=pd.crosstab(mg.user_id,mg.aisle)
##对数据进行主成分分析
pca=PCA(n_components=0.9)
data=pca.fit_transform(data)
x=data[:500]###只取前500行数据
##构建并拟合kmeans模型
km=KMeans(n_clusters=4)
km.fit(x)
##预测分类
predict=km.predict(x)
# 评判聚类效果,轮廓系数
silhouette_score(x, predict)
###画图
color=['orange', 'green', 'blue', 'purple']
col_list=[color[i] for i in predict]
plt.figure(figsize=(10,10))

plt.scatter(x[:,1],x[:,20],color=col_list)
plt.xlabel("1")
plt.ylabel("20")
plt.show()

在这里插入图片描述

# 评判聚类效果,轮廓系数
print(silhouette_score(x, predict))

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值