一、概述
1、无监督学习:训练时只需要一个特征矩阵x,不需要标签y,例如PCA
2、聚类(无监督分类)VS 分类
1)在已经知晓的类别上,给未知的样本标上标签(分类);在完全不知道标签的情况下,探索分布上的分类(聚类)
2)分类结果确定,聚类结果不确定
3、sklearn中的聚类算法(类和函数两种表现形式)输入数据可以是标准特征矩阵,也可以是相似性矩阵(行和列都是n_samples),可以使用sklearn.metric.pairwise模块中函数获取相似性矩阵
4、簇中所有数据坐标均值为这个簇的质心坐标,簇k是一个超参数,kmeans追求的是能让簇内平方和inertia最小的质心(最优化问题,逻辑回归也是最优化问题)
5、KMeans算法时间复杂度为O(k*n*T),k为簇数,n为样本数,T为迭代次数,但这种算法很慢,但是最快的聚类算法,
二、sklearn.cluster.KMeans
1、重要参数
1)n_clusters:分几个簇,可以通过画图确定分几个
2、重要属性
1)labels_,查看聚好的类别,每个样本对应的类
2)cluster_centers_。查看质心
3)inertia_,查看总距离平方和。分的簇越多,inertia越低,可以降低至0。k值一定的情况下,inertia越低,聚类效果越好。
3、接口fit_predict(x):fit后使用,将x分到已经聚好的类中
1)cluster=KMeans(n_clusters=3,random_state=0).fit(x)
cluster.labels_
cluster=KMeans(n_clusters=3,random_state=0).fit(x)
cluster.fit_predict(x)
结果相同
2)为什么需要fit_predict(x)?数据量太大时,可以先切出一点数据训练,找质心,其它数据用这个接口预测,减少计算量,结果不一样但可以接近。
cluster_smallsub=KMeans(n_clusters=3,random_state=0).fit(x[:200])
y_pred_=cluster_smallsub.predict(x[200:])
有一些算法天生没有损失函数(衡量拟合效果)
聚类算法不需要调用接口transform(),.fit(x)后求出质心,聚类已经完成,但之后可以用
RFM模型,漏斗分析,AARRR模型