python葡萄酒数据集_利用python分析红葡萄酒数据

在本次分析中,我使用了随机森林回归,并涉及数据标准化和超参数调优。在这里,我使用随机森林分类器,对好酒和不太好的酒进行二元分类。

首先导入数据包:

importnumpy as npimportpandas as pdimportmatplotlib.pyplot as pltimport seaborn as sns

导入数据:

data = pd.read_csv(‘winequality-red.csv‘)

data.head()

20180620130339116515.png

data.describe()

20180620130339340148.png

注释:

fixed acidity:非挥发性酸

volatile acidity : 挥发性酸

citric acid:柠檬酸

residual sugar :剩余糖分

chlorides:氯化物

free sulfur dioxide :游离二氧化硫

total sulfur dioxide:总二氧化硫

density:密度

pH:pH

sulphates:硫酸盐

alcohol:酒精

quality:质量

所有数据的数值为1599,所以没有缺失值。让我们看看是否有重复值:

extra =data[data.duplicated()]

extra.shape

20180620130339531554.png

有240个重复值,但先不删除它,因为葡萄酒的质量等级是由不同的品酒师给出的。

数据可视化

sns.set()

data.hist(figsize=(10,10), color=‘red‘)

plt.show()

20180620130339703429.png

只有质量是离散型变量,主要集中在5和6中,下面分析下变量的相关性:

colormap =plt.cm.viridis

plt.figure(figsize=(12,12))

plt.title(‘Correlation of Features‘, y=1.05, size=15)

sns.heatmap(data.astype(float).corr(),linewidths=0.1,vmax=1.0, square=True,

linecolor=‘white‘, annot=True)

20180620130339924132.png

观察:

酒精与葡萄酒质量的相关性最高,其次是各种酸度、硫酸盐、密度和氯化物。

使用分类器:

将葡萄酒分成两组;“优质”>5为“好酒”

y = data.quality #set ‘quality‘ as target

X = data.drop(‘quality‘, axis=1) #rest are features

print(y.shape, X.shape) #check correctness

20180620130340567687.png

#Create a new y1

y1 = (y > 5).astype(int)

y1.head()

20180620130340718078.png

# plot histogram

ax= y1.plot.hist(color=‘green‘)

ax.set_title(‘Wine quality distribution‘, fontsize=14)

ax.set_xlabel(‘aggregated target value‘)

20180620130340873351.png

利用随机森林分类器训练预测模型

from sklearn.model_selection importtrain_test_split, cross_val_scorefrom sklearn.ensemble importRandomForestClassifierfrom sklearn.metrics importaccuracy_score, log_lossfrom sklearn.metrics import confusion_matrix

将数据分割为训练和测试数据集

seed = 8 #set seed for reproducibility

X_train, X_test, y_train, y_test = train_test_split(X, y1, test_size=0.2,

random_state=seed)

print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)

20180620130341036437.png

对随机森林分类器进行交叉验证训练和评价

#Instantiate the Random Forest Classifier

RF_clf = RandomForestClassifier(random_state=seed)

RF_clf

20180620130341139953.png

#在训练数据集上计算k-fold交叉验证,并查看平均精度得分

cv_scores = cross_val_score(RF_clf,X_train, y_train, cv=10, scoring=‘accuracy‘)print(‘The accuracy scores for the iterations are {}‘.format(cv_scores))print(‘The mean accuracy score is {}‘.format(cv_scores.mean()))

20180620130341281554.png

执行预测

RF_clf.fit(X_train, y_train)

pred_RF= RF_clf.predict(X_test)

#Print 5 results to see

for i in range(0,5):print(‘Actual wine quality is‘, y_test.iloc[i], ‘and predicted is‘, pred_RF[i])

20180620130341410460.png

在前五名中,有一个错误。让我们看看指标。

print(accuracy_score(y_test, pred_LR))print(log_loss(y_test, pred_LR))

20180620130341529601.png

print(confusion_matrix(y_test, pred_LR))

20180620130341664367.png

总共有81个分类错误。

