题目来源:
《Python数据分析与应用》第6章 使用 scikit-learn 构建模型 实训部分
【 黄红梅、张良均主编 中国工信出版集团和人民邮电出版社】

本博客题目文字主要来自:
印象笔记OCR文字识别转换(敲题目是不可能去敲题目的)
【OCR (Optical Character Recognition,光学字符识别)】

数据集下载链接(下载后找到第6章->实训数据)

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

1.训练要点
(1)掌握 sklearn转换器的用法。
(2)掌握训练集、测试集划分的方法。
(3)掌握使用sklearn进行PCA降维的方法。

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

3.实现思路及步骤
(1)使用pandas库分别读取wine数据集和 winquality数据集
(2)将wine数据集和winequality数据集的数据和标签拆分开。
(3)将winequality数据集划分为训练集和测试集。
(4)标准化wine数据集和 wine quality数据集
(5)对wine数据集和 winequality数据集进行PCA降维。

1)实验源代码

##使用sklearn处理wine和wine_quality数据集
import pandas as pd
#1、读取数据集
wine = pd.read_csv('./第六章 实验数据/实训数据/wine.csv')
#winequality = pd.read_csv('./第六章 实验数据test/实训数据/winequality.csv')
winequality = pd.read_csv('./第六章 实验数据/实训数据/winequality.csv',sep = ';')#2、数据和标签拆分开
wine_data=wine.iloc[:,1:]
wine_target=wine['Class']
winequality_data=winequality.iloc[:,:-1]
winequality_target=winequality['quality']
#winequality_target=winequality.iloc[:,-1]#3、划分训练集和测试集
from sklearn.model_selection import train_test_split
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)#4、标准化数据集
from sklearn.preprocessing import StandardScaler #标准差标准化
stdScale = StandardScaler().fit(wine_data_train) #生成规则(建模)
wine_trainScaler = stdScale.transform(wine_data_train)#对训练集进行标准化
wine_testScaler = stdScale.transform(wine_data_test)#用训练集训练的模型对测试集标准化stdScale = StandardScaler().fit(winequality_data_train)
winequality_trainScaler = stdScale.transform(winequality_data_train)
winequality_testScaler = stdScale.transform(winequality_data_test)#5、PCA降维
from sklearn.decomposition import PCA
pca = PCA(n_components=5).fit(wine_trainScaler)
wine_trainPca = pca.transform(wine_trainScaler)
wine_testPca = pca.transform(wine_testScaler)pca = PCA(n_components=5).fit(winequality_trainScaler)
winequality_trainPca = pca.transform(winequality_trainScaler)
winequality_testPca = pca.transform(winequality_testScaler)

2) 编译代码并执行
题目要求没要求输出,故这里就不写输出信息了。

要想有点输出信息和测试啥的,可参考:
【Python】读取sklearn数据集及常见操作记录(加载、划分、标准化、降维)

3) 结果分析与思考
①本题wine数据集和winequality数据集的表现形式不一样,这里的wine数据集可以直接读入,而winequality数据集在文件中是以”;”为间隔的,故需要采用间隔读入的方式获取其数据
②这里读数据采用间隔形式有可能会出错(读入的数据只有一列,具体原因暂时不知)
治标不治本的解决办法:在excel中通过“;”间隔将表格内容进行分割,再正常读入。

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

1.训练要点
(1)了解sklearn估计器的用法。
(2)掌握聚类模型的构建方法。
(3)掌握聚类模型的评价方法。

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

3.实现思路及步骤
(1)根据实训1的wine数据集处理的结果,构建聚类数目为3的- -Means模型。
(2)对比真实标签和聚类标签求取FMI。
(3)在聚类数目为2~10类时,确定最优聚类数目。
(4)求取模型的轮廓系数,绘制轮廓系数折线图,确定最优聚类数目。
(5)求取 Calinski-Harabasz-指数,确定最优聚类数目。

1)实验源代码

