温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :)

1. 项目背景

葡萄酒品鉴既是一门科学,也是一门艺术。品鉴葡萄酒,首先当然要能鉴别酸、甜、苦、咸、鲜五种基本味道,它们和酒精等是否均衡协调。决定葡萄酒品质的这些特性最终决定与其内部的化学成份,由于传统的通过品酒师鉴别酒的品质复杂,且人为干扰因素很大,我们尝试通过大数据分析方式鉴别葡萄酒的好坏而开发此系统。数据集是采集于葡萄牙北部“Vinho Verde”葡萄酒的数据。由于隐私和物流问题,只有理化变量特征是可以进行使用的(例如,数据集中没有关于葡萄品种、葡萄酒品牌、葡萄酒销售价格等的数据)。

2. 功能组成

基于大数据分析的葡萄酒品质鉴别系统的功能主要包括:

3. 工具包导入和数据读取

项目技术栈:pandas数据分析 + 数据可视化 + 特征工程 + 机器学习 + 决策树算法 + 随机森林算法。导入所需的依赖包:

import warnings
warnings.filterwarnings('ignore')
import os
import gc
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
from IPython.display import display
np.random.seed(7)
plt.style.use('seaborn')
from tqdm import tqdm
import json
import time
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

利用pandas完成数据的读取和预处理:

red = pd.read_csv('data/winequality-red.csv', sep=';')
white = pd.read_csv('data/winequality-white.csv', sep=';')
red['type'] = 'red'
white['type'] = 'white'
wine_df = pd.concat([red, white])

4. 数据探索式分析

4.1 目标变量葡萄酒品质 quality 的分布情况

4.2 非挥发性酸 fixed acidity 分布情况

不同质量的葡萄酒的 fixed acidity 分布箱型图:

4.3 挥发性酸 volatile acidity 分布情况

不同质量的葡萄酒的挥发性酸 volatile acidity 分布箱型图:

 4.4 柠檬酸 citric acid 分布情况

不同质量的葡萄酒的柠檬酸 citric acid 的分布小提琴图:

4.5 氯化物 chlorides 的分布情况

不同质量的葡萄酒的氯化物 chlorides 的分布箱型图:

4.6 特征间的相关性分析

5. 基于递归决策树的葡萄酒品质鉴别模型

XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。而所用到的树模型则是CART回归树模型。

dtrain = xgb.DMatrix(X_train, y_train)
dtest = xgb.DMatrix(X_test, y_test)watchlist = [(dtrain, 'train'), (dtest, 'test')]param = {'eta': 0.2,'max_depth': 12,'subsample': 0.5,'objective': 'multi:softmax','nthread': -1,'silent': 1,'booster': 'gbtree','num_class': 7
}xgb_model = xgb.train(param,dtrain,evals=watchlist,verbose_eval=5,early_stopping_rounds=10,num_boost_round=1000
)
[0]  train-merror:0.322046   test-merror:0.447692
Multiple eval metrics have been passed: 'test-merror' will be used for early stopping.Will train until test-merror hasn't improved in 10 rounds.
[5] train-merror:0.176843   test-merror:0.393846
[10]    train-merror:0.125877   test-merror:0.375385
[15]    train-merror:0.09492    test-merror:0.355385
[20]    train-merror:0.064478   test-merror:0.346154
[25]    train-merror:0.044638   test-merror:0.34
[30]    train-merror:0.031127   test-merror:0.329231
[35]    train-merror:0.0183 test-merror:0.324615
[40]    train-merror:0.010604   test-merror:0.321538
[45]    train-merror:0.006157   test-merror:0.316923
[50]    train-merror:0.004276   test-merror:0.316923
[55]    train-merror:0.002736   test-merror:0.312308
[60]    train-merror:0.001539   test-merror:0.306154
[65]    train-merror:0.001197   test-merror:0.306154
Stopping. Best iteration:
[59]    train-merror:0.002052   test-merror:0.304615

完成模型的训练后,测试集预测准确率:

