一、实验目的

根据wine数据集处理的结果,采用2种不同的聚类算法分别建聚类模型;然后,通过定量指标评价所构建的模型的优劣。

二、实验内容  

wine数据集和wine_quality数据集是两份和葡萄酒有关的数据集。

wine数据集包含3种同起源的葡萄酒的记录,共178条。其中,每个特征对应葡萄酒的每种化学成分,并且都属于连续型数据。通过化学分析可以推断葡萄酒的起源。

wine_quality数据集共有1599个观察值,11个输入特征和一个标签。其中,不同类的观察值数量不等,所有特征为连续型数据。通过酒的各类化学成分,预测该葡萄酒的评分。

(1) 使用pandas库分别读取wine数据集和wine_quality数据集;将wine数据集和wine_quality数据集的数据和标签拆分开;将wine数据集和wine_quality数据集划分为训练集和测试集;标准化wine数据集和wine_quality数据集;对wine数据集和wine_quality数据集进行PCA降维。

(2) 根据(1)的wine数据集处理的结果,采用2种不同的聚类算法分别构建聚类模型;然后,通过定量指标评价所构建的模型的优劣。

(3) 根据(1)的wine数据集处理的结果,采用2种不同的分类算法分别构建分类模型;然后,通过定量指标评价所构建的模型的优劣。

(4) 根据(1)的wine_quality数据集处理的结果,采用2种不同的回归算法分别构建回归模型;然后,通过定量指标评价所构建的模型的优劣。

三、实验步骤 (包含算法简介)

K-means

  • K-Means算法的简介

KMeans算法既是一种无监督的学习方式,又是一种聚类方法。

它的主要实现步骤如下:

首先对数据集当中的点,随机设置K个特征空间内的点作为初始的聚类中心点。然后对于其它的每个点,分别计算到它们到K个中心的距离(即:每个点都要经过k次计算),每个点经过k次计算之后,在这k个计算结果当中选择最近的一个聚类中心点作为标记类别。接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值),并且与旧的中心点作比较,如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程。

注:在算点与点之间的距离的时候,这个距离可以是欧氏距离,可以是曼哈顿距离,也可以是余弦距离。

算法流程图如下:

KMeans算法的主要优缺点有:

优点:

算法易于理解

缺点:

需要用户提前输入k值;

聚类结果对初始类簇中心的选取较为敏感;
容易陷入局部最优;
只能发现球型类簇;

  • 实验主要过程:

(1)数据集处理:

1.使用pandas库分别读取wine数据集和wine_quality数据集:

2.将wine数据集和wine_quality数据集的数据和标签拆分:

通过打印读取出来的数据集,发现wine数据集的标签为Class,而wine_quality数据集的标签为quality,所以可以进行拆分得到数据和标签。

3.将wine数据集和wine_quality数据集划分为训练集和测试集,这里用到了sklearn.model_selection模板里面的train_test_split函数,它的返回结果根据它传入的数据的组数,如果传入两组数据,那么就返回四组数据,传入一组数据,那么就返回两组数据。

4.标准化wine数据集和wine_quality数据集:

先生成标准化模型,然后对wine数据集的训练集进行标准化,再用训练集训练的模型对测试集标准化,wine_quality数据集的操作也是如此。

5.对wine数据集和wine_quality数据集进行PCA降维,直接降到二维:

先生成降维模型,该模型的n_components等于2,然后对步骤四中生成的标准化的wine训练集进行PCA降维,再用训练集降维的模型对测试集进行降维,对wine_quality数据集的操作也是如此。

  1. 聚类过程:1.根据上面数据处理的结果,先构建聚类数目为3的K-Means模型,这时候选取的数据集为经过PCA降维之后的二维wine训练集:wine_trainPca,

从图中可以看出当聚类数目为3类时,散点图基本上可以分为三种颜色的点。

2.对比真实标签和聚类标签求取FMI,并且在聚类数目为2到10类时,根据所求得FMI确定最优聚类数目。

​​​​​​​

每一个聚类数目下的FMI如图:

经过FMI计算发现,当聚类数目为3类时,它的FMI最大,此时为最优聚类数目。

3.根据模型的轮廓系数,绘制轮廓系数折线图,确定最优聚类数目:

根据样本输入进来的wine_trainPca数据集和这个数据集在每一个聚类数目下的标签,求取出样本在每一个聚类数目下的平均轮廓系数。

当聚类数目在2至10之间的时候,样本的平均轮廓系数的折线图为:

