Python scikit-learn,非监督学习 (没有目标值),k-means聚类算法,KMeans

k-means,k表示聚类的目标类别数(如果不知道,就是超参数)

一般应用中是先进行k-means聚类,然后再进行分类预测。


demo.py(k-means聚类,通过轮廓系数进行评估):

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


# K-means 聚类   根据用户商品订单数据进行聚类。预测用户对某商品的喜好程度。
data = pd.read_csv("./demo.csv")

# 特征降维  PCA主成分分析
pca = PCA(n_components=0.9)  # 保留90%的信息
data = pca.fit_transform(data)
print(data.shape)  # (500, 27)   500个样本,降维到27个特征


# k-means聚类
km = KMeans(n_clusters=4)   # 假设分为4个类别。 (如果不知道类别个数,可以通过轮廓系数进行调参调优)
km.fit(data)  # 填充数据

# 聚类结果  预测
predict = km.predict(data)  # 500个样本的聚类结果
print(predict)
'''
array([1, 1, 3, 1, 1, 2, 1, 2, 0 ,..., 2, 1, 1], dtype=int32)
'''

# 轮廓系数 评估聚类效果
sc = silhouette_score(data, predict)
print(sc)  # 0.61023872302956417 (越接近1越好)
# 可以根据轮廓系数来优化K的值。

k-means优点:采用迭代式算法,直观易懂并且非常实用
缺点:最终的聚类结果可能只是局部的最优解,而不是全局的最优解(和初始随机的K个中心点有关)。(解决办法:多次进行聚类(API已自动实现))

猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/88077128