K-Means聚类算法 【sklearn.cluster】


class sklearn.cluster.KMeans(n_clusters=8, *, init='kmeans++', n_init=10, max_iter=300, tol=0.0001,

precompute_distances='deprecated', verbose=0, random_state=None, copy_x=True, n_jobs='deprecated', algorithm='auto')


参数:

1、 n_clusters: 聚类类别数量,也是初始聚类中心的数量,default=8

2、init: 聚类的初始化中心的方案, dafault='k-means++'

'k-means++': (1)从输入的数据点集合(要求有k个聚类)中随机选择一个点作为第一个聚类中心;(2)、对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);(3)、选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大;(4)、重复2和3直到k个聚类中心被选出来。

'random': 从data中随机选取n_clusters数量的点作为初始中心;

'ndarray': 传入的是形状为(n_clusters, n_features)的二维数组,数组的每一行作为一个中心;

'callable': 接受的是参数X、n_clusters、random_state,并返回一个初始化值。

3、max_iter:  一次算法运行的最大迭代次数, dafualt=300

4、n_init: 聚类算法的运行次数,输出n_init连续的运行中最好的那次的结果,default=10

5、tol:  两次连续迭代之间的相对误差,取一个很小的值(不建议tol=0,因为又浮点数有舍入误差),float,defualt=1e-4

6、precompute_distances: 是否将数据放入内存进行预计算, default='auto'    

'auto': n_sample*n_cluster>=12 million时不进行预计算,它相当于双精度工作100MB的开销

True: 总进行预计算

False: 不进行预计算

7、verbose: 是否输出详细信息,default=0

8、random_state:用于产生初始中心的随机序列,default=None, (用于2、init)

9、copy_x: 是否直接在原矩阵上计算,default=True,copy一份进行计算

10、n_jobs: 同时进行计算的核数(并发数),n_jobs用于并行计算每个n_init,如果设置为None或-1,使用所有CPU,若果设置为1,不并行,如果设置小于-1,使用CPU个数+1+n_jobs个CPU

11、algorithm:用于kmeans第一步距离计算, {“auto”, “full”, “elkan”}, default=”auto”

"full"就是我们传统的K-Means算法;

 “elkan”,它的目标是减少不必要的距离的计算,利用了两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,来减少距离的计算,效率更高,但是目前不支持稀疏数据

1、计算任意两个聚类中心的距离;

2、当计算样本点x点应该属于哪个聚类中心时,规律一:当发现2*S(x,K1)S(x,K1),此时我们不需要再计算D(x,j2);

规律二:我们可以得到D(x,j2)≥max{0,D(x,j1)−D(j1,j2)}。

利用上边的两个规律,elkan K-Means比起传统的K-Means迭代速度有很大的提高。但是如果样本的特征是稀疏的,有缺失值的话,这个方法就不适用了,此时某些距离无法计算,则不能使用该算法

默认的"auto"则会根据数据值是否是稀疏的,来决定如何选择"full"和“elkan”。一般数据是稠密的,那么就是 “elkan”,否则就是"full"。一般来说建议直接用默认的"auto"

属性:

clusters_center_:簇中心

labels_: 每个样本点的label

inertia_: 样本点到簇中心的平方距离之和

n_iter_:运行的迭代次数

方法:

fit(self, X[, y, sample_weight]): 计算k-means聚类,sample_weight=None,默认所有样本点权值相等,返回self拟合值

fit_predict(self, X[, y, sample_weight]): 计算k-means聚类并预测样本所属的cluster,返回labels_ :(n_samples,),样本的label值

fit_transform(self, X[, y, sample_weight]): 计算k-means聚类,并将X转换为cluster-distance space,返回X_new :(n_samples, n_clusters)

get_params(self, deep=True): 返回训练参数

predict(self, X, sample_weight=None): 预测X中样本到最近簇中心的label,返回labels:(n_samples,)

score(self, X, y=None, sample_weight=None): 评估

set_params(self, **params): 设置参数

transform(self, X): 将样本X转换为cluster-distance space,返回X_new :(n_samples, n_clusters)

 

 

:)ps 红色部分是不太理解

你可能感兴趣的:(机器学习)