机器学习:基于K-近邻(KNN)、高斯贝叶斯(GaussianNB)、SVC、随机森林(RF)、梯度提升树(GBDT)预测葡萄酒质量

在这里插入图片描述

前言

系列专栏:机器学习:高级应用与实践【项目实战100+】【2024】✨︎
在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型,如卷积神经网络、门控循环单元、大型语言模型和强化学习模型

我们提出了一种数据挖掘方法来预测人类的葡萄酒口味偏好,该方法基于认证步骤中易于获得的分析测试。考虑了一个大型数据集(与该领域的其他研究相比)。在同时执行变量和模型选择的计算高效程序下应用了五种回归技术。随机森林与梯度提升树取得了可喜的结果,优于多元回归和神经网络方法。这种模型有助于支持酿酒师的品酒评估和提高葡萄酒产量。此外,类似的技术可以通过对于市场的消费者口味进行建模来帮助进行目标营销。

目录

  • 1. 相关库和数据集
    • 1.1 相关库介绍
    • 1.2 数据集介绍
      • 1.2.1 加载数据
      • 1.2.2 描述统计
      • 1.2.3 数据信息
  • 2. 探索性数据分析
    • 2.1 特征分布(堆叠直方图)
    • 2.1 特征相关性(热力图)
    • 2.1 特征缩放(归一化)
  • 3. 数据建模(分类)
    • 3.1 数据准备(拆分为训练集和测试集)
    • 3.2 模型构建(KNN、GaussianNB、SVC、RF、DBDT)
  • 4. 模型评估

1. 相关库和数据集

1.1 相关库介绍

Python 库使我们能够非常轻松地处理数据并使用一行代码执行典型和复杂的任务。

  • Pandas – 该库有助于以 2D 数组格式加载数据框,并具有多种功能,可一次性执行分析任务。
  • Numpy – Numpy 数组速度非常快,可以在很短的时间内执行大型计算。
  • Matplotlib/Seaborn – 此库用于绘制可视化效果,用于展现数据之间的相互关系。
  • Sklearn – 包含多个库,这些库具有预实现的功能,用于执行从数据预处理到模型开发和评估的任务。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormapfrom sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, roc_auc_scorefrom sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier

1.2 数据集介绍

我们使用互联网上免费提供的葡萄酒质量数据集。该数据集具有影响葡萄酒质量的基本特征。通过使用几个机器学习模型,我们将预测葡萄酒的质量。

FeatureExplain
fixed aciditymost acids involved with wine or fixed or nonvolatile
volatile aciditythe amount of acetic acid in wine
citric acidthe amount of citric acid in wine
residual sugarthe amount of sugar remaining after fermentation stops
chloridesthe amount of salt in the wine.
free sulfur dioxidethe amount of free sulfur dioxide in the wine(those available to react and thus exhibit both germicidal and antioxidant properties)
total sulfur dioxideamount of free and bound forms of SO2
densitythe measurement of how tightly a material is packed together
PHdescribes how acidic or basic a wine is on a scale from 0 (very acidic) to 14 (very basic); most wines are between 3-4
Alcoholthe percent alcohol content of the wine
qualityoutput variable (based on sensory data, score between 3 and 8)

1.2.1 加载数据

# Read in white wine data
# df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv", sep =';')# Read in red wine data
# df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv", sep =';')
df = pd.read_csv('winequality-red.csv', sep =';')

1.2.2 描述统计

.describe()生成描述性统计信息。描述性统计包括总结数据集分布的中心趋势、分散度和形状的统计,不包括NaN值。
分析数字序列和对象序列,以及混合数据类型的DataFrame列集。

# Describe `df`
df.describe().T.style.background_gradient(axis=0)

描述性统计

1.2.3 数据信息

.info()方法打印有关DataFrame的信息,包括索引dtype和列、非null值以及内存使用情况。

df.info()

数据信息

2. 探索性数据分析

EDA是一种使用视觉技术分析数据的方法。它用于发现趋势和模式,或借助统计摘要和图形表示来检查假设。现在,让我们检查数据集列中的空值数。

