实训 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
  • K-means聚类算法

    K means 是我们最常用的基于欧式距离的聚类算法 xff0c 其认为两个目标的距离越近 xff0c 相似度越大 本文大致思路为 xff1a 先介绍经典的牧师 村名模型来引入 K means 算法 xff0c 然后介绍算法步骤和时间复杂度
  • 一文速学数模-K-means聚类算法实战:信用卡用户画像聚类分析

    目录 前言 一 用户画像概述 1 用户画像 2 为何用聚类算法作用户画像 二 数据质量校验 1 数据背景 2 数据说明 三 数据预处理 1 数据空缺值检验 2 数据归一化 四 K means聚类 step1 选取K值 手肘法 step2 计
  • 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
  • sklearn专题六:聚类算法K-Means

    目录 1 概述 1 1 无监督学习与聚类算法 1 2 sklearn中的聚类算法 2 KMeans 2 1 KMeans是如何工作的 2 2 簇内误差平方和的定义和解惑 2 3 KMeans算法的时间复杂度 3 sklearn cluste
  • 实训 wine数据集_基于wine的K-Means聚类模型研究

    摘要 xff1a 本文通过使用wine数据集来构建K Means聚类模型 xff0c 先对wine数据集的原始样本进行数据预处理 xff0c 得到预处理后的数据作为我们的新数据样本 xff0c 通过sklearn的估计器接收进行学习的数据用
  • sklearn实战-----6.聚类算法K-Means

    1 概述 1 1 无监督学习与聚类算法 在过去的五周之内 xff0c 我们学习了决策树 xff0c 随机森林 xff0c 逻辑回归 xff0c 他们虽然有着不同的功能 xff0c 但却都属于 有监督学习 的一部分 xff0c 即是说 xff
  • wine 安装(ubuntu中安装windows下软件)

    wine xff1a 能够在多种 POSIX compliant 操作系统 xff08 诸如 Linux xff0c Mac OSX 及 BSD 等 xff09 上运行 Windows 应用的兼容层 https baike baidu co
  • CentOS下yum安装wine

    Linux下安装wine可以从源码编译安装 xff0c 但一般都觉得麻烦 xff0c 所以尽量利用yum进行安装 xff0c 解决很多包的依赖关系 首先安装一个epel rpm ivh http dl Fedoraproject org p
  • 实训 wine数据集_基于wine的K-Means聚类模型研究

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

    Winehq团队于2023年1月24日发布了最新稳定版本8 0 其源代码可以从其官方网站下载 您还可以使用包管理器来安装 wine Wine 是 Windows API 的开源实现 并且始终是免费软件 大约一半的源代码是由其志愿者编写的 其
  • 如何在基于 Debian 的系统上从源代码安装 Wine

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

    wine下中文的配置方案 步骤 1 初始设置 运行 winecfg 把模拟的 Windows 系统设置为 Windows XP 或者 Windows 2000 不过亲测非必须 2 准备字体 为了让 Windows 应用程序看上去更美观 所以
  • 如何在 Ubuntu 20.04 上安装和使用 Wine

    Wine 是一个开源兼容层 允许您在类 Unix 操作系统 例如 Linux FreeBSD 和 macOS 上运行 Windows 应用程序 Wine是 Wine Is Not an Emulator 的缩写 它将 Windows 系统调
  • 如何在 Linux 上从 python 调用 Wine dll?

    我正在 Linux 中编写 python 脚本 需要调用 Wine 中可用的一些 Windows 函数 具体来说 AllocateAndInitializeSid and LookupAccountSidW 以确定谁登录到远程 Window
  • 通过 wine metaeditor.exe 通过命令行编译 MQL4

    我试图达到可以通过命令行进行编译 语法检查的程度 这样我就可以避免使用元编辑器进行代码管理 我正在使用这个命令 也尝试使用 s 和 log wine metaeditor exe compile MQL4 Experts MACD Samp
  • 依赖项中的共享文档文件导致事务错误

    我最近在桌面上安装了 Fedora 24 Workstation 并且能够毫无问题地安装所有内容 直到我尝试安装 steam 来自 rpmfusion 和 wine steam 和 wine 都具有 32 位库的依赖项 这些库已安装在 64
  • 使用 wine 在 Linux 上使用 win32com 自动化 excel

    我有一个相当复杂的 Excel 2010 文件 我使用 python 和 win32com 将其自动化 为此 我在 ubuntu 机器上的虚拟框中运行 Windows 然而 同一个 excel 文件直接使用 wine 1 3 在 Ubunt
  • 如何在通过Wine运行的Linux程序和Windows程序(同一台计算机)之间共享内存?

    有没有办法 以及如何 在通过 wine 运行的 linux 程序和 windows 程序之间共享内存 由于可能很难理解为什么要做这样的事情 我给你我的情况 我有一个仅为 Windows 编译的专有程序 但该程序有一个开放的 C 插件 API

随机推荐