机器学习 | 对K-Means聚类假设的研究演示及实践示例

我们在Scikit-learn对K-means假设的调查中探索了揭示算法优势和局限性的场景。我们研究了K-means对不正确的聚类大小的敏感性,它在各向异性分布中面临的困难,它在不同的聚类方差中面临的困难,以及使用合成数据集的大小不均匀的聚类问题。我们希望这些假设的这种可视化表示将澄清K-means的适用性,并强调选择特定于数据特征的聚类算法的重要性。

K-Means聚类

一种称为K-means聚类的无监督机器学习技术用于根据数据中的相似性模式将数据集划分为离散的组或聚类。该方法包括迭代地将数据点分配到聚类中,并优化每个聚类的质心,以减少每个数据点与分配的质心之间的总平方距离。K-means是一种可扩展且有效的方法来发现数据中的底层结构,它被广泛用于分割和模式识别任务。K-means虽然简单,但对于一些具有复杂结构的数据集可能很困难,因为它对初始聚类质心很敏感,并且假设球形,大小相等的聚类。

K-Means聚类中的假设

在我们深入研究代码之前,让我们彻底解释K-Means聚类的几个基本假设:

  • 球形和各向同性:K-means假设集群是球形和各向同性的,这意味着它们的半径在所有方向上近似相等。聚类中心被分配给算法根据聚类内数据点的平均值确定的均值。由于这种假设,K-means容易受到非球形或细长聚类的影响。
  • 方差相等:所有聚类都被假设为具有相同的方差。这表明对于每个聚类,聚类中心周围的数据点分布大致相同。如果聚类的方差差异明显,则K-means可能无法很好地工作。
  • 聚类大小:聚类大小相似性由K-means算法假设。具有更多数据点的聚类对聚类均值的影响更大,因为算法会将每个数据点分配给具有最接近均值的聚类。如果聚类的大小严重失衡,则算法可能无法正确描述底层数据分布。
  • 各向异性分布数据:当K均值聚类中的数据点具有各向异性分布时,它们表示各个维度具有不同扩展的非球形细长聚类。因此,K-means的球形聚类假设被打破,这降低了准确性。对于这种复杂的数据结构,其他技术(如高斯混合模型)可能更合适。

在Scikit Learn中实现k-means假设的演示

导入库

python 复制代码
# immporting Libraries
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
 
plt.figure(figsize=(10, 10))
 
# Custom parameters
n_samples_custom = 1600
random_state_custom = 42

合成数据

python 复制代码
# Generate blobs with different characteristics
X_custom, y_custom = make_blobs(
    n_samples=n_samples_custom, random_state=random_state_custom)

这段代码使用scikit-learn的make_blobs来创建一个包含1600个样本的合成数据集。然后对数据进行K均值聚类,其中n_clusters=3,聚类以散点图显示。为了重现性,参数random_state_custom和n_samples_custom调节数据集的大小和随机性。

python 复制代码
# Incorrect number of clusters
kmeans_1 = KMeans(n_clusters=2, random_state=random_state_custom)
y_pred_custom_1 = kmeans_1.fit_predict(X_custom)
 
plt.subplot(221)
plt.scatter(X_custom[:, 0], X_custom[:, 1], c=y_pred_custom_1)
plt.title("Incorrect Number of Blobs")

此代码将n_clusters=2的K-means聚类应用于合成数据集X_custom。接下来,使用plt.scatter,最终的聚类分配(y_pred_custom_1)显示在散点图中。"Incorrect Number of Blobs"子图是由子图(221)制成的较大图的一部分。

各向异性地分布簇

python 复制代码
# Anisotropicly distributed data
transformation_custom = [[0.5, -0.8], [-0.3, 0.6]]
X_aniso_custom = np.dot(X_custom, transformation_custom)
kmeans_2 = KMeans(n_clusters=3, random_state=random_state_custom)
y_pred_custom_2 = kmeans_2.fit_predict(X_aniso_custom)

plt.subplot(222)
plt.scatter(X_aniso_custom[:, 0], X_aniso_custom[:, 1], c=y_pred_custom_2)
plt.title("Anisotropicly Distributed Blobs")

