kmeans 的“损失函数”,打了个引号,说明不太严谨,类似逻辑回归的损失函数
n_clusters参数,即KMeans的k,默认为8,一般想要小于8的类,如果数据可以可视化,先可视化,然后选择k,这里用make_blobs创建数据,返回特征矩阵X和标签y,make_blobs(n_samples,n_features,),画子图,plt.subplot() 参数是生成几个子图,返回时画布和对象,记为fig和ax1,对ax1填充scatter散点图,
kmeans的predict,在数据量大时使用,比如50w行数据,先用2000行数据fit迭代出一个较好的聚类模型,再把剩余数据predict出聚类结果。inertia 整体平方和,对不同的簇找出质心,
KMeans聚类的矢量量化 本质是一种降维运用,但它与我们之前学过的任何一种降维算法的思路都不相同。特征选择的降维是直接选取对模 型贡献最大的特征,PCA的降维是聚合信息,而矢量量化的降维是在同等样本量上压缩信息的大小,即不改变特征 的数目也不改变样本的数目,只改变在这些特征下的样本上的信息量。
原理
这是最基础的聚类算法,首先说聚类算法,是无监督学习,没有标签。KMeans算法将一组N个样本的特征矩阵X划分为K个无交集的簇,直观上来看是簇是一组一组聚集在一起的数据,在一个簇中的数据就认为是同一类。簇就是聚类的结果表现。 簇中所有数据的均值通常被称为这个簇的“质心”(centroids)。在一个二维平面中,一簇数据点的质心的横坐标就是这一簇数据点的横坐标的均值,质心的纵坐标就是这一簇数据点的纵坐标的均值。同理可推广至高维空间。
在KMeans算法中,簇的个数K是一个超参数,需要我们人为输入来确定。KMeans的核心任务就是根据我们设定好的K,找出K个最优的质心,并将离这些质心最近的数据分别分配到这些质心代表的簇中去。具体过程可以总结如下:
| 随机抽取K个样本作为最初的质心 |
|---|
| 开始循环 |
| 将每个样本点分配到离他们最近的质心,生成K个簇 |
| 对于每个簇,计算所有被分到该簇的样本点的平均值作为新的质心 |
| 当质心的位置不再发生变化,迭代停止,聚类完成 |
KMeans属性
| 属性 | 解释 |
|---|---|
| cluster_centers_ | 质心 |
| labels_ | 每个样本对应的标签 |
| inertia_ | 簇内平方和 一个簇中所有样本点到质心的距离的平方和为 而将一个数据集中的所有簇的簇内平方和相加就得到了整体平方和 |
| n_inter_ | 迭代次数 |
聚类模型评估指标
其实在现实数据,要聚类的业务数据没有标签,倘若有一批有标签的数据不使用监督学习中的分类,偏要进行聚类,那么评估使用互信息分,V-measure,兰德系数。
接下来是真实标签未知,可采用轮廓洗系数和卡林斯基-哈拉巴斯,后者比前者计算速度快。
轮廓系数分为对样本silhouette_samples和对整体silhouette_score。
初始质心
这涉及到参数init,random_state,n_init,