高斯混合模型(GMM)在鸢尾花数据集上的应用

高斯混合模型(GMM)是一种常用的聚类算法,它假设数据是由多个高斯分布混合而成的。在本文中,将探讨GMM在鸢尾花数据集上的应用,并比较不同协方差类型的表现。鸢尾花数据集是一个经典的多类分类问题,包含150个样本,每个样本有四个特征。

在进行聚类之前,通常会初始化高斯分布的均值。为了使比较有效,使用训练集中各类的均值来初始化高斯分布的均值。接下来,将在鸢尾花数据集上使用不同协方差类型的GMM,并绘制训练和测试数据的预测标签。

比较了具有球形、对角、全协方差和捆绑协方差矩阵的GMM。虽然全协方差通常预期会有最佳表现,但它在小数据集上容易过拟合,并且对测试数据的泛化能力不强。在图表中,训练数据以点的形式显示,而测试数据以叉号显示。鸢尾花数据集是四维的,但这里只显示了前两个维度,因此一些点在其他维度上是分开的。

代码实现

以下是使用Python和scikit-learn库实现上述GMM聚类的代码。代码中包含了数据加载、模型训练、预测以及结果可视化的完整流程。

import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np from sklearn import datasets from sklearn.mixture import GaussianMixture from sklearn.model_selection import StratifiedKFold colors = ["navy", "turquoise", "darkorange"] def make_ellipses(gmm, ax): for n, color in enumerate(colors): # 省略部分代码以节省空间... iris = datasets.load_iris() # 省略部分代码以节省空间... estimators = { cov_type: GaussianMixture(n_components=n_classes, covariance_type=cov_type, max_iter=20, random_state=0) for cov_type in ["spherical", "diag", "tied", "full"] } plt.figure(figsize=(3*n_estimators//2, 6)) plt.subplots_adjust(bottom=0.01, top=0.95, hspace=0.15, wspace=0.05, left=0.01, right=0.99) for index, (name, estimator) in enumerate(estimators.items()): # 省略部分代码以节省空间... plt.show()

在上述代码中,首先导入了必要的库,然后定义了一个函数来绘制高斯分布的椭圆。接着,加载了鸢尾花数据集,并将其分为训练集和测试集。然后,创建了不同协方差类型的GMM模型,并在训练集上进行了训练。最后,绘制了训练和测试数据的预测标签,并计算了训练和测试的准确率。

通过比较不同协方差类型的GMM在鸢尾花数据集上的表现,可以得出结论:虽然全协方差模型在理论上具有最佳性能,但在实际应用中,由于其容易过拟合的特点,可能并不是最佳选择。相反,对角协方差和捆绑协方差模型在本例中表现更好,具有较好的泛化能力。

总的来说,选择合适的协方差类型对于GMM模型的性能至关重要。在实际应用中,需要根据数据的特点和模型的需求来选择最合适的协方差类型。此外,通过可视化结果,可以更直观地理解模型的聚类效果,从而更好地评估和优化模型。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485