Python----数据分析-使用scikit-learn构建模型实训(wine数据集、wine_quality数据)


目录:

实训1 使用 sklearn处理wine和wine_quality数据集
实训2 构建基于wine数据集的k- Means聚类模型
实训3 构建基于wine数据集的SVM分类模型
实训4 构建基于wine_quality数据集的回归模型


wine数据集包含来自3种不同起源的葡萄酒的共178条记录。13个属性是葡萄酒的13种化学成分。通过化学分析可以来推断葡萄酒的起源。值得一提的是所有属性变量都是连续变量。


实训1 使用 sklearn处理wine和wine_quality数据集

1.训练要点

  • 掌握 sklearn转换器的用法。
  • 掌握训练集、测试集划分的方法。
  • 掌握使用sklearn进行PCA降维的方法。

2.需求说明

  • wine数据集和 winequality数据集是两份和酒有关的数据集。wine数据集包含3种 同起源的葡萄酒的记录,共178条。其中,每个特征对应葡萄酒的每种化学成分,并且都 属于连续型数据。通过化学分析可以推断葡萄酒的起源。
  • winequality数据集共有4898个观察值,11个输入特征和一个标签。其中,不同类的
    观察值数量不等,所有特征为连续型数据。通过酒的各类化学成分,预测该葡萄酒的评分

3.实现思路及步骤

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

import pandas as pd// 读取数据
wine_quality = pd.read_csv('data/winequality.csv',sep=';')
wine = pd.read_csv('data/wine.csv')
print(type(wine),type(wine_quality))
//<class 'pandas.core.frame.DataFrame'> <class 'pandas.core.frame.DataFrame'>// 提取 wine_quality 数据
wine_quality_data = wine_quality.iloc[:,:-1]
wine_quality_target = wine_quality['quality']
// 提取 wine 数据
wine_data = wine.iloc[:,:-1]
wine_target = wine['Class']

wine数据集和winequality数据集的表现形式不一样,这里的wine数据集可以直接读入,而winequality数据集在文件中是以”;”为间隔的,所以要采用间隔读入的方式获取其数据。读取后数据都以DataFrame的类型保留,使用iloc等切片操作提取所需数据。

// 将 wine_quality 数据划分为训练集和测试集
from sklearn.model_selection import train_test_splitwine_quality_data_train,wine_quality_data_test,\
wine_quality_target_train,wine_quality_target_test=\
train_test_split(wine_quality_data,wine_quality_target,test_size=0.2,random_state=321)wine_data_train,wine_data_test,\
wine_target_train,wine_target_test=\
train_test_split(wine_data,wine_target,test_size=0.2,random_state=321)


train_test_split()函数将数据集划分为训练集和测试集两部分,参数test_size=0.2代表着测试集在总数中的占比,通过计算wine_data总共178条记录,wine_data_test有36条,占0.20224171(20%),参数random_state=321,表示随机种子编号,方便测试时得到相同随机结果。

// 标准化数据集
from sklearn.preprocessing import StandardScalerstdScaler = StandardScaler().fit(wine_data_train) // 生成标准化规则
wine_trainScaler = stdScaler.transform(wine_data_train) // 对训练集标准化
wine_testScaler = stdScaler.transform(wine_data_test) // 用训练集建立的模型对测试集标准化Scaler = StandardScaler().fit(wine_quality_data_train) // 生成标准化规则
winequality_trainScaler = Scaler.transform(wine_quality_data_train) // 对训练集标准化
winequality_testScaler = Scaler.transform(wine_quality_data_test) // 用训练集建立的模型对测试集标准化

这里有个顺序:生成标准化规则;对训练集标准化;用训练集建立的模型对测试集标准化
主要是因为在数据分析的时候,各类特征处理相关的操作都需要对训练集和测试集分开进行,同时需要将训练集的操作规则、权重系数等应用到测试集中。这也就是为什么生成规则时fit传入训练集。transform函数紧接着将定义好的规则应用对传入的特征进行对应转换。

