用python实现聚类分析

一、简介

这里较为详细介绍了聚类分析的各种算法和评价指标,本文将简单介绍如何用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_——获取训练数据所属的类别,比设置的聚类中心个数少1
  • inertia_——获取每个点到聚类中心的距离和
  • fit_predict(X)——先对X进行训练并预测X中每个实例的类,等于先调用fit(X)后调用predict(X),返回X的每个类
  • transform(X)——将X进行转换,转换为K列的矩阵,其中每行为一个实例,每个实例包含K个数值(K为传入的类数量),第i列为这个实例到第K个聚类中心的距离
  • fit_transform(X)——先进行fit之后进行transform
  • score(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类似。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值