与Logistic回归分类器相比,随机森林分类器更优。

让我们调优随机森林分类器的超参数

from sklearn.model_selection importGridSearchCV

grid_values= {‘n_estimators‘:[50,100,200],‘max_depth‘:[None,30,15,5],‘max_features‘:[‘auto‘,‘sqrt‘,‘log2‘],‘min_samples_leaf‘:[1,20,50,100]}

grid_RF= GridSearchCV(RF_clf,param_grid=grid_values,scoring=‘accuracy‘)

grid_RF.fit(X_train, y_train)

20180620130341866515.png

grid_RF.best_params_

20180620130342147765.png

除了估计数之外,其他推荐值是默认值。

RF_clf = RandomForestClassifier(n_estimators=100,random_state=seed)

RF_clf.fit(X_train,y_train)

pred_RF=RF_clf.predict(X_test)print(accuracy_score(y_test,pred_RF))print(log_loss(y_test,pred_RF))

20180620130342306945.png

print(confusion_matrix(y_test,pred_RF))

20180620130342401671.png

通过超参数调谐,射频分类器的准确度已提高到82.5%,日志损失值也相应降低。分类错误的数量也减少到56个。

将随机森林分类器作为基本推荐器,将红酒分为“推荐”(6级以上)或“不推荐”(5级以下),预测准确率为82.5%似乎是合理的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces 365C - Matrix(hash + yy)

题意:给定你一个数串s,再给你一个 a ,问你在矩阵d(第i,j个元素为si*sj)有多少个小矩形的和为a 解题思路:可知 a (s[x] s[x1] ....s[y])* (s[p]s[p1]....s[q]); 我们只需要枚举各字串的和…

耗时3年,集齐102位中国摄影师,央视这部纪录片BBC也无法超越......

全世界只有3.14 % 的人关注了爆炸吧知识地球上已知的植物有三十多万种,其中十分之一生长在中国。这些植物不仅为中国带来福祉,还不断迁徙到世界各地。在人类的不懈努力下,它们又获得了新的姿态,为不同的文明带来不一样的色彩。《影…

十五天精通WCF——第十一天 如何对wcf进行全程监控

说点题外话,我们在玩asp.net的时候,都知道有一个叼毛玩意叫做“生命周期”,我们可以用httpmodule在先于页面的page_load中 做一些拦截,这样做的好处有很多,比如记录日志,参数过滤,全局登录验证等…

Android之MVP 模式:简单易懂的介绍方式

转载:https://segmentfault.com/a/1190000003927200 Android MVP Pattern Android MVP 模式1 也不是什么新鲜的东西了,我在自己的项目里也普遍地使用了这个设计模式。当项目越来越庞大、复杂,参与的研发人员越来越多的时候,MVP 模…

mysql dw解决方案_MySQL 的 DW 解决方案(MySQL + Infobright)

随着 BI (DW) 在各个企业中重要性的不断提升,各个数据库厂家都希望能搭上这辆班车。这不,MySQL 也联合 Infobright 一起推出了开源的 数据仓库解决方案,而且是开源的。 其实现的各种DW该有的功能就不多说了,但是 Infobright 有一点…

EasyNetQ操作RabbitMQ

