聚类算法介绍

目录

一、概念

二、K-means聚类

1.步骤

 2.流程图

 3.代码实现

三、探究⽤户对物品类别的喜好细分


一、概念

⼀种典型的⽆监督学习算法,主要⽤于将相似的样本⾃动归到⼀个类别中。

二、K-means聚类

1.步骤

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

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

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

4、如果计算得出的新中⼼点与原中⼼点⼀样(质⼼不再移动),那么结束,否则重新进⾏第⼆步过程

 2.流程图

 3.代码实现

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score
from sklearn.datasets._samples_generator import make_blobs

# 创建数据集
# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本2个特征,共4个簇,
# 簇中⼼在[-1,-1], [0,0],[1,1], [2,2], 簇⽅差分别为[0.4, 0.2, 0.2, 0.2]
X, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
cluster_std=[0.4, 0.2, 0.2, 0.2],
random_state=9)

# 数据集可视化
plt.scatter(X[:, 0], X[:, 1], marker='o')
# print(X)
# print(X[:, 0])
plt.show()

#kmeans训练
y_pre=KMeans(n_clusters=2,random_state=9).fit_predict(X)
plt.scatter(X[:,0],X[:,1],c=y_pre)
plt.show()

#用ch_scole查看效果
print(calinski_harabasz_score(X,y_pre)) #越大越好

#kmeans训练
y_pre=KMeans(n_clusters=4,random_state=9).fit_predict(X)
print(y_pre)
plt.scatter(X[:,0],X[:,1],c=y_pre) 
plt.show()

#用ch_scole查看效果
print(calinski_harabasz_score(X,y_pre)) #越大越好

左一图:原始数据分布图;中间图:二分类图,右一图:四分类图

三、探究⽤户对物品类别的喜好细分

import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

order_product = pd.read_csv("F:\\数学建模\\机器学习\\数据\\order_products__prior.csv")
products = pd.read_csv("F:\\数学建模\\机器学习\\数据\\products.csv")
orders = pd.read_csv("F:\\数学建模\\机器学习\\数据\\orders.csv")
aisles = pd.read_csv("F:\\数学建模\\机器学习\\数据\\aisles.csv")
# print(order_product)
# print(products)

# 合并表格
table1 = pd.merge(order_product, products, on=["product_id", "product_id"])
table2 = pd.merge(table1, orders, on=["order_id", "order_id"])
table = pd.merge(table2, aisles, on=["aisle_id", "aisle_id"])
# print(table1)
data=pd.crosstab(table["user_id"],table["aisle"])
# print(data)
# print(data.shape)
new_data=data[:10000] #前一万行

transfer=PCA(n_components=0.9)
trans_data=transfer.fit_transform(new_data)
print(trans_data)
print(trans_data.shape)

estimator = KMeans(n_clusters=5)
y_pre=estimator.fit_predict(trans_data)
print(y_pre)

#模型评估
print(silhouette_score(trans_data,y_pre))

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值