非监督学习
1 什么是非监(unsupervised learning)督学习
无监督学习,就是不受监督的学习,一种自由的学习方式。该学习方式不需要先验知识进行指导,而是不断地自我认知,自我巩固,最后进行自我归纳,在机器学习中,无监督学习可以被简单理解为不为训练集提供对应的类别标识(label),其与有监督学习的对比如下: 有监督学习(Supervised Learning)下的训练集:(x(1),y(1)),(x(2),y2)(x(1),y(1)),(x(2),y2)无监督学习(Unsupervised Learning)下的训练集:(x(1)),(x(2)),(x(3))(x(1)),(x(2)),(x(3))在有监督学习中,我们把对样本进行分类的过程称之为分类(Classification),而在无监督学习中,我们将物体被划分到不同集合的过程称之为聚类(Clustering)。
2 非监督学习步骤
假设现在又1千个数据,有x1,x2两个特征,现在对这1000个数据进行聚类,首先聚类的话有多少个类别就聚成多少类,假设K是把数据划分成多少个类别,这个个数是根据业务来定的,这个K值有两种情况,一种是知道个数,一种是不知道,不知道个数的话就相当于超参数。
假设知道K为3,那么怎么做呢?①随机在数据中抽取3个样本,当做3个类别的中心点(k1,k2,k3);
②计算其余的点分别到这3个中心点的距离,每一个样本有3个距离(a,b,c),从中选出一个距离最近的点作为自己的标记,形成3个族群;
③分别计算这3个族群的平均值,把3个平均值与之前的3个旧中心点进行比较,如果相同,结束聚类,如果不同把这3个平均值当做新的中心点,重复第二步。
3 非监督学习之k-means
K-means通常被称为劳埃德算法,这在数据聚类中是最经典的,也是相对容易理解的模型。
K-means算法执行的过程分为如下4个阶段:
①随机设置K个特征空间内的点作为初始的聚类中心 ;
②对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类 中心点作为标记类别 ;
③接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平 均值) ;
④如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行 第二步过程
4 k-means API
sklearn.cluster.KMeans
sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’)
k-means聚类 n_clusters:开始的聚类中心数量 (就是把这些样本分成多少个类别)
init:初始化方法,默认为'k-means ++’ labels_:默认标记的类型,可以和真实值比较(不是值比较)
方法:
fit(X,y=None)使用X作为训练数据拟合模型
predict(X)预测新的数据所在的类别
属性:
clustercenters集群中心的点坐标
labels_每个点的类别
聚类是做在分类之前的,有的数据没有目标值的时候,应该先做聚类,然后再预测类别。
5 Kmeans性能评估指标
假设分为3个类别如下图,当聚类的时候最好的结果非常相似的样本变成一个类别,那也就是说外部距离是最大的,内部这些样本是非常相似的。所以外部距离(族群与族群之间的距离),越大是越好的,内部各样本之间距离越小越好,这就是聚类的目的。
评估标准就是轮廓系数。那么是怎么评估的呢?对于每一个样本都是有轮廓系数的,假设有一点蓝1,①计算蓝1到自身类别的点的距离的平均值记做ai;②分别计算蓝1到红色类别和绿色类别所有点的距离取出平均值b1,b2,取出最小值当做bi;③蓝1的轮廓系数就为(bi-ai)/(max(bi ai));④在极端情况下,假设聚类非常好,外部距离非常大,内部距离非常小,那么bi>>ai(bi远大于ai)那么轮廓系数就为1,如果情况最差ai>>bi,那么轮廓系数就为-1,所以每一个样本的轮廓系数在[-1,1]区间,越靠近1是越好的
Kmeans性能评估指标API sklearn.metrics.silhouette_score
sklearn.metrics.silhouette_score(X, labels) 计算所有样本的平均轮廓系数
X:特征值
labels:被聚类标记的目标值
6 案例
from sklearn.datasets import load_digits
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 加载数据
ld = load_digits()# 聚类
k = KMeans(n_clusters=4)
k.fit_transform(ld.data)
print("每个点的类别",k.labels_[:20])
print("评论聚类效果的轮廓系数",silhouette_score(ld.data,k.labels_))
7 总结
特点分析:采用迭代式算法(一步一步修改中心点),直观易懂并且非常实用
缺点:容易收敛到局部最优解(多次聚类)
需要预先设定簇的数量(k-means++解决)