将线性变换(transformation_custom)应用于数据集的原始特征,此代码将向其添加各向异性。接下来,使用n clusters=3,

K-means对变换后的数据进行聚类(X_aniso_custom)。在名为"Anisotropically Distributed Blobs"的子图中包含的散点图中,将显示最终的聚类指定(y_pred_custom_2)。

不等方差

python 复制代码
# Different variance
X_varied_custom, _ = make_blobs(n_samples=n_samples_custom, cluster_std=[
								1.0, 3.0, 0.5], random_state=random_state_custom)
kmeans_3 = KMeans(n_clusters=3, random_state=random_state_custom)
y_pred_custom_3 = kmeans_3.fit_predict(X_varied_custom)

plt.subplot(223)
plt.scatter(X_varied_custom[:, 0], X_varied_custom[:, 1], c=y_pred_custom_3)
plt.title("Unequal Variance")

此代码使用make_blobs函数创建具有不同聚类标准差的数据集(X_varied_custom)。接下来,将n_clusters=3的K均值聚类应用于数据集,并使用标题为"Unequal Variance"的散点图来可视化聚类分配(y_pred_custom_3)。

大小不一致的blobs

python 复制代码
# Unevenly sized blobs
X_filtered_custom = np.vstack(
    (X_custom[y_custom == 0][:500], X_custom[y_custom == 1][:100], X_custom[y_custom == 2][:10]))
kmeans_4 = KMeans(n_clusters=3, random_state=random_state_custom)
y_pred_custom_4 = kmeans_4.fit_predict(X_filtered_custom)
 
plt.subplot(224)
plt.scatter(X_filtered_custom[:, 0],
            X_filtered_custom[:, 1], c=y_pred_custom_4)
plt.title("Unevenly Sized Blobs")
 
plt.show()

此代码获取原始数据集(X_custom),并从每个聚类中选择不同数量的样本,以创建大小不均匀的数据集(X_filtered_custom)。修改数据集后,应用n_clusters=3的K-means聚类。然后,在名为"Unevenly sized blobs"的子图中使用散点图显示产生(y_pred_custom_4)的聚类分配。plt.show()显示完整的图形。

结论

在Scikit-Learn对K-means假设的演示中,我们系统地研究了算法假设可能被打破的场景。当我们从大小不正确的聚类开始时,首次观察到K均值对聚类数量的敏感性。各向异性分布的引入突出了K-means在管理非球形聚类方面的局限性,因为该算法默认形成球形聚类。对具有不同方差的聚类的调查突出了K均值在处理不均匀分布的聚类时所面临的困难。最后,不同大小的blob显示了算法对集群大小变化的敏感程度。每个场景都显示了可能的危险,强调理解K-means假设并根据数据集的特征选择合适的聚类方法是多么重要。更可靠的解决方案可以通过替代技术提供,如高斯混合模型,用于各向异性或大小不均匀的簇等复杂结构。该演示强调了根据数据属性仔细选择算法的重要性,并为从业者导航聚类算法的微妙之处提供了有用的见解。

相关推荐
Power202466641 分钟前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k1 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
知来者逆2 小时前
研究大语言模型在心理保健智能顾问的有效性和挑战
人工智能·神经网络·机器学习·语言模型·自然语言处理
老艾的AI世界3 小时前
新一代AI换脸更自然,DeepLiveCam下载介绍(可直播)
图像处理·人工智能·深度学习·神经网络·目标检测·机器学习·ai换脸·视频换脸·直播换脸·图片换脸
Chef_Chen4 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
AI街潜水的八角5 小时前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习
喵~来学编程啦5 小时前
【论文精读】LPT: Long-tailed prompt tuning for image classification
人工智能·深度学习·机器学习·计算机视觉·论文笔记
Chef_Chen7 小时前
从0开始学习机器学习--Day13--神经网络如何处理复杂非线性函数
神经网络·学习·机器学习
Troc_wangpeng7 小时前
R language 关于二维平面直角坐标系的制作
开发语言·机器学习