热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【机器学习】聚类方法实例——使用Kmeans算法实现数据聚类分析

【机器学习】聚类方法实例——使用K-means算法实现数据聚类分析一、聚类目标1.K-Means(K均值)聚类算法步骤:优点:缺点:二、使


【机器学习】聚类方法实例——使用K-means算法实现数据聚类分析

  • 一、聚类目标
    • 1.K-Means(K均值)聚类
        • 算法步骤:
        • 优点:
        • 缺点:
  • 二、使用步骤
    • 1.生成数据
    • 2.使用K-means算法进行聚类
    • 3.评价聚类结果
    • 4.用silhouette选择K-means聚类的簇数:
    • 5.使用不同聚类方法
  • 完整代码
  • 总结
  • 参考


一、聚类目标

簇内相似度高,且簇间相似度低(高内聚,低耦合)(high-intra-class,low-inter-class)


1.K-Means(K均值)聚类


算法步骤:

(1) 首先我们选择一些类/组,并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。
(2) 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。
(3) 计算每一类中中心点作为新的中心点。
(4) 重复以上步骤,直到每一类中心在每次迭代后变化不大为止。也可以多次随机初始化中心点,然后选择运行结果最好的一个。


优点:

速度快,计算简便


缺点:

必须提前知道数据有多少类/组。
K-Medians是K-Means的一种变体,是用数据集的中位数而不是均值来计算数据的中心点。
K-Medians的优势是使用中位数来计算中心点不受异常值的影响;缺点是计算中位数时需要对数据集中的数据进行排序,速度相对于K-Means较慢。


二、使用步骤


1.生成数据

#导入需要的库
from numpy import unique
from numpy import where
from sklearn.datasets import make_classification
from sklearn.preprocessing import LabelEncoder, StandardScaler
from matplotlib import pyplot# 将生成的分类数据集用图形化显示
X,y = make_classification(n_samples=5000, n_features=2,n_informative=2, n_redundant=0,n_classes=3,n_clusters_per_class=1,random_state=1)
# 数据集标准化操作
X = StandardScaler().fit_transform(X)
clusters_temp = unique(y)
for cluster_temp in clusters_temp:row_ix = where(y == cluster_temp)pyplot.scatter(X[row_ix,0],X[row_ix,1])
pyplot.show()#显示数据集分布情况
# y.shape

2.使用K-means算法进行聚类

from sklearn.cluster import KMeans
from matplotlib import pyplot
from numpy import unique
from numpy import where
from matplotlib import pyplotmodel = KMeans(n_clusters=3)#聚类类别为2
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)pyplot.scatter(X[row_ix,0],X[row_ix,1])
pyplot.show()

分类后是这个样子:
在这里插入图片描述


3.评价聚类结果

from sklearn import metrics
from sklearn.metrics import davies_bouldin_score
print("Adjusted Rand-Index: %.3f" % metrics.adjusted_rand_score(y,yhat))
print("davies bouldin index: %.3f"% metrics.davies_bouldin_score(X,yhat))

评价结果如下:
在这里插入图片描述


4.用silhouette选择K-means聚类的簇数:

import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_scorerange_n_clusters = [2, 3, 4, 5, 6]for n_clusters in range_n_clusters:clusterer = KMeans(n_clusters=n_clusters, random_state=10)cluster_labels = clusterer.fit_predict(X)silhouette_avg = silhouette_score(X, cluster_labels)print("For n_clusters =",n_clusters,"The average silhouette_score is :",silhouette_avg,)

结果显示分成3簇的时候效果最好
在这里插入图片描述


5.使用不同聚类方法

from sklearn.cluster import Birchmodel = Birch(n_clusters=3)yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)pyplot.scatter(X[row_ix,0],X[row_ix,1])
pyplot.show()print("The Birch adjusted_rand_score is:",metrics.adjusted_rand_score(y,yhat))
print("The Birch davies_bouldin_score is:",metrics.davies_bouldin_score(X,yhat))

结果如下:
在这里插入图片描述


完整代码