#实训2:构建基于wine数据集的K-Means聚类模型#从实训2开始需要基于前面的数据处理部分
#1、根据实训1的wine数据集处理的结果,构建聚类数目为3的 K-Means模型
from sklearn.cluster import KMeans
#用标准化后的训练集建模
kmeans = KMeans(n_clusters = 3,random_state=1).fit(wine_trainScaler)
#用标准化后PCA降维后的训练集建模(采用降维后的数据聚类效果不好,故此处不采用)
#kmeans = KMeans(n_clusters = 3,random_state=1).fit(wine_trainPca)
print('构建的KMeans模型为:\n',kmeans)#2、对比真实标签和聚类标签求取FMI
from sklearn.metrics import fowlkes_mallows_score #FMI评价法
score=fowlkes_mallows_score(wine_target_train,kmeans.labels_)
print("wine数据集的FMI:%f"%(score))#3、在聚类数目为2~10类时,确定最优聚类数目
for i in range(2,11):##构建并训练模型kmeans = KMeans(n_clusters = i,random_state=123).fit(wine_trainScaler)score = fowlkes_mallows_score(wine_target_train,kmeans.labels_)print('iris数据聚%d类FMI评价分值为:%f' %(i,score))#4、求取模型的轮廓系数,绘制轮廓系数折线图,确定最优聚类数目
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()#5、求取 Calinski-Harabasz指数,确定最优聚类数
from sklearn.metrics import calinski_harabaz_score
for i in range(2,11):##构建并训练模型kmeans = KMeans(n_clusters = i,random_state=1).fit(wine)score = calinski_harabaz_score(wine,kmeans.labels_)print('seeds数据聚%d类calinski_harabaz指数为:%f'%(i,score))

2) 编译代码并执行



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

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

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

综上分析,加上对于实际数据的描述,wine数据集K-means聚类为3类的时候效果最好。

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

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

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

3.实现思路及步骤
(1)读取wine数据集,区分标签和数据。
(2)将wine数据集划分为训练集和测试集
(3)使用离差标准化方法标准化wine数据集。
(4)构建SVM模型,并预测测试集结果。
(5)打印出分类报告,评价分类模型性能。

1)实验源代码

#实训3:构建基于wine数据集的SVM分类模型
#(1)读取wine数据集,区分标签和数据
import pandas as pd
wine = pd.read_csv('./第六章 实验数据/实训数据/wine.csv')
wine_data=wine.iloc[:,1:]
wine_target=wine['Class']#(2)将wine数据集划分为训练集和测试集
from sklearn.model_selection import train_test_split
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)#(3)使用离差标准化方法标准化wine数据集。
from sklearn.preprocessing import MinMaxScaler #标准差标准化
stdScale = MinMaxScaler().fit(wine_data_train) #生成规则(建模)
wine_trainScaler = stdScale.transform(wine_data_train)#对训练集进行标准化
wine_testScaler = stdScale.transform(wine_data_test)#用训练集训练的模型对测试集标准化#(4)构建SVM模型,并预测测试集结果。
from sklearn.svm import SVC
svm = SVC().fit(wine_trainScaler,wine_target_train)
print('建立的SVM模型为:\n',svm)
wine_target_pred = svm.predict(wine_testScaler)
print('预测前10个结果为:\n',wine_target_pred[:10])#(5)打印出分类报告,评价分类模型性能
from sklearn.metrics import classification_report
print('使用SVM预测iris数据的分类报告为:','\n',classification_report(wine_target_test,wine_target_pred))

2) 编译代码并执行


3) 结果分析与思考
本题划分的训练集和测试集的比例为9:1,训练的效果很好,通过观察分类报告,精确度、召回率、F1值等指标均达到了1.00,即预测结果全部正确的高正确率!这里,我们做一个额外小实验——将训练集和测试集的比例为划分为1:1,结果如下:

