sklearn聚类算法实现

主要通过调用python中sklearn库中的函数来实现聚类算法,主要包括:K-MEANS、近邻传播(AffinityPropagation)、均值偏移(MeanShift)、谱聚类(SpectralCluster)、层次聚类(AgglomerativeClustering)、密度噪声(DBSCAN)、平衡迭代层次聚类(Birch)、高斯混合(GMM)、双向聚类(SpectralBiclustering)。

1、生成数据集

通过sklearn中的make_blobs函数主要来生成数据集,方便后续的聚类操作。

make_blobs的用法

data, label = make_blobs(n_features, n_samples, centers, random_state, cluster_std)

  • n_features 表示每一个样本有多少特征值
  • n_samples 表示样本的个数
  • centers 聚类中心点的个数,可以理解为label的种类数
  • random_state 随机种子,可以固定生成的数据
  • cluster_std 设置每个类别的方差

例子:

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成(150,2)的数据集
centers = [[1, 1], [-1, -1], [1, -1]]
Xn, labels_true = make_blobs(n_samples=150, centers=centers, cluster_std=0.5, random_state=0)
# 在图上画出数据
plt.scatter(Xn[:, 0], Xn[:, 1], s=80)
plt.show()

生成结果如下:

2、 聚类算法

2.1 K-MEANS

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# KMeans聚类
model = KMeans(n_clusters=3)
y_pred = model.fit_predict(Xn)# 画图显示样本数据
plt.figure('Kmeans', facecolor='lightgray')
plt.title('Kmeans', fontsize=16)
plt.xlabel('X', fontsize=14)
plt.ylabel('Y', fontsize=14)
plt.tick_params(labelsize=10)
plt.scatter(Xn[:, 0], Xn[:, 1], s=80, c=y_pred, cmap='brg', label='Samples')
plt.legend()
plt.show()

结果如下:

2.2 近邻传播(AffinityPropagation)

import matplotlib.pyplot as plt
from sklearn.cluster import AffinityPropagation
'''sklearn.cluster.AffinityPropagation函数主要参数: damping 阻尼系数,取值[0.5,1)  convergence_iter:比较多少次聚类中心不变后停止迭代,默认15max_iter:最大迭代次数  preference:参考度(即p值)主要属性: cluster_centers_indices_  存放聚类中心数组labels_ 存放每个点的分类的数组n_iter_ 迭代次数
'''
model = AffinityPropagation(damping=0.5, max_iter=500, convergence_iter=30,preference=-50).fit(Xn)
cluster_centers_indices = model.cluster_centers_indices_
y_pred = model.labels_# 画图显示样本数据
plt.figure('AffinityPropagation', facecolor='lightgray')
plt.title('AffinityPropagation', fontsize=16)
plt.tick_params(labelsize=10)
plt.scatter(Xn[:, 0], Xn[:, 1], s=80, c=y_pred, cmap='brg', label='Samples')
plt.legend()
plt.show()

结果如下:

2.3 均值偏移

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
import sklearn.cluster as scbw = sc.estimate_bandwidth(Xn, n_samples=len(Xn), quantile=0.1)
model = sc.MeanShift(bandwidth=bw, bin_seeding=True)
model.fit(Xn)  # 完成聚类
pred_y = model.predict(Xn)  # 预测点在哪个聚类中
centers = model.cluster_centers_# 画图显示样本数据
plt.figure('MeanShift', facecolor='lightgray')
plt.title('MeanShift', fontsize=16)
plt.tick_params(labelsize=10)
plt.scatter(Xn[:, 0], Xn[:, 1], s=80, c=pred_y, cmap='brg', label='Samples')
plt.legend()
plt.show()

结果如下:

2.4 谱聚类

import sklearn.cluster as sc
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs'''
y_pred = sc.SpectralClustering().fit_predict(Xn)
print("Calinski-Harabasz Score", metrics.calinski_harabasz_score(Xn, y_pred))
# 默认使用的是高斯核,需要对n_cluster和gamma进行调参,选择合适的参数
for index, gamma in enumerate((0.01, 0.1, 1, 10)):for index, k in enumerate((3, 4, 5, 6, 7, 8)):y_pred = sc.SpectralClustering(n_clusters=k, gamma=gamma).fit_predict(Xn)print("Calinski-Harabasz Score with gamma=", gamma, "n_clusters=", k, "score:", metrics.calinski_harabasz_score(Xn, y_pred))
'''
# 用测试出的参数进行最终聚类得到类别信息
y_pred = sc.SpectralClustering(gamma=1, n_clusters=3).fit_predict(Xn)
print(y_pred)
model = sc.SpectralClustering(gamma=1, n_clusters=3)# 画图显示样本数据
plt.figure('SpectralCluster', facecolor='lightgray')
plt.title('SpectralCluster', fontsize=16)
plt.tick_params(labelsize=10)
plt.scatter(Xn[:, 0], Xn[:, 1], s=80, c=y_pred, cmap='brg', label='Samples')
plt.legend()
plt.show()

