kmeans算法c语言代码,ML算法与代码实现——Kmeans(案例)

案例一:探究用户对物品类别的喜好细分

1.获取数据import pandas as pd

from sklearn.decomposition import PCA

from sklearn.cluster import KMeans

from sklearn.metrics import silhouette_score   #轮廓系数aisles = pd.read_csv('aisles.csv')

ord_prod_prior = pd.read_csv('order_products__prior.csv')

order = pd.read_csv('orders.csv')

products = pd.read_csv('products.csv')

956a80b7ccbc

956a80b7ccbc

可以看见数据被拆分成了4个表格,先合并表格。

2.数据基本处理

2.1 合并表格df = pd.merge(ord_prod_prior,products,how='left',on=["product_id", "product_id"])

df1 = pd.merge(df,order,on=['order_id','order_id'])

df2 = pd.merge(df1,aisles,on=['aisle_id','aisle_id'])

df2.head()

2.2 交叉表合并

为了对客户的购物行为分析,将每个客户购买过的商品进行统计,用crosstab可以方便的做到。df_cross = pd.crosstab(df2["user_id"], df2["aisle"])

df_cross.head()

956a80b7ccbc

crossTable

上表中有134个特征,对如此多的特征进行聚类会发生维度灾难,这时候我们考虑特征降维。

956a80b7ccbc

二十万条数据太多,现在取其中1万条用户信息#使用PCA特征降维,保留90%的特征

transfer = PCA(n_components=0.9)

data = transfer.fit_transform(df_cross_tiny)

data.shape

Out:(10000, 26)

这里降维后剩下了26个特征,损失了10%的信息。

接下来用Kmeans聚类#使用k-means进行聚类,并使用轮廓系数评估

from sklearn.metrics import silhouette_score

def plot_by_n(n_clusters,data):

pre_data = KMeans(n_clusters=n_clusters).fit_predict(data)

sb.scatterplot(data[:,0],data[:,1],hue=pre_data)

plt.show()

# 用silhouette_score评估的聚类分数

print(silhouette_score(data, pre_data))

#从n=2到n=10

for n in range(2,10):

plot_by_n(n,data)OUT:

n= 2 0.692336964374765

n= 3 0.551931038460353

n= 4 0.45253050151292484

n= 5 0.4513994310665167

n= 6 0.4181297258813439

n= 7 0.3722567845705036

n= 8 0.37251302801272024

n= 9 0.36138371002101033

轮廓系数处于[-1,1]之间,越接近于1,聚类效果越好,上述结果发现效果不太明显,不太能确定分为多少类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值