实训 wine数据集_基于wine的K-Means聚类模型研究

2023-05-16

摘要:

本文通过使用wine数据集来构建K-Means聚类模型,先对wine数据集的原始样本进行数据预处理,得到预处理后的数据作为我们的新数据样本,通过sklearn的估计器接收进行学习的数据用于训练算法,构建聚类模型;完成模型构建对模型进行评价分析,本文具体对FMI评价法、轮廓系数评价法、Calinski-Harabasz指数评价法三种评价方法进行具体的介绍和操作。通过metrics模块提供的聚类模型评价指标,我们可以对比真实target和聚类tatget求取FMI评分,同时对于范围内的类别数目我们也可以通过评价指标得到模型的最优解,确定聚类的最优数目;求取范围内的类别数目我们求取轮廓系数,绘制对应系数的折线图,确定最优聚类数目;第三种对范围内的类别数目求取Calinski-Harabasz指数,确定最优的聚类数目。三种评估方法对实际模型评估方式皆有不同,结合三种评价方法与模型的实际情况我们进行对比可以发现FMI评价方法对于此模型的评估参考价值最高。

前言:

skleran数据分析的基本任务主要体现在分类、聚类、回归三类上,而不同的类又有许多种评估方法,用以对我们所构建的模型进行评价,得到最优模型。

目标:

对winedataset构建K-Means聚类模型:

具体步骤:

1、首先通过pandas文件读取方法读取wine数据集的数据,代码如下:

2、通过观察数据的字段我们可以将wine数据区分成两个部分,即数据部分和target部分,代码如下:

3、得到wine数据的两个部分以后我们开始对数据进行分割成训练集train和测试集test,代码如下:

其中我们的train_test_split()方法参数分别是wine的数据部分和wine的target部分,两个参数分别分割成对应的训练集和测试集,所以return的有四个参数,我们分别以wineDataTrain、wineDataTest、wineTargetTrain、wineTargetTest代表wine数据训练集、wine数据测试集、wineTarget训练集、wineTarget测试集,test_size=0.1意义是将训练集和测试集以1:9的比例进行划分,random_state=23保证结果重现

4、数据预处理过程,对特征进行标准差标准化,即sklearn中模块StandardScaler进行规则生成,代码如下:

这部分主要是对数据特征进行标准差标准化操作,逻辑步骤是我们根据步骤三得到的有wineDataTrain和wineDataTest,在生成规则的时候我们需要根据训练集的数据来对规则进行“训练”,得到我们需要的Scaler之后分别应用于训练集和测试集,最后再用transformer转换器的transform方法对特征进行转换返回给我们的wineDataTrainScaler和wineDataTestScaler两个样本,这样就完成了我们的数据预处理的基本操作

5、数据预处理的最后一个步骤,我们对得到的两个样本需要进行PCA降维,代码如下:

降维的逻辑和标准化操作相似,首先根据我们步骤四得到的wineDataTrainScaler和wineDataTestScaler两个样本作为我们此处操作的初始样本,载用pca的转换器对特征进行转换返回,完成降维。即通过Scaler训练样本对pca“规则”进行训练,然后将pcs分别应用于Scaler的训练集样本和测试集样本,以上五步我们就完成了我们的全部预处理过程。

完成数据预处理后我们可以开始对wine数据进行建模,首先我们通过步骤一可以发现在数据中并没有tag,所以我们可以构建一个聚类模型,同时对模型的好坏进行评估。

6、根据上面的逻辑我们先对模型进行构建,构建一个聚类数目为3的KMeans模型,代码如下:

通过wineDataTrainScaler,也就是我们在数据预处理最后一步中的转换数据作为我们的建模初始样本

7、模型聚类数目为3的模型构建完毕,我们需要通过对比wine数据的真实标签,即wineTagetTrain和聚类后的标签进行比较,对模型进行评价,代码如下:

