一、简介
这里较为详细介绍了聚类分析的各种算法和评价指标,本文将简单介绍如何用python里的库实现它们。
二、k-means算法
和其它机器学习算法一样,实现聚类分析也可以调用sklearn
中的接口。
from sklearn.cluster import KMeans
2.1 模型参数
KMeans(
# 聚类中心数量,默认为8
n_clusters=8,
*,
# 初始化方式,默认为k-means++,可选‘random’,随机选择初始点,即k-means
init='k-means++',
# k-means算法会随机运行n_init次,最终的结果将是最好的一个聚类结果,默认10
n_init=10,
# 算法运行的最大迭代次数,默认300
max_iter=300,
# 容忍的最小误差,当误差小于tol就会退出迭代(算法中会依赖数据本身),默认为0.0001
tol=0.0001,
# 是否将数据全部放入内存计算,可选{'auto', True, False},开启时速度更快但是更耗内存
# 'auto' : 当n_samples * n_clusters > 12million,不放入内存,否则放入内存,double精度下大概要多用100M的内存
precompute_distances='deprecated',
# 是否输出详细信息,默认为0
verbose=0,
# 用于随机产生中心的随机序列
random_state=None,
# 是否直接在原矩阵上进行计算
copy_x=True,
# 同时进行计算的核数(并发数),n_jobs用于并行计算每个n_init,如果设置为-1,使用所有CPU,若果设置为1,不并行,如果设置小于-1,使用CPU个数+1+n_jobs个CPU
n_jobs='deprecated',
# 可选的K-means距离计算算法, 可选{"auto", "full" or "elkan",default="auto"}
# full为欧式距离,elkan为使用三角不等式,效率更高,但不支持稀疏矩阵,当为稀疏矩阵时,auto使用full,否则使用elkan
algorithm='auto',
)
2.2 常用模型方法
fit(X)
——对数据X进行聚类predict(X)
——对新数据X进行类别的预测cluster_centers_
——获取聚类中心labels_
——获取训练数据所属的类别,比设置的聚类中心个数少1inertia_
——获取每个点到聚类中心的距离和fit_predict(X)
——先对X进行训练并预测X中每个实例的类,等于先调用fit(X)后调用predict(X),返回X的每个类transform(X)
——将X进行转换,转换为K列的矩阵,其中每行为一个实例,每个实例包含K个数值(K为传入的类数量),第i列为这个实例到第K个聚类中心的距离fit_transform(X)
——先进行fit之后进行transformscore(X)
——输入样本(这里的样本不是训练样本,而是其他传入的测试样本)到他们的类中心距离和,然后取负数
2.3 实际例子
# 以two_moons数据为例
from sklearn.datasets import make_blobs
# 生成模拟的二维数据, X.shape——>(100, 2)
X, y = make_blobs(random_state=1)
# 设置为三个聚类中心
Kmeans = KMeans(n_clusters=3)
# 训练模型
Kmeans.fit(X)
2.3.1 获取聚类中心:
Kmeans.cluster_centers_
输出:
array([[ -1.4710815 , 4.33721882],
[ -6.58196786, -8.17239339],
[-10.04935243, -3.85954095]])
2.3.2 获取类别
Kmeans.labels_
输出:我们设置了3个聚类中心,所以输出3个类别。
array([0, 2, 2, 2, 1, 1, 1, 2, 0, 0, 2, 2, 1, 0, 1, 1, 1, 0, 2, 2, 1, 2,
1, 0, 2, 1, 1, 0, 0, 1, 0, 0, 1, 0, 2, 1, 2, 2, 2, 1, 1, 2, 0, 2,
2, 1, 0, 0, 0, 0, 2, 1, 1, 1, 0, 1, 2, 2, 0, 0, 2, 1, 1, 2, 2, 1,
0, 1, 0, 2, 2, 2, 1, 0, 0, 2, 1, 1, 0, 2, 0, 2, 2, 1, 0, 0, 0, 0,
2, 0, 1, 0, 0, 2, 2, 1, 1, 0, 1, 0], dtype=int32)
2.3.3 获取每个点到聚类中心的距离和
Kmeans.inertia_
输出:
156.28289251170003
三、mini batch k-means算法
mini batch k-means的用法和k-means类似。