从图中可以看出,降维之后的数据集在聚类数目为3的时候,畸变程度最大,聚类效果最好。

4.求取 Calinski-Harabasz指数,确定最优聚类数:

​​​​​​​​​​​​​​

根据求取的Calinski-Harabasz指数,在这里聚3类和聚7类的效果都比较好,但是考虑到它是不需要真实值的,所有用它来评估最优聚类数目有点不可靠。

5.构建的模型的整体评估,确定最终的最优聚类数目:

通过分析FMI评价分值,可以看出wine数据集分为3类的时候其FMI值最高,故聚类为3类的时候wine数据集K-Means聚类效果最好

通过分析轮廓系数折线图,可以看出在wine数据集在分为3类的时候,其平均畸变程度最大,故亦可知聚类为3类的时候效果最佳

通过分析Calinski-Harabasz指数,我们发现其数值大体随着聚类的种类的增加而变多,最大值出现在聚类为7类的时候,考虑到Calinski-Harabasz指数是不需要真实值的评估方法,其可信度不如FMI评价法,故这里有理由相信这里的Calinski-Harabasz指数评价结果是存在异常的。

综上分析,wine数据集的K-Means聚类为3类的时候效果最好。

代码如下:

  1. import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.decomposition import PCA
    from sklearn.cluster import KMeans
    from sklearn.metrics import fowlkes_mallows_score
    from sklearn.metrics import silhouette_score
    from sklearn.metrics import calinski_harabasz_score
    import matplotlib.pyplot as plt  data1 = pd.read_csv('./wine.csv')
    data2 = pd.read_csv('./wine_quality.csv',sep = ';')
    print(data1)
    print(data2)  wine_data = data1.iloc[:,1:]
    wine_target = data1['Class']
    winequality_data = data2.iloc[:,:-1]
    winequality_target = data2['quality']  wine_data_train, wine_data_test, wine_target_train, wine_target_test = train_test_split(wine_data, wine_target,test_size=0.1, random_state=6)
    winequality_data_train, winequality_data_test, winequality_target_train, winequality_target_test = train_test_split(winequality_data, winequality_target, test_size=0.1, random_state=6)  stdScale1 = StandardScaler().fit(wine_data_train) #生成规则(建模)
    wine_trainScaler = stdScale1.transform(wine_data_train)#对训练集进行标准化
    wine_testScaler = stdScale1.transform(wine_data_test)#用训练集训练的模型对测试集标准化  stdScale2 = StandardScaler().fit(winequality_data_train)
    winequality_trainScaler = stdScale2.transform(winequality_data_train)
    winequality_testScaler = stdScale2.transform(winequality_data_test)  pca1 = PCA(n_components=2).fit(wine_trainScaler)
    wine_trainPca = pca1.transform(wine_trainScaler)
    wine_testPca = pca1.transform(wine_testScaler)  pca2 = PCA(n_components=2).fit(winequality_trainScaler)
    winequality_trainPca = pca2.transform(winequality_trainScaler)
    winequality_testPca = pca2.transform(winequality_testScaler)  #在聚类数目为2到10时,确定最优聚类数目
    for i in range(2,11):  kmeans = KMeans(n_clusters=i,random_state=32).fit(wine_trainPca)  score = fowlkes_mallows_score(wine_target_train,kmeans.labels_)  print('wine聚%d类FMI评价分为:%f'%(i,score))  #聚类为3的模型
    kmeans = KMeans(n_clusters=3,random_state=32).fit(wine_trainPca)
    plt.figure(figsize = (10,6))
    plt.scatter(wine_trainPca[:,0],wine_trainPca[:,1],c = kmeans.labels_)  #使用轮廓系数评估模型的优缺点,当聚类数目为3时,畸变程度最大,聚类效果最好
    silhouettteScore = []
    for i in range(2,11):  kmeans = KMeans(n_clusters = i,random_state=1).fit(wine_trainPca)  score = silhouette_score(wine_trainPca,kmeans.labels_)  silhouettteScore.append(score)
    plt.figure(figsize=(10,6))
    plt.plot(range(2,11),silhouettteScore,linewidth=1.5, linestyle="-")  #求取 Calinski-Harabasz指数,确定最优聚类数
    for i in range(2,11):  kmeans = KMeans(n_clusters = i,random_state=1).fit(wine_trainPca)  score = calinski_harabasz_score(wine_trainPca,kmeans.labels_)  print('wine数据集聚%d类calinski_harabasz指数为:%f'%(i,score))  plt.show()  