xgb_test_pred = xgb_model.predict(dtest)
error_rate = sum(xgb_test_pred != y_test) / len(y_test)
xgb_test_acc = 1 - error_rate
print('测试集分类准确率为 = {}'.format(xgb_test_acc))

输出:测试集分类准确率为 = 0.6938461538461538

        特征重要程度分布情况:

6. 基于随机森林的葡萄酒品质鉴别模型

随机森林,random forest,是集成学习中的一种典型的bagging算法。bagging算法可以和其他分类、回归算法结合,提高准确率、稳定性的同时,通过降低结果的方差,来避免过拟合的发生。随机森林,就简单来讲,森林指的是很多个决策树组合在一起,随机则是指随机从数据集中采样来训练模型中的每棵决策树。

随机选取不同的数据集是为了保证每个决策树看待问题的角度不同,以便输出相似但不相同的模型结果,再讲所有决策树结果整合在一起,作为输出结果,而这一训练方式,意味着很难过拟合,并且对噪音不敏感。

随机森林的步骤:

  1. 预设模型的超参数,比如几棵树,每棵树的深度有几层?
  2. 随机采样,训练每个决策树,从而保证每棵树看待问题的角度都不一样。样本数量n<<总体数量N,样本特征d<<总体特征D。
  3. 输入待测样本到每棵树中,再将每棵树的结果整合在一起:regression:均值,classification:众数。
rf_model = RandomForestClassifier(max_depth=16, n_estimators=50)
rf_model.fit(X_train, y_train)rf_train_pred = rf_model.predict(X_train)
error_rate = sum(rf_train_pred != y_train) / len(y_train)
rf_train_acc = 1 - error_rate
print('训练集分类准确率为 = {}'.format(rf_train_acc))rf_test_pred = rf_model.predict(X_test)
error_rate = sum(rf_test_pred != y_test) / len(y_test)
rf_test_acc = 1 - error_rate
print('测试集分类准确率为 = {}'.format(rf_test_acc))
训练集分类准确率为 = 0.9936719685308706
测试集分类准确率为 = 0.7015384615384616

可以看出,对于测试集不同模型的准确率为:

  • xgboost:0.6938461538461538
  • random_forest: 0.7015384615384616

7. 结论

本项目针对葡萄牙北部“Vinho Verde”葡萄酒的数据集,利用pandas、Matplotlib、seaborn 等数据科学工具包对数据集进行可视化探索式分析,并构建递归决策树和随机森林算法,实现对葡萄酒质量的预测,尝试通过大数据分析方式分析影响葡萄酒品质理化因素。

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。

技术交流认准下方 CSDN 官方提供的学长 Wechat / QQ 名片 :)

精彩专栏推荐订阅:

1. Python 毕设精品实战案例
2. 自然语言处理 NLP 精品实战案例
3. 计算机视觉 CV 精品实战案例

