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')

可以看见数据被拆分成了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()

crossTable

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

二十万条数据太多,现在取其中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,聚类效果越好,上述结果发现效果不太明显,不太能确定分为多少类。

你可能感兴趣的:(kmeans算法c语言代码)