结果如下:

2.5 层次聚类

import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs'''参数:n_cluster:聚类数量    affinity:距离度量方法,可选 ‘euclidean’, ‘manhattan’,‘l1’,‘l2’,‘cosine’,‘precomputed’linkage:选择何种距离,可选’ward'(组间距离等于两类对象之间的最小距离),‘complete'(组间距离等于两组对象之间的最大距离),'average'(组间距离等于两组对象之间的平均距离),'single'(最近距离)distance_threshold:距离阈值,大于这个阈值后,不会合并compute_full_tree:是否生成一颗完整的树,设置成否可以节省计算开销属性:labels_ 聚类结果
'''
model = AgglomerativeClustering(n_clusters = 3, linkage = 'ward')
model.fit(Xn)    # 训练模型
y_pred= model.labels_# 画图显示样本数据
plt.figure('AgglomerativeCluster', facecolor='lightgray')
plt.title('AgglomerativeCluster', fontsize=16)
plt.tick_params(labelsize=10)
plt.scatter(Xn[:, 0], Xn[:, 1], s=80, c=y_pred, cmap='brg', label='Samples')
plt.legend()
plt.show()

结果如下:

2.6 密度噪声

import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobs'''参数:eps:两个样本之间的最大距离,即扫描半径  (最重要的两个参数)min_samples :作为核心点的话邻域(即以其为圆心,eps为半径的圆,含圆上的点)中的最小样本数(包括点本身)。(最重要的两个参数)metric :度量方式,默认为欧式距离,还有metric=‘precomputed’(稀疏半径邻域图)algorithm:近邻算法求解方式,有四种:‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’leaf_size:叶的大小,在使用BallTree or cKDTree近邻算法时候会需要这个参数n_jobs :使用CPU格式,-1代表全开属性:core_sample_indices_:核心样本指数。(此参数在代码中有详细的解释)labels_:数据集中每个点的集合标签给,噪声点标签为-1。components_ :核心样本的副本
'''
model = DBSCAN(eps=0.4, min_samples=8).fit(Xn)
y_pred = model.labels_
print(y_pred)# 画图显示样本数据
plt.figure('DBSCAN', facecolor='lightgray')
plt.title('DBSCAN', fontsize=16)
plt.tick_params(labelsize=10)
plt.scatter(Xn[:, 0], Xn[:, 1], s=80, c=y_pred, cmap='brg', label='Samples')
plt.legend()
plt.show()

结果如下:

2.7 平衡迭代层次聚类

import matplotlib.pyplot as plt
from sklearn.cluster import Birch
from sklearn.datasets import make_blobsmodel = Birch(n_clusters= 3, threshold= 0.2)
y_pred = model.fit_predict(Xn)
print(y_pred)# 画图显示样本数据
mp.figure('Birch', facecolor='lightgray')
mp.title('Birch', fontsize=16)
mp.tick_params(labelsize=10)
mp.scatter(Xn[:, 0], Xn[:, 1], s=80, c=y_pred, cmap='brg', label='Samples')
mp.legend()
mp.show()

结果如下:

2.8 高斯混合

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.mixture import GaussianMixture  # 高斯混合模型model = GaussianMixture(n_components=3)
y_pred = model.fit_predict(Xn)
print(y_pred)plt.figure('GMM', facecolor='lightgray')
plt.title('GMM', fontsize=16)
plt.tick_params(labelsize=10)
plt.scatter(Xn[:, 0], Xn[:, 1], s=80, c=y_pred, cmap='brg', label='Samples')
plt.legend()
plt.show()

结果如下:

2.9 双向聚类

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import SpectralBiclusteringmodel =  SpectralBiclustering(n_clusters=2).fit(Xn)
y_pred = model.row_labels_
print(y_pred)plt.figure('SpectralBiclustering', facecolor='lightgray')
plt.title('SpectralBiclustering', fontsize=16)
plt.tick_params(labelsize=10)
plt.scatter(Xn[:, 0], Xn[:, 1], s=80, c=y_pred, cmap='brg', label='Samples')
plt.legend()
plt.show()

结果如下:(有点小问题,好像目前只能两类,以后有时间再看看吧)