#导入库
import numpy as np
from numpy import unique
from numpy import where
from matplotlib import pyplot
from sklearn.datasets import make_classification
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score# 生成数据集
X,y = make_classification(n_samples=5000, n_features=2,n_informative=2, n_redundant=0,n_classes=3,n_clusters_per_class=1,random_state=1)
X = StandardScaler().fit_transform(X)
################################################################################
range_n_clusters = [2, 3, 4, 5, 6]
for n_clusters in range_n_clusters: clusterer = KMeans(n_clusters=n_clusters, random_state=10)cluster_labels = clusterer.fit_predict(X)silhouette_avg = silhouette_score(X, cluster_labels)print("For n_clusters =",n_clusters,"The average silhouette_score is :",silhouette_avg,)
################################################################################
model = KMeans(n_clusters=3)#聚类类别为2
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)pyplot.scatter(X[row_ix,0],X[row_ix,1])
pyplot.show()
print("The KMeans Adjusted Rand-Index: %.3f" % metrics.adjusted_rand_score(y,yhat))
print("The KMeans davies bouldin index: %.3f"% metrics.davies_bouldin_score(X,yhat))
################################################################################
from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(n_clusters=3)
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)pyplot.scatter(X[row_ix,0],X[row_ix,1])
pyplot.show()
print("The AgglomerativeClustering adjusted_rand_score is:",metrics.adjusted_rand_score(y,yhat))
print("The AgglomerativeClustering davies_bouldin_score is:",metrics.davies_bouldin_score(X,yhat))
################################################################################
from sklearn.cluster import SpectralClustering
model = SpectralClustering(n_clusters=3)
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)pyplot.scatter(X[row_ix,0],X[row_ix,1])
pyplot.show()
print("The SpectralClustering adjusted_rand_score is:",metrics.adjusted_rand_score(y,yhat))
print("The SpectralClustering davies_bouldin_score is:",metrics.davies_bouldin_score(X,yhat))
################################################################################
from sklearn.cluster import Birch
model = Birch(n_clusters=3)
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)pyplot.scatter(X[row_ix,0],X[row_ix,1])
pyplot.show()
print("The Birch adjusted_rand_score is:",metrics.adjusted_rand_score(y,yhat))
print("The Birch davies_bouldin_score is:",metrics.davies_bouldin_score(X,yhat))

结果如下:
在这里插入图片描述
在这里插入图片描述


总结

以上是关于聚类方法实例的一种实现方法,供大家参考。


参考

常见的六大聚类算法


推荐阅读
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 机器学习中的标准化缩放、最小-最大缩放及鲁棒缩放技术解析 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 通过使用 `pandas` 库中的 `scatter_matrix` 函数,可以有效地绘制出多个特征之间的两两关系。该函数不仅能够生成散点图矩阵,还能通过参数如 `frame`、`alpha`、`c`、`figsize` 和 `ax` 等进行自定义设置,以满足不同的可视化需求。此外,`diagonal` 参数允许用户选择对角线上的图表类型,例如直方图或密度图,从而提供更多的数据洞察。 ... [详细]
  • 每年,意甲、德甲、英超和西甲等各大足球联赛的赛程表都是球迷们关注的焦点。本文通过 Python 编程实现了一种生成赛程表的方法,该方法基于蛇形环算法。具体而言,将所有球队排列成两列的环形结构,左侧球队对阵右侧球队,首支队伍固定不动,其余队伍按顺时针方向循环移动,从而确保每场比赛不重复。此算法不仅高效,而且易于实现,为赛程安排提供了可靠的解决方案。 ... [详细]
  • 针对图像分类任务的训练方案进行了优化设计。通过引入PyTorch等深度学习框架,利用其丰富的工具包和模块,如 `torch.nn` 和 `torch.nn.functional`,提升了模型的训练效率和分类准确性。优化方案包括数据预处理、模型架构选择和损失函数的设计等方面,旨在提高图像分类任务的整体性能。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 在Java基础中,私有静态内部类是一种常见的设计模式,主要用于防止外部类的直接调用或实例化。这种内部类仅服务于其所属的外部类,确保了代码的封装性和安全性。通过分析JDK源码,我们可以发现许多常用类中都包含了私有静态内部类,这些内部类虽然功能强大,但其复杂性往往让人感到困惑。本文将深入探讨私有静态内部类的作用、实现方式及其在实际开发中的应用,帮助读者更好地理解和使用这一重要的编程技巧。 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • 在Python多进程编程中,`multiprocessing`模块是不可或缺的工具。本文详细探讨了该模块在多进程管理中的核心原理,并通过实际代码示例进行了深入分析。文章不仅总结了常见的多进程编程技巧,还提供了解决常见问题的实用方法,帮助读者更好地理解和应用多进程编程技术。 ... [详细]
  • 本文探讨了基于点集估算图像区域的Alpha形状算法在Python中的应用。通过改进传统的Delaunay三角剖分方法,该算法能够生成更加灵活和精确的形状轮廓,避免了单纯使用Delaunay三角剖分时可能出现的过大三角形问题。这种“模糊Delaunay三角剖分”技术不仅提高了形状的准确性,还增强了对复杂图像区域的适应能力。 ... [详细]
author-avatar
拍友2502935047
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有