机器学习sklearn-聚类

sklearn中聚类算法有两种表现形式,一种是类,需要实例化,然后训练并调动接口,另一种是函数,输入特征矩阵和超参数就可得到结果。

k-means 聚类算法的典型代表

将一组n个样本的特征矩阵X划分为K个无交集的簇,直观上来看簇是一组聚集的数据,在一个簇中的数据认为同一类。

簇中所有数据的均值被称为这个簇的质心。

簇的个数K是一个超参数,需要人为输入来确定,kmeans的核心人物就是根据我们设定好的K找出K个最优质心,并将离这些质心最近的数据分别分配到这些质心代表的簇中。

簇内差异:样本点到其所在簇的质心的距离

簇内平方和 整体平方和,越小表示聚类效果越好,kmeans求解过程为一个最优化问题

可以把这个看做是kmeans的损失函数,但并不严谨,更像模型评估指标

sklearn中只能使用欧氏距离 曼哈顿距离和余弦距离不能用

kmeans算法时间复杂度,最快的聚类算法

计算成本很大 时间复杂度很大

 sklearn.cluster.KMeans

重要参数n_clusters 是参数K,模型要分为几个簇  唯一的必填参数

有随机性参数 random_state=0

属性labels_ 查看聚好的类别,每个样本所对应的类

kmeans不需要建立模型或者预测结果,fit已经完成聚类结果了,但也有predict 和 fit_predict 标识学习数据x并对类进行预测,但所得到的结果和不调用predict直接fit之后调用labels一模一样

数据量太大的时候,可以使用一部分数据来做fit 剩下数据predict

属性cluster_centers 查看质心

属性inertia_ 查看总距离的平方和,随着k越来越大 inertia可能到0,不能通过增大k来降低inertia来说名模型效果变好了

聚类的模型评估指标

聚类模型的结果不是某种标签输出,并且聚类的结果是不确定的,模型优劣由也无需求来确定,可以通过衡量簇内差异来衡量聚类的效果。

kmeans适合分一堆一堆的 

数据是否一定不具有真实标签 如果真实标签已知,可用以下指标:模型评估指标 互信息分,V-measure 调整兰德系数

真实标签未知的时候:轮廓系数   

评估簇内的稠密程度,和簇间的离散程度

 能够同时衡量 样本与其自身所在的簇中的其他样本的相似度a,等于样本与同一簇中所有其他点之间的平均距离; 样本与其他簇中的样本的相似度b,等于样本与下一个最近的簇中的所有点之间的平均距离。

根据聚类的要求 簇内差异小簇外差异大:希望b永远大于a且大的越多越好

s = b-a/max(a,b) 范围为(-1,1) 越接近1越好

 机器学习sklearn-聚类_第1张图片

 sklearn.metrics.silhouette_score 计算轮廓系数的均值

sklearn.metrics.silhouette_samples 计算每一个样本的轮廓系数 返回一个矩阵

轮廓系数也有缺陷,在凸型类上表现会虚高,比如基于密度的聚类,或者通过DBSCAN 

其他评估指标,卡林斯基-哈拉巴斯指数简称CHI 也被称为方差比标准

戴维斯-布尔丁指数 、权变矩阵

sklearn.metrics.calinski_harabaz_score

机器学习sklearn-聚类_第2张图片

优点比较快,计算速度很快

时间戳计算运行时间from time import time  时间戳可以通过datetime中的函数fromtimestamp转换成真正的时间格式

datetime.datetime.frotimestamp(t0).strftime("%y-%m-%d %H:%M:%S")

绘制轮廓系统分布图和聚类后的数据分布图来选择最佳的n_clusters

matplotlib.cm # colormap  

可以选择分的好的类把数据踢出来,然后剩下的数据再进行聚类,把聚的好的再挑出来

nipy_spectral(输入任意小数来代表一个颜色)

计算完评估指标应该画图看看实际聚类的情况,分析每一类的效果,再判断后续如何处理

其他参数 init 能否真正收敛到最小值很大程度上取决于质心的初始化 init确定初始化方式

random_state来控制每次生成的初始质心都在相同的位置 对应一个质心随机初始化的随机数种子

init默认为kmeans++

n_init 整数默认10 使用不同的质心随机初始化的种子来运行kmeans算法的次数

n_iter_ 属性 迭代次数

max_iter 、tol参数 让迭代停下来

max_iter 默认300 单次运行kmeans的最大迭代次数

tol 浮点数 默认1e-4 两次迭代间inertia下降的量,如果两次迭代之间下降的值小于tol所设定的值,则迭代会停下

sklearn.cluster.k_means 直接返回多个参数

聚类算法可以用于降维 重要应用之一是非结构数据上的矢量量化

矢量量化的降维是在同等样本上压缩信息的大小

质心上的信息可以约等于这个类型上所有样本的信息,用质心来替换该类样本上的所有数据,从而降低数据量

你可能感兴趣的:(机器学习,机器学习,聚类,sklearn)