df.isnull().sum()

检查

2.1 特征分布(堆叠直方图)

让我们绘制堆叠直方图,直观显示数据集列中连续值的分布情况。

sns.set_theme(style="white")
long_df = df.melt(var_name='category', value_name='value')# Initialize the figure with a logarithmic x axis
fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(30, 24))
axes = axes.ravel()  # 将多维数组展平为一维数组# 计算每行每列应该绘制的列索引
for i, ax in enumerate(axes[:len(df.columns)]):row, col = divmod(i, 3)sns.histplot(data=df, x=df.columns[i], ax=ax, hue="quality", stat='frequency', multiple='stack',palette=sns.color_palette(n_colors=6))ax.set_title(df.columns[i])  # 设置子图标题ax.set_xlabel('Value')  # 设置x轴标签# 隐藏超出数据范围的子图
for ax in axes[len(df.columns):]:ax.axis('off')plt.tight_layout()
plt.show()

堆叠直方图

2.1 特征相关性(热力图)

sns.heatmap(df.corr(), annot=True, fmt='.1f', linewidth=0.25, annot_kws={"fontsize": 8}, cmap='Purples', square=True)

特征相关性
从上面的热图中,我们可以得出结论,“总二氧化硫”和“游离二氧化硫”是高度相关的特征

sns.pairplot(df, hue='quality', corner = True, palette='Purples')

在这里插入图片描述

2.1 特征缩放(归一化)

MinMaxScaler 是 scikit-learn(一个流行的 Python 机器学习库)中的一个实用工具,用于特征缩放。它通过对每个特征进行最小-最大缩放(也称为归一化)来将特征值转换到一个指定的范围,通常是 [0, 1]。 最小-最大缩放是一种常用的特征预处理技术,特别是在使用那些基于距离的算法(如 k-最近邻、支持向量机、神经网络等)时。这是因为不同的特征可能具有不同的量纲或单位,这可能会导致某些特征在算法中占据主导地位。通过缩放,可以确保所有特征都在相同的范围内,从而避免这种情况。

MinMaxScaler 的主要功能是:

对每个特征进行缩放,使其值在 [0, 1] 范围内。 它是无参数的,这意味着它不需要估计任何参数(如均值和标准差)。 它是可逆的,意味着你可以从缩放后的数据恢复到原始数据。

# Create X from DataFrame and y as Target
X_temp = df.drop(columns='quality', axis=1)
scaler = MinMaxScaler(feature_range=(0, 1)).fit_transform(X_temp)
features = pd.DataFrame(scaler, columns=X_temp.columns)df['best quality'] = [1 if x > 5 else 0 for x in df.quality]
target = df['best quality']features.describe().T.style.background_gradient(axis=0, cmap='Purples')

特征缩放

3. 数据建模(分类)

3.1 数据准备(拆分为训练集和测试集)

让我们准备好用于训练的数据,并将其分为训练数据和验证数据,这样我们就能根据用例选择性能最佳的模型。我们将训练一些最先进的机器学习分类模型,然后使用验证数据从中选出最佳模型。

# Splitting the data set for training and validating 
X_train, X_val,\Y_train, Y_val = train_test_split(features, target,test_size=0.2,random_state=10)
X_train.shape, X_val.shape
((1279, 11), (320, 11))

3.2 模型构建(KNN、GaussianNB、SVC、RF、DBDT)

models = [KNeighborsClassifier(), GaussianNB(), SVC(kernel='rbf'),\GradientBoostingClassifier(), RandomForestClassifier()]# 循环遍历每个分类器
for i in range(len(models)):models[i].fit(X_train, Y_train)print(f'{models[i]} : ')train_preds = models[i].predict(X_train)print('Training Accuracy : ', accuracy_score(Y_train, train_preds))val_preds = models[i].predict(X_val)print('Validation Accuracy : ', accuracy_score(Y_val, val_preds))print()

分类器

4. 模型评估

