sklearn聚类算法实现
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聚类算法实现相关推荐
- sklearn聚类算法之HAC
基本思想 层次凝聚聚类算法(Hierarchical Agglomerative Clustering)是一种效果很好的聚类算法,简称HAC,它的主要思想是先把每个样本点当做一个聚类,然后不断地将其中 ...
- sklearn聚类算法之Kmeans
基本思想 K-Means聚类是最常见的一种聚类算法.在K-Means聚类中,算法试图把观察值分到k个组中,每个组的方差都差不多.分组的数量k是用户设置的一个超参数.具体来讲,K-Means算有如下几个 ...
- K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点
分类知识 分类是根据样本某些属性或某类特征(可以融合多类特征),把样本类型归为已确定的某一类别中.机器学习中常见的分类算法有:SVM(支持向量机).KNN(最邻近法).Decision Tree( ...
- 内部和外部聚类算法评价指标
目录 1.内部评价指标 1.1 Silhouette Coefficient(轮廓系数) sihoueette_score 参数介绍 silhouette_samples参数介绍 1.2 Calins ...
- 【聚类算法】sklearn聚类方法详解
转自:https://blog.csdn.net/ustbbsy/article/details/80960652 感谢博主 1 KMeans 1.1 算法描述 随机选择k个中心 遍历所有样本,把样本 ...
- python 聚类算法包_Python聚类算法之DBSACN实例分析 python怎么用sklearn包进行聚类
python 怎么可视化聚类的结果 science 发表的聚类算法的python代码 测试数据长什...说明你的样本数据中有nan值,通常是因为原始数据中包含空字符串或None值引起的. 解决办法是把 ...
- Sklearn参数详解—聚类算法
总第115篇 前言 聚类是一种非监督学习,是将一份给定数据集划分成k类,这一份数据集可能是某公司的一批用户,也可能是某媒体网站的一系列文章,如果是某公司的一批用户,那么k-means做的就是根据用户的 ...
- sklearn学习 6.聚类算法K-Means
一.概述 1.无监督学习与聚类算法 学习了决策树,随机森林,PCA和逻辑回归,他们虽然有着不同的功能,但却都属于"有监 督学习"的一部分,即是说,模型在训练的时候,即需要特征矩阵X ...
- 《菜菜的机器学习sklearn课堂》聚类算法Kmeans
聚类算法 聚类算法 无监督学习与聚类算法 sklearn中的聚类算法 KMeans KMeans是如何工作的 簇内误差平方和的定义和解惑 sklearn.cluster.KMeans 重要参数 n_c ...
最新文章
- Java Web项目第二次总结
- 重装IE后,ASP.NET无法按F5启动项目的解决方法
- 常见的几种异常类型 Exception
- 基于RSSI利用KNN位置指纹法的室内定位(卡尔曼滤波)及代码
- 铁乐学python_Day42_锁和队列
- 思考的乐趣:Matrix67数学笔记
- 零基础,两个月复习备考软考中级经验分享
- 华为是怎样研发的(10)——知识管理
- ubuntu护眼软件——Redshift
- C++ 应用程序无法正常启动0xc000007b
- 终于等到你:国内黑客团队360Vulcan公布iOS 12.1越狱漏洞细节
- 上元之夜,故宫亮起来!
- 浪子回头,不是因你,而是他心已倦
- 【机器视觉】Halcon 19安装教程详解
- 半加器、全加器的FPGA实现
- 你选择了你的记忆,和生活。
- 用汇编语言写51单片机程序开头为什么一般都这样:ORG 0000H LJMP MAIN ORG 0030H
- 电脑怎么进入linux系统,Linux系统怎么进入终端?三种方法帮你搞定!
- 十年风雨路,中国MES市场亟呼健康的生态系统
- 北航2021届计组 - 支持中断的CPU