可见,模型得不到足够训练集训练,且测试集规模庞大时,结果并不能保证全对,但正确率确实也足够高了!

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

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

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

3.实现思路及步骤
(1)根据winequality数据集处理的结果,构建线性回归模型。
(2)根据wine quality数据集处理的结果,构建梯度提升回归模型。
(3)结合真实评分和预测评分,计算均方误差中值绝对误差、可解释方差值。
(4)根据得分,判定模型的性能优劣。

1)实验源代码

#实训4:构建基于 wine quality数据集的回归模型
#(1)根据wine_quality数据集处理的结果,构建线性回归模型。
from sklearn.linear_model import LinearRegression
clf = LinearRegression().fit(winequality_trainPca,winequality_target_train)
y_pred = clf.predict(winequality_testPca)
print('线性回归模型预测前10个结果为:','\n',y_pred[:10])#(2)根据wine_quality数据集处理的结果,构建梯度提升回归模型。
from sklearn.ensemble import GradientBoostingRegressor
GBR_wine = GradientBoostingRegressor().\
fit(winequality_trainPca,winequality_target_train)
wine_target_pred = GBR_wine.predict(winequality_testPca)
print('梯度提升回归模型预测前10个结果为:','\n',wine_target_pred[:10])
print('真实标签前十个预测结果为:','\n',list(winequality_target_test[:10]))#(3)结合真实评分和预测评分,计算均方误差、中值绝对误差、可解释方差值。
#(4)根据得分,判定模型的性能优劣
print('线性回归模型评价结果:')
print('winequality数据线性回归模型的平均绝对误差为:',mean_absolute_error(winequality_target_test,y_pred))
print('winequality数据线性回归模型的均方误差为:',mean_squared_error(winequality_target_test,y_pred))
print('winequality数据线性回归模型的中值绝对误差为:',median_absolute_error(winequality_target_test,y_pred))
print('winequality数据线性回归模型的可解释方差值为:',explained_variance_score(winequality_target_test,y_pred))
print('winequality数据线性回归模型的R方值为:',r2_score(winequality_target_test,y_pred))print('梯度提升回归模型评价结果:')
from sklearn.metrics import explained_variance_score,\
mean_absolute_error,mean_squared_error,median_absolute_error,r2_score
print('winequality数据梯度提升回归树模型的平均绝对误差为:',mean_absolute_error(winequality_target_test,wine_target_pred))
print('winequality数据梯度提升回归树模型的均方误差为:',mean_squared_error(winequality_target_test,wine_target_pred))
print('winequality数据梯度提升回归树模型的中值绝对误差为:',median_absolute_error(winequality_target_test,wine_target_pred))
print('winequality数据梯度提升回归树模型的可解释方差值为:',explained_variance_score(winequality_target_test,wine_target_pred))
print('winequality数据梯度提升回归树模型的R方值为:',r2_score(winequality_target_test,wine_target_pred))

2) 编译代码并执行

3) 结果分析与思考
通过对比线性回归模型和梯度提升回归模型的前十个预测值与实际值的差异,我们能发现其结果与实际值是较为相近的,但这并不能判断出这两种方法的优劣程度。

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

附加实验:分析PCA降维对于SVM分类的影响

(一)对比实验及分析
本附加测试实验基于实训3:构建基于wine数据集的SVM分类模型

(1)当划分训练集和测试集比例为9:1的时候,PCA降维对于SVM分类准确度的影响见下图。

由图可见,当划分训练集和测试集比例为9:1的时候,不论是14维特征全部保留还是只有2维特征,其预测结果的正确率均为100%

(2)当划分训练集和测试集比例为4:1的时候,PCA降维对于SVM分类准确度的影响见下图。

分析折线图可知,此时所降维维度和准确率呈现一种正相关的关系,即所降维维度越大其准确率效果会更好!

(3)当划分训练集和测试集比例为1:1的时候,PCA降维对于SVM分类准确度的影响见下图。