// PCA降维
from sklearn.decomposition import PCApca_model = PCA(n_components=5).fit(wine_trainScaler) // 生成PCA规则
wine_trainpca = pca_model.transform(wine_trainScaler) // 将规则应用到训练集
wine_testpca = pca_model.transform(wine_testScaler)   // 将规则应用到测试集 pca_model = PCA(n_components=5).fit(winequality_trainScaler) // 生成PCA规则
winequality_trainpca = pca_model.transform(winequality_trainScaler) // 将规则应用到训练集
winequality_testpca = pca_model.transform(winequality_testScaler)   #// 将规则应用到测试集

PCA(n_components=5)的参数n_components表示将原始数据降低到n个维度。

返回顶部


实训2 构建基于wine数据集的k- Means聚类模型

1.训练要点

  • 了解sklearn估计器的用法。
  • 掌握聚类模型的构建方法。
  • 掌握聚类模型的评价方法。

2.需求说明

  • wine数据集的葡萄酒总共分为3种,通过将wine数据集的数据进行聚类,聚集为3 个簇,能够实现葡萄酒的类别划分。

3.实现思路及步骤

  • 根据实训1的wine数据集处理的结果,构建聚类数目为3的- -Means模型
  • 对比真实标签和聚类标签求取FMI
  • 聚类数目为2~10类时,确定最优聚类数目。
  • 求取模型的轮廓系数,绘制轮廓系数折线图,确定最优聚类数目。
  • 取 Calinski-Harabasz-指数,确定最优聚类数目。
// 构建 K-Means 模型
from sklearn.cluster import KMeanskmeans = KMeans(n_clusters=3,random_state=32).fit(wine_trainScaler) //构建训练模型
print('wine_trainScaler构建的模型为:\n',kmeans)
//wine_trainScaler构建的模型为:KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,n_clusters=3, n_init=10, n_jobs=None, precompute_distances='auto',random_state=32, tol=0.0001, verbose=0)

构建K-Means聚类模型,参数n_clusters=3表示要形成的团簇数目,也就是分为几类,这里是分为3类。

// 对比真实标签和聚类标签求取FMI
from sklearn.metrics import fowlkes_mallows_score //FMI评价法score=fowlkes_mallows_score(wine_target_train,kmeans.labels_)
print("wine数据集的FMI:%f"%(score))
//wine数据集的FMI:0.901648//在聚类数目为2~10类时,确定最优聚类数目
from sklearn.metrics import fowlkes_mallows_score
from sklearn.cluster import KMeansfor i in range(2,11):kmeans = KMeans(n_clusters=i,random_state=32).fit(wine_trainScaler)score = fowlkes_mallows_score(wine_target_train,kmeans.labels_)print('wine聚%d类FMI评价分为:%f'%(i,score))wine聚2类FMI评价分为:0.693972
wine聚3类FMI评价分为:0.901648
wine聚4类FMI评价分为:0.801280
wine聚5类FMI评价分为:0.775956
wine聚6类FMI评价分为:0.782225
wine聚7类FMI评价分为:0.607152
wine聚8类FMI评价分为:0.570184
wine聚9类FMI评价分为:0.567783
wine聚10类FMI评价分为:0.559720

// 求取模型的轮廓系数,绘制轮廓系数折线图,确定最优聚类数目
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=1).fit(wine)score = silhouette_score(wine,kmeans.labels_)silhouettteScore.append(score)
plt.figure(figsize=(10,6))
plt.plot(range(2,11),silhouettteScore,linewidth=1.5, linestyle="-")
plt.show()


求取模型的轮廓系数:

//求取 Calinski-Harabasz指数,确定最优聚类数
from sklearn.metrics import calinski_harabasz_score
for i in range(2,11):// 构建并训练模型kmeans = KMeans(n_clusters = i,random_state=1).fit(wine_trainScaler)score = calinski_harabaz_score(wine_trainScaler,kmeans.labels_)print('seeds数据聚%d类calinski_harabaz指数为:%f'%(i,score))seeds数据聚2类calinski_harabaz指数为:67.189882
seeds数据聚3类calinski_harabaz指数为:62.785275
seeds数据聚4类calinski_harabaz指数为:49.058796
seeds数据聚5类calinski_harabaz指数为:41.101132
seeds数据聚6类calinski_harabaz指数为:36.321948
seeds数据聚7类calinski_harabaz指数为:34.295581
seeds数据聚8类calinski_harabaz指数为:31.101151
seeds数据聚9类calinski_harabaz指数为:28.693663
seeds数据聚10类calinski_harabaz指数为:28.563627