用K-Means算法处理wine数据集和wine_quality数据集相关推荐

  1. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  2. OTB数据集和VOT数据集融合跟踪算法接口示例

    OTB数据集和VOT数据集自己存数据接口参考代码: 一.OTB数据集(不使用tracker_benchmark_v1.0) 1.OTB数据结果最基本的格式 type为目标框类型: res为目标框的所在 ...

  3. K 均值算法-如何让数据自动分组

    公号:码农充电站pro 主页:https://codeshellme.github.io 目录 1,K 均值算法 2,K 均值算法聚类过程 3,K 均值算法的实现 4,准备数据点 5,对数据聚类 6, ...

  4. 在Ubuntu20.04系统上LIO-SAM跑KITTI数据集和自己数据集代码修改

    LIO-SAM跑KITTI数据集和自己数据集代码修改 一.编译并运行LIO-SAM 二.代码修改 1.cloud_info.msg 2.imageProjection.cpp 三.KITTI数据集准备 ...

  5. UEA数据集和UCR数据集的处理

    摘要:本文主要内容为针对tsv格式的UCR数据集和arff格式的UEA数据集进行处理,将其中的标签和数据分离出来,并转换为csv文件 目录 前言 数据集 UCR数据集处理 UEA数据集处理 总结 处理 ...

  6. Gowalla(美国微博)好友关系数据集和签到数据集

    数据内容:Gowalla(美国微博)好友关系数据集和签到数据集 (1)好友关系数据 好友关系数据集涵盖了196,591个用户的950,327条好友关系,每一条记录表示两两对应的朋友关系. (2)签到数 ...

  7. k means算法C语言伪代码,K均值算法(K-Means)

    1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...

  8. 对鸢尾花数据集和月亮数据集,分别采用线性LDA、k-means和SVM算法进行二分类可视化分析

    一.支持向量机 支持向量机是一个功能强大并且全面的机器学习模型,它可以执行线性或者非线性分类,回归甚至异常检测任务.其主要分为三类:线性SVM分类.软间隔分类.非线性SVM分类. 本篇博客将重点深入S ...

  9. Python机器学习:多项式回归与模型泛化004为什么需要训练数据集和测试数据集

    泛化能力:由此及彼能力 遇见新的拟合能力差 数据 #数据 import numpy as np import matplotlib.pyplot as plt x = np.random.unifor ...

最新文章

  1. 大华管理平台用户名_大华HOC智慧物流可视化联网追溯解决方案,助力物流行业更高效...
  2. 解决由于操作顺序问题导致 hbase 一直处于启动无法关闭的问题
  3. YBTOJ:灯光控制(贪心)(公倍数)(暴力枚举)
  4. 将serversocket 写在按钮事件中连接不上_看 Netty 在 Dubbo 中如何应用
  5. 【转载】Linux下用ls和du命令查看文件以及文件夹大小
  6. [Mac入门]如何在Mac下显示Finder中的所有文件
  7. VS2005中Build顺序的设定
  8. Uniapp进行APP打包——iOS 系统
  9. woj 1575 - Signal generators 单调队列优化dp + 瞎搞
  10. 基于JSP的鲜花店商城平台【数据库设计、源码、开题报告】
  11. 手把手教你在自己的扫描器中,集(bai)成(piao)大名鼎鼎的漏扫描工具nuclei
  12. COLORMAP_JET的颜色规律
  13. 【智能优化算法-正弦余弦算法】基于反向正弦余弦算法求解高维优化问题附matlab代码
  14. 异形布局 canvas画龙
  15. 论文阅读“Simple Contrastive Graph Clustering”(arxiv)
  16. python多维字典_python定义多维字典
  17. 内存对齐规则及为什么内存对齐
  18. HTML5 单页应用/框架 - View.js介绍
  19. 如何破解招聘面试中暗藏的八大玄机?
  20. jenkins内部分享ppt

热门文章

  1. 文华财经指标公式源码学习
  2. mmsegmentation教程2:如何修改loss函数、指定训练策略、修改评价指标、指定iterators进行val指标输出
  3. Linux学习笔记(二) -- Linux学习笔记(二) – 解决VMware主窗口中的虚拟机窗口太小的方法
  4. 使用钢笔工具进行抠图
  5. 深入Array.prototype.slice()方法
  6. 学linux好找工作吗?未来可以从事什么岗位?
  7. 各种安装包的下载地址
  8. mapbox样式规范(style)
  9. Hadoop  HA
  10. 在Ubuntu20.04中继续使用linux版“网络调试助手”的方法