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已自动实现))