分析折线图可知,当训练集和测试集比例为1:1的时候,其PCA降维对结果的影响较为明显,而且并不是维度越大越好(有的特征是具有一定的干扰性),这时,选取所降维的维度为7、8、9维时,SVM预测模型预测效果较好!

(4)当划分训练集和测试集比例为1:4的时候,PCA降维对于SVM分类准确度的影响见下图。

可见,此时呈现的是所降维维度和准确率呈现一种负相关的关系,即维度越高,其准确率越低!

(二)代码部分
上面的实验结果通过调节train_test_split()函数中的test_size(说写float数字的含义为测试集的比例)来实现!

#附加实验:分析不同降维维度对于SVM分类的影响
#(1)读取wine数据集,区分标签和数据
import pandas as pd
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt wine = pd.read_csv('./第六章 实验数据/实训数据/wine.csv')
wine_data=wine.iloc[:,1:]
wine_target=wine['Class']#(2)将wine数据集划分为训练集和测试集
wine_data_train, wine_data_test, \
wine_target_train, wine_target_test = \
train_test_split(wine_data, wine_target, \test_size=0.8, random_state=6)  #训练集和测试集比例在这里调整!
wine_target_test=wine_target_test.values#(3)使用离差标准化方法标准化wine数据集。
stdScale = MinMaxScaler().fit(wine_data_train) #生成规则(建模)
wine_trainScaler = stdScale.transform(wine_data_train)#对训练集进行标准化
wine_testScaler = stdScale.transform(wine_data_test)#用训练集训练的模型对测试集标准化dimension=[]  #所降维维度
accuracy=[]   #记录不同维度训练集训练的SVM所预测结果对应的准确率
for i in range(2,14):dimension.append(i)
for i in dimension:#PCA降维pca = PCA(n_components=i).fit(wine_trainScaler) wine_trainPca = pca.transform(wine_trainScaler) wine_testPca = pca.transform(wine_testScaler)#建立SVM模型  这里的核函数为默认的径向基核函数kernel='rbf' svm = SVC().fit(wine_trainPca,wine_target_train)#预测训练集结果wine_target_pred= svm.predict(wine_testPca)#分析预测结果,求出其准确率true=0for i in range(0,wine_target_test.shape[0]):if wine_target_pred[i] == wine_target_test[i]:true+=1accuracy.append(true/wine_target_test.shape[0])print(wine_target_pred)
print(wine_target_test)
print(accuracy)plt.rcParams['font.sans-serif']='SimHei'
plt.plot(dimension,accuracy,"r-")
plt.xlabel('PCA降维的维度')
plt.ylabel('SVM预测分类结果的准确率')
plt.title('当测试集和训练集比例为1:1时,PCA降维对于SVM分类准确度的影响')
#plt.savefig("test(名字自己起).png")
#plt.show()