分析FMI评价分值,可以看出wine数据分3类的时候其FMI值最高,故聚类为3类的时候wine数据集K-means聚类效果最好
分析轮廓系数折线图,可以看出在wine数据集为3的时候,其平均畸变程度最大,故亦可知聚类为3类的时候效果最佳

返回顶部


实训3 构建基于wine数据集的SVM分类模型

1.训练要点

  • 掌握sklearn估计器的用法。
  • 掌握分类模型的构建方法。
  • 掌握分类模型的评价方法。

2.需求说明

  • wine数据集中的葡萄酒类别为3种,将wie数据集划分为训练集和测试集,使用训练 集训练SVM分类模型,并使用训练完成的模型预测测试集的葡萄酒类别归属。

3.实现思路及步骤

  • 读取wine数据集,区分标签和数据。
  • 将wine数据集划分为训练集和测试集
  • 使用离差标准化方法标准化wine数据集。
  • 构建SVM模型,并预测测试集结果
  • 打印出分类报告,评价分类模型性能。
import pandas as pd// 读取数据
wine_quality = pd.read_csv('data/winequality.csv',sep=';')
wine = pd.read_csv('data/wine.csv')
// 提取 wine_quality 数据
wine_quality_data = wine_quality.iloc[:,:-1]
wine_quality_target = wine_quality['quality']
// 提取 wine 数据
wine_data = wine.iloc[:,:-1]
wine_target = wine['Class']from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.preprocessing import MinMaxScaler// 划分训练集、测试集
wine_data_train,wine_data_test,wine_target_train,wine_target_test=\
train_test_split(wine_data,wine_target,test_size=0.2,random_state=123)// 数据标准化规则
Scaler = MinMaxScaler().fit(wine_data_train)
// 应用规则
wine_trainScaler = Scaler.transform(wine_data_train) // 对训练集进行标准化
wine_testScaler = Scaler.transform(wine_data_test)    // 用训练集训练的模型对测试集标准化// 构建SVM分类模型
svm = SVC().fit(wine_trainScaler,wine_target_train)
print("建立的SVM模型为:\n",svm)
//建立的SVM模型为:SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None, coef0=0.0,decision_function_shape='ovr', degree=3, gamma='scale', kernel='rbf',max_iter=-1, probability=False, random_state=None, shrinking=True,tol=0.001, verbose=False)// 预测训练结果
wine_target_pred = svm.predict(wine_testScaler)
print('预测前20个结果为:',wine_target_pred[:20])
//预测前20个结果为: [3 2 3 2 2 3 1 3 3 2 3 3 3 1 1 3 2 2 1 2]
// 打印模型评价报告
from sklearn.metrics import classification_report
print('使用SVM预测数据的分析报告为:\n',classification_report(wine_target_test,wine_target_pred))
//使用SVM预测数据的分析报告为:precision    recall  f1-score   support1       1.00      1.00      1.00         82       1.00      1.00      1.00        113       1.00      1.00      1.00        17accuracy                           1.00        36macro avg       1.00      1.00      1.00        36
weighted avg       1.00      1.00      1.00        36

返回顶部


实训4 构建基于wine_quality数据集的回归模型

1.训练要点
(1)熟练sklearn估计器的用法。
(2)掌握回归模型的构建方法。
(3)掌握回归模型的评价方法。

2.需求说明

  • winequality数据集的葡萄酒评分在1~10之间,建线性回归模型与梯度提升回归模 型,训练 winequality数据集的训练集数据,训练完成后预测测试集的葡萄酒评分。结合 真实评分,评价构建的两个回归模型的好坏。

3.实现思路及步骤

  • 根据winequality数据集处理的结果,构建线性回归模型
  • 根据wine quality数据集处理的结果,构建梯度提升回归模型
  • 结合真实评分和预测评分,计算均方误差中值绝对误差、可解释方差值
  • 根据得分,判定模型的性能优劣。
