一、无监督学习包含算法
- 聚类——K-means
- 降维——PCA
二、K-means算法原理
- 随机设置K个特征空间内的点作为初始的聚类中心
- 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
- 接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
- 如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程
三、API
- sklearn.cluster.KMeans(n_clusters=8,init = ‘k-means++’)
- 参数:
- n_clusters:开始的聚类中心数量
- 整型,缺省值=8,生成的聚类数,即产生的质心(centroids)数。
- init:初始化方法,默认为’k-means++’
- labels_:默认标记的类型,可以和真实值比较(不是值比较)
- n_clusters:开始的聚类中心数量
- 参数:
- 方法:
- estimator.fit(x)
- estimator.predict(x)
- estimator.fit_predict(x)
- 计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)
四、模型评估
- 轮廓系数SCi∈[-1,1],'高内聚,低耦合’效果好
- SCi越接近于1,聚类效果越好
- SCi越接近于-1,聚类效果越差
- API
- sklearn.metrics.silhouette_score(X,labels)
- 计算所有样本的平均轮廓系数
- X:特征值
- label:被聚类标记的目标值
- sklearn.metrics.silhouette_score(X,labels)
五、案例
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 预估器流程
estimator = Kmeans(n_clusters = 3)
estimator.fit(data)
# data为特征值,因为聚类是无监督学习,没有目标值,不需要传入
y_predict = estimator.predict(data)
print(y_predict)
# 模型评估
silhouette_score(data,y_predict)
运行结果:
y_predict:
[0,1,0,0,0,2,1,2]
0.539632554654
六、K-means总结
- 特点:采用迭代式算法,直观易懂并且非常实用
- 缺点:容易收敛到局部最优解(多次聚类)