【Python】实训6:基于wine和wine_quality数据集练习sklearn构建模型方法(预处理、聚类、分类、回归)相关推荐

  1. 【项目实训】基于人脸识别的课堂签到管理系统(python+qt5+sqlite3+百度智能云)

    [项目实训]基于人脸识别的课堂签到管理系统(python+qt5+sqlite3+百度智能云) 一.环境介绍 二.签到功能 2.1 启动签到 2.2 结束签到 三.用户组操作 3.1 添加用户组 3. ...

  2. Python实训day10am【Python中的地址引用、os模块】

    Python实训-15天-博客汇总表 目录 1.Python中的地址引用 2.os模块(操作系统模块) 2.1.os案例1 2.2.os案例2 2.3.os案例3 2.4.os案例4 2.5.os案例 ...

  3. C++课程设计实训_基于多态书籍信息管理系统的设计与实现、附源码、有过程截图

    C++课程设计实训_基于多态书籍信息管理系统的设计与实现.附源码,有过程截图 书籍信息管理系统的设计与实现(基于多态) 学生姓名: 学 号: 指导老师: 所 在 系: 专 业: 班 级: C++课程设 ...

  4. 初学Python实训心得以及一个爬虫例子

    了解Python,学会Python,实战python 通过这次Python实训,我收获了很多,一方面学习到了许多以前没学过的专业知识与知识的应用,另一方面还提高了自我动手做项目的潜力.本次实训是对我潜 ...

  5. 大学python实训总结-千锋Python实训总结 学好基础才能走的更远

    时间飞逝,不知不觉在千锋学习Python已经一个月了,在这不长不短的一个月时间感觉我以往的生活方式和学习方式完全被改变了,希望我能继续保持这样的求学心态和学习态度.下面这个Python实训总结就是我对 ...

  6. Python实训day14pm【Python网络爬虫综合大作业-参考解析】

    Python实训-15天-博客汇总表 题目:天气数据的爬取和统计 大作业题目思路引导:定时爬取每个地级市的实时天气状况.存入excel中.为每个城市生成html展示.历史excel文件以每日为单位归档 ...

  7. Python实训day14am【Python网络爬虫综合大作业-答辩】

    Python实训-15天-博客汇总表 实训总结: 由浅入深的了解了python语言应用: 编写了很多案例,完成了发作业,提升了编程思路和能力: 了解了行业现状,认识到企业对人才的要求,去除焦虑,对后续 ...

  8. Python实训day13am【Python网络爬虫综合大作业PPT】

    Python实训-15天-博客汇总表   今天上午大家抓紧时间继续完成实训报告和PPT,有问题我会在群里跟大家说明, 暂时不用上线直播了. 实训结束后,我会在博客上发布网络爬虫综合大作业题目及解析.

  9. Python实训day12pm【答辩要求、定时器】

    Python实训-15天-博客汇总表 目录 1.答辩安排 2.定时器 1.答辩安排 下午安排: 今天尽量地完成整个项目: 明天完成实训报告,制作小答辩PPT: 后天答辩. PPT要求: 时长5分钟左右 ...

最新文章

  1. 【底层原理】四位计算机的原理及其实现
  2. R语言is.na函数实战(删除、替换、统计、条件判断等)
  3. python可以做什么有趣的东西-python能做哪些生活有趣的事情
  4. C语言 cgi(2)
  5. 制作巴士电台彩蛋一枚
  6. CentOS 7 利用Docker搭建禅道系统
  7. 清楚浮动的方法和原理
  8. DataGrip汉化方法
  9. 微赞dataconfig.php,php生成微信jssdk wx.config参数,调用js接口
  10. 如何开发油猴脚本来block掘金用户
  11. python水仙花数的编程讲解_《scratch编程+数学》课程:找寻水仙花数
  12. 如何阅读《深入理解计算机系统》这本书?
  13. 基于Androidstudio的2048小游戏的设计与实现
  14. IEEE Access的模板的问题
  15. 阿里云手机号短信设置
  16. 2016年四川省TI杯电子设计竞赛B题
  17. 没有苹果开发账号,只有p12文件和mobileprovision文件进行打包
  18. THINKPHP6 运行出现Malformed UTF-8 characters, possibly incorrectly encoded
  19. 李梦恬爸爸分享之第十周课程资源
  20. 布局5G旗舰移动市场 MediaTek发布天玑新品

热门文章

  1. 墨卡托及Web墨卡托投影
  2. ios 学习之你画我话绘图七 椭圆形
  3. Android 10.0 系统framework禁止访问应用信息页
  4. 计算机中一个汉字占用 存储空间,一个字母、数字、汉字所占用的内存空间
  5. 两步路加载自定义图源谷歌等协议解析
  6. 【二叉树】最小高度树
  7. 3GPP TS 29244-g30 中英文对照 | 5.7.1 General
  8. 微信小程序 select 下拉框组件
  9. 安徽微享商盟系统开发步骤共享链
  10. matlab调用摄像头运用差帧法实现双物体跟踪