// 构建线性回归模型
from sklearn.linear_model import LinearRegressionclf = LinearRegression().fit(winequality_trainpca,wine_quality_target_train)
y_pred = clf.predict(winequality_testpca)
print('线性回归模型预测前10个结果为:','\n',y_pred[:10])
线性回归模型预测前10个结果为: [5.27204611 5.16410891 6.93394979 6.52520955 5.56143289 5.028158695.17867439 5.95768188 5.68991275 5.33085457]
// 根据wine_quality数据集处理的结果,构建梯度提升回归模型。
from sklearn.ensemble import GradientBoostingRegressorgbr_wine = GradientBoostingRegressor().fit(winequality_trainpca,wine_quality_target_train)
wine_target_pred = gbr_wine.predict(winequality_testpca)
print('梯度提升回归模型预测前10个结果为:','\n',wine_target_pred[:10])
print('真实标签前10个预测结果为:','\n',list(wine_quality_target_test[:10]))
梯度提升回归模型预测前10个结果为: [5.4569842  5.1020336  6.39325331 6.55163291 5.62504565 5.167706195.22503393 5.6942301  5.43575267 5.22052962]
真实标签前10个预测结果为: [6, 5, 6, 7, 6, 6, 5, 6, 6, 5]
from sklearn.metrics import mean_absolute_error,mean_squared_error,median_absolute_error,explained_variance_score,r2_scoreprint('线性回归模型评价结果:')
print('winequality数据线性回归模型的平均绝对误差为:',mean_absolute_error(wine_quality_target_test,y_pred))
print('winequality数据线性回归模型的均方误差为:',mean_squared_error(wine_quality_target_test,y_pred))
print('winequality数据线性回归模型的中值绝对误差为:',median_absolute_error(wine_quality_target_test,y_pred))
print('winequality数据线性回归模型的可解释方差值为:',explained_variance_score(wine_quality_target_test,y_pred))
print('winequality数据线性回归模型的R方值为:',r2_score(wine_quality_target_test,y_pred))线性回归模型评价结果:
winequality数据线性回归模型的平均绝对误差为: 0.500442590483755
winequality数据线性回归模型的均方误差为: 0.4116335179704622
winequality数据线性回归模型的中值绝对误差为: 0.42681355355182804
winequality数据线性回归模型的可解释方差值为: 0.3304259967770349
winequality数据线性回归模型的R方值为: 0.32853409414296564print('梯度提升回归模型评价结果:')
print('winequality数据梯度提升回归树模型的平均绝对误差为:',mean_absolute_error(wine_quality_target_test,wine_target_pred))
print('winequality数据梯度提升回归树模型的均方误差为:',mean_squared_error(wine_quality_target_test,wine_target_pred))
print('winequality数据梯度提升回归树模型的中值绝对误差为:',median_absolute_error(wine_quality_target_test,wine_target_pred))
print('winequality数据梯度提升回归树模型的可解释方差值为:',explained_variance_score(wine_quality_target_test,wine_target_pred))
print('winequality数据梯度提升回归树模型的R方值为:',r2_score(wine_quality_target_test,wine_target_pred))  梯度提升回归模型评价结果:
winequality数据梯度提升回归树模型的平均绝对误差为: 0.49135412186249
winequality数据梯度提升回归树模型的均方误差为: 0.3929327053069297
winequality数据梯度提升回归树模型的中值绝对误差为: 0.4130905910176561
winequality数据梯度提升回归树模型的可解释方差值为: 0.3620462459660544
winequality数据梯度提升回归树模型的R方值为: 0.3590392827808905

对于一个回归模型来说,平均绝对误差、均方误差、中值绝对误差越接近0越好,可解释方差和R2值越接近1越好。通过对比两者的回归评价指标不难发现,线性回归模型的平均绝对误差、均方误差、中值绝对误差都要大于梯度回归模型,但是可解释方差和R2值都要小于梯度回归模型。因此,梯度回归模型在五个指标上都要优于线性回归模型,故在本实训中,梯度回归模型性能更优!

返回顶部