因为我们聚类数目是根据自己的经验来选取,但是该数目不一定是最优,我们要怎么判断KMeans聚类模型的最优聚类数目是多少,所以还需要进一步分析。FMI评价法本身需要真实值,也就是我们的wineTargetTrain样本数据。

8、我们在2-10次聚类数目中进行分析比较,为了保证准确也可以扩大聚类数目范围,但是聚类数目为3本身就是最优解,为了减少我们的机器运行时间,这里取2-10为例,代码如下:

从FMI评分中我们可以看出评分最高的聚类数目为第三次聚类模型,达到了0.925的评分(最佳值为1.0),所以我们的选取数目3即为FMI认可的最优聚类次数

9、但是仅用一种评价方法的说服力不足,所以我们在用轮廓系数评价法来对聚类次数进行选择,代码如下:

这里我们可以看到我们评价中fit的给定参数与FMI的参数不同,原因在于FMI需要真实值,而轮廓系数评价法不需要真实值,根据其畸变程度越大越优我们可以观察到图中3、5时畸变程度最大,所以轮廓系数评价法认为聚类次数为3和5的时候为最优解,而3畸变略大于5,但是根据图像并不能很直观看出区别

10、在这里我们再通过另一个不需要真实值的评价方法来对模型聚类次数进行分析,代码如下:

Calinski-Harabasz指数评价法最佳值为相较最大时为最优解,其数值大部分与聚类的种类呈正相关,我们可以发现最优的聚类次数为10次

总结:

三种方法我们可以分析,FMI评价法认为的最优解为3次聚类数目,而轮廓系数评价法认为最优解为3和5,其中3略胜于5的聚类数目,在Calinski-Harabasz指数评价法中最优聚类数目为10次,通过增大我们的范围可以判断出第三种,即Calinski-Harabasz指数评价法不适用该聚类模型。后两者的聚类模型评估方法在没有真实值作为参考的时候能够达到我们预期效果,但是在这个wine模型中我们很明显的是有Target部分,即我们的数据标签,所以本身有真实值,自然使用FMI评价法可以很好的评估我们此聚类模型。没有真实值的时候后两者结合则可以得到一个很好的结果。

wine的K-Means聚类模型总代码如下:

import pandas as pd
wine=pd.read_csv('wine.csv')
wine.head()
#data daparting
wineData=wine.iloc[:,1:]
wineTarget=wine.iloc[:,0]
print('wineData:n',wineData.head(2))
print("wineTarget:n",wineTarget.head(2))
#data spliting
from sklearn.model_selection import train_test_split
wineDataTrain,wineDataTest,wineTargetTrain,wineTargetTest=train_test_split(wineData,wineTarget,test_size=0.1,random_state=23)
print("wineDataTrain",wineDataTrain.shape)
print("wineDataTest",wineDataTest.shape)
print("wineTargetTrain",wineTargetTrain.shape)
print("wineTargetTest",wineTargetTest.shape)
#data preprocessing
import numpy as np
from sklearn.preprocessing import StandardScaler
#generate the stdScaler by wineDataTrain
stdScaler=StandardScaler().fit(wineDataTrain)
#stdScaler应用于训练集
wineDataTrainScaler=stdScaler.transform(wineDataTrain)
#stdScaler应用于测试集
wineDataTestScaler=stdScaler.transform(wineDataTest)
print("after trainsforming:")
print("np.var of :wineDataTrainScaler",np.var(wineDataTrainScaler))
print("np.mean of :wineDataTrainScaler",np.mean(wineDataTrainScaler))
print("np.var of :wineDataTestScaler",np.var(wineDataTestScaler))
print("np.mean of :wineDataTestScaler",np.mean(wineDataTestScaler))
#pca.transform
from sklearn.decomposition import PCA
#generate the pca by the wineDataTrainScaler
pca=PCA(n_components=5).fit(wineDataTrainScaler)
#将pca应用于训练集
wineDataTrainPca=pca.transform(wineDataTrainScaler)
#将pca应用于测试集
wineDataTestPca=pca.transform(wineDataTestScaler)
print('after pca.transform:')
print("wineDataTrainPca.shape",wineDataTrainPca.shape)
print("wineDataTestPca.shape",wineDataTestPca.shape)
#构建模型
from sklearn.cluster import KMeans
kmeans=KMeans(n_clusters=3,random_state=23).fit(wineDataTrainScaler)
print("The modeln",kmeans)
#FMI score
from sklearn.metrics import  fowlkes_mallows_score
score=fowlkes_mallows_score(wineTargetTrain,kmeans.labels_)
print("The score:n",score)
#2-10次聚类数目最优类次数
for i in range(2,11):
    kmeans=KMeans(n_clusters=i,random_state=23).fit(wineDataTrainScaler)
    score=fowlkes_mallows_score(wineTargetTrain,kmeans.labels_)
    print("第{}次聚类模型的FMI评分是:{}".format(i,score))