基于大数据分析的葡萄酒品质鉴别系统设计与实现相关推荐

  1. 基于大数据分析的学生综合测评系统

    1.1 研究背景 在大数据时代背景下,需要处理的各种数据或信息量非常大,必须要借助于相关的技术和手段来对大量的数据实施整合和管理,同时各项活动的开展和各种决策的制定往往离不开大数据的分析,因此大数据分 ...

  2. 大数据统计分析毕业设计_基于大数据分析的电子信息类专业毕业设计成绩影响因素研究...

    基于大数据分析的电子信息类专业毕业设计成绩影响因素 研究 温芳琴 [期刊名称] <佳木斯教育学院学报> [年 ( 卷 ), 期] 2019(000)011 [摘要] 通过收集苏州科技大学天 ...

  3. 基于大数据分析技术在会计方面的研究

    第一节 摘 要 在现如今大数据时代的背景下,有越来越多的企业正经受着数据网络的考验,其中很突出的就是管理會计,作为企业财务中一个重要的组成部分,是持续为企业整合和加工财务资料的职务,管理会计正为企业发 ...

  4. 基于大数据分析的安全管理平台技术研究及应用

    http://www.venustech.com.cn/NewsInfo/531/25566.Html [内容摘要]本文首先通过介绍大数据的起因,给出了大数据的定义和特征描述,并简要说明了当前大数据的 ...

  5. 【基于大数据分析的物流可视化管理系统(python+Django)-哔哩哔哩】 https://b23.tv/gUc8lk6

    [基于大数据分析的物流可视化管理系统(python+Django)-哔哩哔哩] https://b23.tv/gUc8lk6 https://b23.tv/gUc8lk6

  6. teablue数据分析_基于大数据分析的茶叶质量评估

    引言 茶叶是茶加工企业生存和发展的基本保障,是 茶产品能够顺利发展的重要资源.茶叶的质量和产 量,通常会遭受各种大气条件以及生态条件和生产 措施的影响.为了保证茶叶质量,需要监测茶叶生 产的整个周期. ...

  7. 判断图有无环_数读湾区经济潜能:基于大数据分析的环杭州湾大湾区“一体化”发展潜能!...

     前言 湾区是由一个海湾或相连若干个海湾.港湾及邻近岛屿共同组成的区域.从世界湾区经济发展看,沿海湾区聚集的通常是最为发达和最具竞争力的城市群,世界著名湾区有东京湾区.纽约湾区和旧金山湾区等,湾区经济 ...

  8. 毕业设计之 ---基于大数据分析的航空公司客户价值分析

    文章目录 0 前言 1 数据分析背景 2 分析策略 2.1 航空公司客户价值分析的LRFMC模型 2.2 数据 2.3 分析模型 3 开始分析 3.1 数据预处理 3.1.1 数据预览 3.1.2 数 ...

  9. 基于大数据分析山东2020年高考难度和选科要求(一)

    又是一年高考的时候.考完试,最焦虑的就是等成绩.等出来成绩后,最头疼的就是填报志愿.选学校,选专业.选省份.选城市--如果考的分数不够,报的学校太好,容易滑档.如果报的学校档次太低又浪费分数.这是非常 ...

最新文章

  1. 字符串反转python_python字符串反转的四种方法详解
  2. IBM将收购Instana公司,持续推进其混合云和人工智能战略
  3. Redis 通配符批量删除key
  4. HIPS 自定义框架
  5. arcgis镜像图形工具,ArcGis图形编辑
  6. 踵事增华:新形势下如何高效撰写科技论文!
  7. python居中对齐符号怎么打_Python字符串居中对齐
  8. 微软软件推送服务器,微软将通过系统更新功能向大部分用户推送新版Microsoft Edge浏览器-...
  9. c++语言将任意进制转化10进制,C++ 基础编程之十进制转换为任意进制及操作符重载...
  10. Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉
  11. nginx反向代理nexus3
  12. Java导出excel合并单元格边框消失问题
  13. 2020Spatial-Temporal Graph Convolutional Network for Video-based Person Re-identification论文笔记(时空图卷积)
  14. mac 苹果系统安装pygame环境插件
  15. Payton猜词游戏
  16. 81章 老子1章到_《道德经》81章全文,建议全文背诵,终身体悟
  17. 聚(N-异丙基丙烯酰胺)PNIPAM离子微凝胶-聚合物后分散形成的纳米粒子-瑞禧
  18. python实现播放音乐
  19. java求几何周长面积_java求几何图形面积
  20. windows 10 系统LCM通信库的编译

热门文章

  1. steps()的学习
  2. Python for循环嵌套用法
  3. I2C总线时序以及ACK和NACK(NAK),SCL被从机拉低?
  4. 编程语言-2-处理器架构、指令集和汇编语言
  5. win10 vs2017 community 新版 systemc
  6. 【计算机网络面试高频】-HTTP协议详解,HTTP协议常见问题
  7. 中南林注册教育邮箱加获取JetBrains个人许可证,续订许可证
  8. 容器技术-Docker 网络03-用户自定义网络-网络命令的使用
  9. python图片切割以及识别图片中的文字
  10. fastdfs上传文件的简易方法