Python----数据分析-使用scikit-learn构建模型实训(wine数据集、wine_quality数据)相关推荐

  1. 【Python数据分析与可视化】Pandas统计分析-实训

    [Python数据分析与可视化]Pandas统计分析-实训 文章目录 [Python数据分析与可视化]Pandas统计分析-实训 导包 读取数据 分析数据 1.查看数据的描述和统计信息: 2.修改列名 ...

  2. Python数据分析及可视化之Seaborn可视化-实训

    文章中的素材StudentPerformance.csv下载链接 链接:https://pan.baidu.com/s/1gYIIqOyHLWfl21KaJsZvFA  提取码:7br2 实训的目的: ...

  3. python数据分析与可视化——第四章实训

    1.导入模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.san ...

  4. python数据分析与应用第五章实训 2_第五章实训(二)

    I/O 输入输出 2 : 1 . 使用字符流 BufferedReader 类,将一个文本文件 Test6_1.txt 的内容按行 读出,每读出一行就顺序添加行号,并写入到另一个文件 Test6_2 ...

  5. ML之nyoka:基于nyoka库利用LGBMClassifier模型实现对iris数据集训练、保存为pmml模型并重新载入pmml模型进而实现推理

    ML之nyoka:基于nyoka库利用LGBMClassifier模型实现对iris数据集训练.保存为pmml模型并重新载入pmml模型进而实现推理 目录 基于nyoka库利用LGBMClassifi ...

  6. Python 数据分析三剑客之 Pandas(七):合并数据集

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  7. 建模实训报告总结_模型实训的心得体会

    模型实训的心得体会 模型实训的心得体会 1 通过一周的路基模型制作实训,我学到了很多,也收获了很多, 在这一周的时间里,感受颇多. 首先,得有过硬的专业知识,要了解路基的基本构造,能根据图 纸做出与之 ...

  8. 实训1_获取产业数据并存储_预处理与简单分析

    目录 1. 实训一. 获取产业数据并存储.预处理与分析 1.1 实训内容概述 1.2 实训知识点: 1.2.1 爬取网页数据 1.2.1.1 一般格式 1.2.1.2 采用pandas读取网页表格数据 ...

  9. Python数据分析和挖掘之入门理论+实操

    Python数据分析和挖掘听课笔记 1.集中趋势.离中趋势 2.数据分布 3.抽样理论 代码实现 4.数据分类 5.单属性分析 分析类别详解 实例运用 np.histogram函数 简单对比分析操作 ...

最新文章

  1. 设计模式之装饰模式(Decorator)摘录
  2. 两行 CSS 代码实现图片任意颜色赋色技术
  3. 【转载】Linux安装配置Qt
  4. kettle于javascript步骤错误处理
  5. 检查 Linux 服务器性能
  6. 学计算机二级分数,2020年9月计算机二级考试成绩可以查了 多少分及格
  7. 神牛笔记:吉林大学ACM总结(fennec)
  8. mac 显示隐藏文件的命令行和快捷键
  9. python读取csv时keyerror_python – 读取csv文件并传输到数组的KeyError
  10. Python核心编程-第2章-网络编程(1)
  11. HTML示例07---图像与超链接
  12. oracle改字符集sjis,MySQL字符集专题(字符集,校对,乱码)_MySQL
  13. DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
  14. 串口通信以及波特率计算方法
  15. Excel树状数据绘制导出
  16. IIS的安装及web服务器配置
  17. Thinkphp5 谷歌验证
  18. 施工员报考建筑八大员报考提高工程建筑施工人员安全生产意识
  19. 两部苹果手机同步照片_安卓手机里的便签怎么导到苹果手机?安卓和苹果手机便签同步...
  20. mysql 计算近30天总金额_计算月嫂每天工资,应该用总工资除以30天还是26天?-免费法律咨询...

热门文章

  1. gdpr通用数据保护条例_从信息安全角度看通用数据保护条例(GDPR)
  2. 基础实验——三轴传感器
  3. 任务型对话(二)—— DST(对话状态追踪)
  4. 如何使用码匠连接 CouchDB
  5. 2020面试自动化测试面试题【含答案】
  6. 网页代码扒ppt_用“扒片”的方法制作ppt
  7. python中numpy zeros_为什么numpy.zeros和numpy.zeros的性能不同?
  8. laravel阿里SDK对接
  9. 分布式系统中的幂等性(客户端与服务端的交易一致性,避免多次扣款)
  10. electron-vue 仿网易云客户端(待完成)