从上述精度中,我们可以说随机森林分类器在验证数据上表现更好,验证数据和训练数据之间的差异较小。让我们使用随机森林模型绘制验证数据的混淆矩阵。

models = [KNeighborsClassifier(), GaussianNB(), SVC(kernel='rbf'),\GradientBoostingClassifier(), RandomForestClassifier()]# 循环遍历每个分类器
for i in range(len(models)):# 训练分类器models[i].fit(X_train, Y_train)# 在验证集上进行预测val_preds = models[i].predict(X_val)# 显示混淆矩阵metrics.ConfusionMatrixDisplay.from_estimator(models[i], X_val, Y_val, cmap=sns.cubehelix_palette(dark=.20, light=.95, as_cmap=True))plt.title(f'Confusion Matrix for {models[i].__class__.__name__}')plt.show()print(f'{models[i].__class__.__name__} : ')print(metrics.classification_report(Y_val, models[i].predict(X_val)))

混淆矩阵

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

车辆充电桩|基于Springboot+vue的车辆充电桩管理系统的设计与实现(源码+数据库+文档)

车辆充电桩管理系统 目录 基于Springboot+vue的车辆充电桩管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1 前台功能模块 4.1.1 首页功能 4.1.2 用户后台管理 2 后台功能模块 4.2.1 管理员功能 4.2.2 维修员功能 四、数据库设计 五、核…

公众号流量主的收益怎么样?

公众号之前是一个私域平台,没有粉丝基本是没有推荐的,所以之前入门的门槛还是很高的,但是今年公众号和视频号改变了推流的机制,现在发的文章会进入到流量池中,进入到公域流量,所以发布的优质文章会大爆的&a…

演唱会新风:允许部分歌手闭麦,让观众先唱

演唱会市场的热度从2023年延续至今,出现了一些“倒反天罡”的现象。 例如:让歌迷在台下给歌手唱歌。 5月6日抖音娱乐榜第一的消息是“第一次见辟谣观众没假唱的”。原因是凤凰传奇在常州和北京鸟巢先后举办两场演唱会,其中鸟巢演唱会被认为…

工程技术SCI期刊,中科院三区,一投就中,国人友刊!

一、期刊名称 Industrial Management & Data Systems 二、期刊简介概况 期刊类型:SCI 学科领域:工程技术 影响因子:5.5 中科院分区:3区 出版方式:订阅模式/开放出版 版面费:$4120 三、期刊征稿范…

500的项目研发成本2000?

上个月接了一个小程序的二开项目,功能不多就2个诉求:调整首页数据排序规则,帖子详情增加一个海报,报了一个我认为还比较合适的价格500。 当我拿到代码的那一刻有点小害怕,因为这个客户的之前合作过一次,项…

Chromium编译指南2024 Windows11篇-获取 Chromium 的源代码(五)

前言 在《Chromium编译指南2024(四)》中,我们完成了Git 的初始化配置。 现在,我们将进一步讨论如何获取 Chromium 的源代码,并准备构建所需的文件。 1. 获取Chromium的源代码 在合适的位置准备一个文件夹&#xff…

Python中使用嵌套for循环读取csv文件出现问题

如果我们在使用嵌套循环来读取 CSV 文件时遇到了问题,可以提供一些代码示例和出现的具体错误,这样我可以更好地帮助大家解决问题。不过,现在我可以给大家一个基本的示例,演示如何使用嵌套循环来读取 CSV 文件。 问题背景 我需要读…

spring bean生命周期全部过程

Spring Bean的生命周期包括以下全部过程: 实例化:在Spring容器启动时,根据配置文件或注解等信息创建Bean的实例。属性赋值:如果Bean有属性需要进行初始化,Spring容器会自动为这些属性进行赋值。自定义初始化方法&…

Tomcat端口占用解决方案

Windows操作系统 出现这种情况: Error was Port already in use :40001;nested exception is :java.net.BindException: Address already in use : JVM_Bind; 步骤1:按下winR键,输入cmd 步骤2:输入以下命令 netstat …

PS五官与服装PSD文件大全,男女证件照制作必备素材