from sklearn.metrics import  silhouette_score
import matplotlib.pyplot as plt
silhouettteScore=[]
for i in range(2,11):
    kmeans=KMeans(n_clusters=i,random_state=23).fit(wine)
    score=silhouette_score(wine,kmeans.labels_)
    silhouettteScore.append(score)
plt.figure(figsize=(12,6))
plt.plot(range(2,11),silhouettteScore,linewidth=1.5,linestyle='-',color='red')
plt.show()
from sklearn.metrics import calinski_harabaz_score
for i in range(2,11):
    kmeans=KMeans(n_clusters=i,random_state=23).fit(wine)
    score=calinski_harabaz_score(wine,kmeans.labels_)
    print("第{}次聚类模型的Calinski-Harabasz指数评分是:{}".format(i,score))

wine的K-Means聚类模型效果如下:

The model:

The result:

The figure:

The Calinski-Harabasz:

欢迎大家加入人工智能圈参与交流

人工智能学习圈 - 知乎​www.zhihu.com
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实训 wine数据集_基于wine的K-Means聚类模型研究 的相关文章

  • Arch linux安装deepin-wine和微信(wechat)

    一 保证有国内的镜像源 xff0c 不然下载很慢 xff0c 没有国内包的镜像源 xff0c 则软件列表会少很多国内的软件 如果没有国内镜像源 xff0c 请修改镜像源 sudo vim etc pacman d mirrorlist s
  • CentOS下yum安装wine

    Linux下安装wine可以从源码编译安装 xff0c 但一般都觉得麻烦 xff0c 所以尽量利用yum进行安装 xff0c 解决很多包的依赖关系 首先安装一个epel rpm ivh http dl Fedoraproject org p
  • Arch Linux wine 微信、heidissql、chrome - AUR heplers - yay

    Intro span class token function uname span a Linux arch 5 10 16 arch1 1 span class token comment 1 SMP PREEMPT Sat 13 Fe
  • K-means聚类算法

    K means 是我们最常用的基于欧式距离的聚类算法 xff0c 其认为两个目标的距离越近 xff0c 相似度越大 本文大致思路为 xff1a 先介绍经典的牧师 村名模型来引入 K means 算法 xff0c 然后介绍算法步骤和时间复杂度
  • sudo apt-get install wine 速度非常慢的解决方法

    经过我的测试 xff0c 在有的ubuntu系统中 xff0c 比如linux mint中 xff0c 我发现 sudo apt get install wine 的速度平均以b s为单位进行传输 xff0c 这样的速度非常的慢 xff0c
  • kmeans python 多维_使用 k-means 聚类算法对多维属性数据进行分类

    数据形式如下 xff1a 前期数据整合 xff1a import pandas as pd import scipy import scipy cluster hierarchy as sch from scipy cluster vq i
  • Fuzzy C-Means Clustering(模糊C均值)

    别看了 有错的 我懒得改了 强推https www bilibili com video BV18J411a7yY t 61 591 看完你还不会那我也没办法了 算法原理 模糊c 均值聚类算法 fuzzy c means algorithm
  • [549]python实现K-Means算法

    K Means是一种聚类 Clustering 算法 xff0c 使用它可以为数据分类 K代表你要把数据分为几个组 xff0c 前文实现的K Nearest Neighbor算法也有一个K xff0c 实际上 xff0c 它们有一个相似之处
  • 【Python与机器学习】5.K-Means聚类

    聚类 xff08 clustering xff09 什么是聚类 聚类属于无监督学习 xff08 unsupervised learning xff09 xff0c 即无类别标记 是数据挖掘经典算法之一 算法接收参数k xff1b 然后将样本
  • SKlearn里面的K-means使用详解

    在K Means聚类算法原理中 xff0c 我们对K Means的原理做了总结 xff0c 本文我们就来讨论用scikit learn来学习K Means聚类 重点讲述如何选择合适的k值 1 K Means类概述 在scikit learn
  • K-means聚类算法 伪代码 python3代码

    K means 算法及其代码 K means算法介绍K means 伪代码K means python 代码 K means算法介绍 链接 模式识别 聚类分析 K means 伪代码 计算两个点之间的欧式距离 span class toke
  • sklearn实战-----6.聚类算法K-Means

    1 概述 1 1 无监督学习与聚类算法 在过去的五周之内 xff0c 我们学习了决策树 xff0c 随机森林 xff0c 逻辑回归 xff0c 他们虽然有着不同的功能 xff0c 但却都属于 有监督学习 的一部分 xff0c 即是说 xff
  • 机器学习(二):聚类算法1——K-means算法

    Kmeans是一种经典的聚类算法 xff0c 所谓聚类 xff0c 是指在没有给出目标的情况下 xff0c 将样本根据某种关系分为某几类 那在kmeans中 xff0c 是根据样本点间的距离 xff0c 将样本n分为k个类 K means实
  • 解决安装wine时的依赖问题

    因为在Linux上没有比source insight更强大的代码工具了 xff0c 故在ubuntu上必须继续使用source insight 前段时间安装过wine xff0c 什么问题也没有 xff0c 安装命令 sudo apt ge
  • 实训 wine数据集_基于wine的K-Means聚类模型研究

    摘要 xff1a 本文通过使用wine数据集来构建K Means聚类模型 xff0c 先对wine数据集的原始样本进行数据预处理 xff0c 得到预处理后的数据作为我们的新数据样本 xff0c 通过sklearn的估计器接收进行学习的数据用
  • 如何在基于 Debian 的系统上从源代码安装 Wine

    作为 Windows 程序的狂热用户 您可能会发现有时需要在 Ubuntu 系统上使用特定程序 尽管还有其他选项 例如虚拟机或 Wine 等程序 它有助于在 Linux 上运行 Windows 程序 但它们涉及一些工作 而且并不是运行这些程
  • 如何在 Linux 上从 python 调用 Wine dll?

    我正在 Linux 中编写 python 脚本 需要调用 Wine 中可用的一些 Windows 函数 具体来说 AllocateAndInitializeSid and LookupAccountSidW 以确定谁登录到远程 Window
  • 如何在shell脚本中增加版本号?

    以下简单的版本控制脚本旨在查找给定文件的最后版本号 递增它 使用新创建的文件 例如编辑器 运行给定命令 然后将其保存到稳定版本 由于它很简单 因此不会检查任何内容 因为脚本会根据需要进行修改 例如 如果结果不稳定 用户可以省略最后一个参数
  • 使用 Ubuntu 在 Wine 中部署的 .NET 应用程序无法连接到 MySQL

    下面是链接 如何使用 MYSQL 在 C 中的 datagridview 中插入 删除 选择 更新值 https stackoverflow com questions 1518946 how to insert delete select
  • 在linux平台上使用dll win32 [重复]

    这个问题在这里已经有答案了 我想在 Linux 中使用 Win32 的 DLL 库 我可以使用 Wine 库来做到这一点吗 你应该能够使用winelib https wiki winehq org Winelib Here https we

随机推荐