3、 聚类评价指标

未完待续…

sklearn聚类算法实现相关推荐

  1. sklearn聚类算法之HAC

    基本思想 层次凝聚聚类算法(Hierarchical Agglomerative Clustering)是一种效果很好的聚类算法,简称HAC,它的主要思想是先把每个样本点当做一个聚类,然后不断地将其中 ...

  2. sklearn聚类算法之Kmeans

    基本思想 K-Means聚类是最常见的一种聚类算法.在K-Means聚类中,算法试图把观察值分到k个组中,每个组的方差都差不多.分组的数量k是用户设置的一个超参数.具体来讲,K-Means算有如下几个 ...

  3. K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点

    分类知识   分类是根据样本某些属性或某类特征(可以融合多类特征),把样本类型归为已确定的某一类别中.机器学习中常见的分类算法有:SVM(支持向量机).KNN(最邻近法).Decision Tree( ...

  4. 内部和外部聚类算法评价指标

    目录 1.内部评价指标 1.1 Silhouette Coefficient(轮廓系数) sihoueette_score 参数介绍 silhouette_samples参数介绍 1.2 Calins ...

  5. 【聚类算法】sklearn聚类方法详解

    转自:https://blog.csdn.net/ustbbsy/article/details/80960652 感谢博主 1 KMeans 1.1 算法描述 随机选择k个中心 遍历所有样本,把样本 ...

  6. python 聚类算法包_Python聚类算法之DBSACN实例分析 python怎么用sklearn包进行聚类

    python 怎么可视化聚类的结果 science 发表的聚类算法的python代码 测试数据长什...说明你的样本数据中有nan值,通常是因为原始数据中包含空字符串或None值引起的. 解决办法是把 ...

  7. Sklearn参数详解—聚类算法

    总第115篇 前言 聚类是一种非监督学习,是将一份给定数据集划分成k类,这一份数据集可能是某公司的一批用户,也可能是某媒体网站的一系列文章,如果是某公司的一批用户,那么k-means做的就是根据用户的 ...

  8. sklearn学习 6.聚类算法K-Means

    一.概述 1.无监督学习与聚类算法 学习了决策树,随机森林,PCA和逻辑回归,他们虽然有着不同的功能,但却都属于"有监 督学习"的一部分,即是说,模型在训练的时候,即需要特征矩阵X ...

  9. 《菜菜的机器学习sklearn课堂》聚类算法Kmeans

    聚类算法 聚类算法 无监督学习与聚类算法 sklearn中的聚类算法 KMeans KMeans是如何工作的 簇内误差平方和的定义和解惑 sklearn.cluster.KMeans 重要参数 n_c ...

最新文章

  1. Java Web项目第二次总结
  2. 重装IE后,ASP.NET无法按F5启动项目的解决方法
  3. 常见的几种异常类型 Exception
  4. 基于RSSI利用KNN位置指纹法的室内定位(卡尔曼滤波)及代码
  5. 铁乐学python_Day42_锁和队列
  6. 思考的乐趣:Matrix67数学笔记
  7. 零基础,两个月复习备考软考中级经验分享
  8. 华为是怎样研发的(10)——知识管理
  9. ubuntu护眼软件——Redshift
  10. C++ 应用程序无法正常启动0xc000007b
  11. 终于等到你:国内黑客团队360Vulcan公布iOS 12.1越狱漏洞细节
  12. 上元之夜,故宫亮起来!
  13. 浪子回头,不是因你,而是他心已倦
  14. 【机器视觉】Halcon 19安装教程详解
  15. 半加器、全加器的FPGA实现
  16. 你选择了你的记忆,和生活。
  17. 用汇编语言写51单片机程序开头为什么一般都这样:ORG 0000H LJMP MAIN ORG 0030H
  18. 电脑怎么进入linux系统,Linux系统怎么进入终端?三种方法帮你搞定!
  19. 十年风雨路,中国MES市场亟呼健康的生态系统
  20. 北航2021届计组 - 支持中断的CPU

热门文章

  1. 手机android怎么开机画面,安卓开机动画特效软件下载
  2. 简易的抽奖系统(二)
  3. 如何用CANSLIM法则选股
  4. torch has an invalid wheel.
  5. Response.addHeader()和Response.setHeader()的区别,别再傻傻分不清;
  6. docker启动无法指定配置文件
  7. 全国计算机等级考试三级网络技术选择题考点
  8. Acrel-6000/B电气火灾监控系统麻城广场设计与应用
  9. LZ77压缩算法原理剖析
  10. StringBuffer(史上最详细)