一、素材描述 男女证件照服装和五官等PSD文件大全,制作证件照的必备素材合集,轻松制作高端大气的证件照。什么是DR5?DR5是Delicious Retouch 5的简称,这是一款非常优秀的PS人像磨皮美容插件,DR5的主要功能就是针对人像…

【七十九】【算法分析与设计】并查集模板!!!并查集的实现_牛客题霸_牛客网,【模板】并查集 - 洛谷,并查集代码!!!

并查集的实现_牛客题霸_牛客网 描述 给定一个没有重复值的整形数组arr,初始时认为arr中每一个数各自都是一个单独的集合。请设计一种叫UnionFind的结构,并提供以下两个操作。 boolean isSameSet(int a, int b): 查询a和b这两个数是否属于一个集合 void u…

Android 启动提示Android 正在升级...提示源码分析

正常情况下烧录的新机会有这个提示,因为系统启动时候要对系统APP做DexOpt优化,流程如下: 进入performBootDexOpt函数: 提示框代码如下: 而提示框的Tile和Msg如下: 打印Log: 觉得本文对…

炫酷Chrome:插件大礼包

Chrome浏览器以其强大的功能和丰富的扩展插件库而闻名。 其中,有些插件专为提升用户的浏览体验而设计,例如更换Chrome网页背景图、自定义鼠标点击样式,以及提供便捷的页面跳转工具等。 最近,有一款被称为“宝藏插件包”的工具引…

AI图书推荐:Zapier和AI融合来自动化业务流程

这本书《Zapier和AI融合来自动化业务流程》(Automate It with Zapier and Generative AI)由Kelly Goss撰写,这本书是为想要使用Zapier和AI集成功能来自动化重复性任务、提高生产力的微型、小型或中型企业的业务所有者、运营经理和团队准备的。…

字节跳动(社招)四面算法原题

TikTok 进展 又是一期定时汇报 TikTok 进展的推文。 上周,美国总统拜登签署了价值 950 亿美元的一揽子对外援助法案。 该法案涉及强制字节跳动剥离旗下应用 TikTok 美国业务,即 针对 TikTok 非卖即禁的"强抢行为"开始进入九个月(27…

某云eHR PtFjk.mob 任意文件上传漏洞复现

0x01 产品简介 某云eHR是大中型企业广泛采用人力资源管理系统。红海云是国内顶尖的HR软件供应商,是新一代eHR系统的领导者。 0x02 漏洞概述 某云EHR系统PtFjk.mob接口处存在未授权文件上传漏洞,攻击者可上传webshell来命令执行,获取服务器权限。 0x03 复现环境 FOFA:b…

大模型市场爆发式增长,但生成式AI成功的关键是什么?

进入2024年,大模型市场正在爆发式增长。根据相关媒体的总结,2024年1-4 月被统计到的大模型相关中标金额已经达到2023年全部中标项目披露金额的77%左右;其中,从项目数量来看,应用类占63%、算力类占21%、大模型类占13%、…

交换机端口隔离

拓扑图 配置 port-isolate mode命令用来配置端口隔离模式。 缺省情况下,端口隔离模式为二层隔离三层互通。 端口隔离包括双向隔离和单向隔离。接口的单向隔离是指若在接口A上配置它与接口B隔离,则从接口A发送的报文不能到达接口B,但从接口…

MATLAB画图,重磅教程MATLAB的美图及强大的绘图功能|

目录 1.plot() 函数: 2.scatter() 函数: 3.histogram() 函数: 4.bar() 函数: 5.plot3() 函数: 6.imshow() 函数: 7.surf() 函数: 福利:免费送资料 MATLAB(Matrix…

【基于 PyTorch 的 Python深度学习】5 机器学习基础(1)

前言 文章性质:学习笔记 📖 学习资料:吴茂贵《 Python 深度学习基于 PyTorch ( 第 2 版 ) 》【ISBN】978-7-111-71880-2 主要内容:根据学习资料撰写的学习笔记,该篇主要介绍了机器学习的基本任务、机器学习的一般流程&…