EasyNetQ 是一个容易使用,专门针对RabbitMQ的 .NET API。EasyNetQ是为了提供一个尽可能简洁的适用与RabbitMQ的.NET类库。下面看下怎么集成。1、nuget 安装2、配置连接串public static IBus CreateMessageBus(){// 消息服务器连接字符串var connectionString Confi…

男人穿女友的丝袜,只有0次和无数次....

全世界只有3.14 % 的人关注了爆炸吧知识男人爱穿丝袜是刻在基因里的今天是上班第二天,想必很多模友都还没有进入状态,所以超模君准备了一波奇奇怪怪的知识,给各位模友提提神。咱们要讲的,是一种让不少直男听了老脸一红的贴身衣物—…

使用gulp-connect实现web服务器

安装插件安装gulp-connect插件,安装命令如下 npm install --save-dev gulp-connect 定义web服务,gulpfile.js代码 var gulp require(gulp),connect require(gulp-connect), //实现web服务器插件gulp.task(default, function() { });//使用connect实现w…

Android之基于xmpp openfire smack开发之openfire介绍和部署[1]

http://blog.csdn.net/forlong401/article/details/33730365 前言 Java领域的即时通信的解决方案可以考虑openfiresparksmack。当然也有其他的选择。 Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使用3.8.1版本,这个版本是当前最…

silverlight中数据绑定讲解

2019独角兽企业重金招聘Python工程师标准>>> 下面我们开始讲解silverlight中一个比较重要的知识——数据绑定。 我们对于数据绑定并不陌生,在我们ASP.NET中就涉及到了数据绑定,像我们之前学的DataList,GridView,repeat…

恋爱后能有多认真?

1 北方孩子有起床困难户吗?▼2 如果我有10万死士(素材来源网络,侵删)▼3 只有小天才手表(素材来源豆瓣,侵删)▼4 给你一万刀,扇你的好朋友▼5 这才是一个模特该有的身材&#xf…

.NET 6 新特性 PeriodicTimer

.NET 6 新特性 PeriodicTimerIntro.NET 6 中引入了一个新的 Timer —— System.Threading.PeriodicTimer,和之前的几个 Timer 相比一个最大的区别就是,新的 PeriodicTimer 的事件处理可以比较方便地使用异步方式,消除了使用 callback 的机制…

Android之基于xmpp openfire smack开发之smack类库介绍和使用[2]

http://blog.csdn.net/shimiso/article/details/8816540 关于Smack编程库,前面我们提到,它是面向Java端的api,主要在PC上使用,利用它我们可以向openfire服务器注册用户,发送消息,并且可以通过监听器获得此…

python 线程 的类库_python类库32[多线程]

一 python 多线程因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只有一个线程在执行,从而简化了python解释器的实现,且python对象模型天然地线程安全。如果你想你的应用程序在多核的机器上使用更好的资源&#…

当.NET遇到机器学习

微软中国MSDN 点击上方蓝字关注我们ML.NET 是面向 .NET 开发人员的开源跨平台机器学习框架,你可以使用 C# 或 F# 创建自定义 ML 模型,而无需离开.NET 生态系统。ML.NET 使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。借助此功能&#x…

当你和你女朋友闹矛盾时......

1 听起来是这么个道理(素材来源网络,侵删)▼2 真的是非常专一了(via.皎皎月当楼)▼3 给朋友定做的蛋糕(素材来源网络,侵删)▼4 当你和女朋友闹矛盾时▼5 师范的男孩子有多害怕&a…

Android之基于xmpp openfire smack开发之Android客户端开发[3]

http://blog.csdn.net/shimiso/article/details/11225873 在上两篇文章中,我们依次介绍openfire部署以及smack常用API的使用,这一节中我们着力介绍如何基于asmack开发一个Android的客户端,本篇的重点在实践,讲解和原理环节&#…

PowerToys插件扩展(类似Alfred)

在mac系统除了自带的Spotlight还有一个很好用的工具叫Alfredimage在windows系统也有一个很好用的工具叫PowerToys,是微软的一个开源项目imagehttps://github.com/microsoft/PowerToys从上面的github地址可以下载安装包。image它有很多快捷功能,请大家自己…

Android之基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]

http://blog.csdn.net/shimiso/article/details/8156439 前面几篇给大家系统讲解的有关xmpp openfire smack asmack相关的技术和使用,大家如果有所遗忘可以参考 顺便也一起回顾下xmpp的历程 xmpp协议起源于著名的Linux即时通讯服务服务器jabber,有时候我们会把xmp…

12年前的高考到底有多难,只在这一道题上就看出来了...

▲ 点击查看2008年高考江西数学考卷的最后一题,说是高考史上最恐怖的数学题,应该没有异议。这道题到底有多难呢?最后这道压轴题一共是14分。考试结果出来,所有考生的平均分是0.31分。曾有一位同学这样介绍:“在我们学校…