葡萄酒质量预测 -- 机器学习项目基础篇(1)

news2024/11/15 23:21:55

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

导入库和数据集

  • Pandas是一个有用的数据处理库。
  • 用于处理数组的Numpy库。
  • Seaborn/Matplotlib用于数据可视化。
  • Sklearn -该模块包含多个库,这些库具有预实现的功能,可以执行从数据预处理到模型开发和评估的任务。
  • XGBoost -这包含eXtreme Gradient Boosting机器学习算法,这是帮助我们实现高精度预测的算法之一。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
 
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn import metrics
from sklearn.svm import SVC
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
 
import warnings
warnings.filterwarnings('ignore')

现在让我们看看数据集的前五行。

df = pd.read_csv('winequality.csv')
print(df.head())

在这里插入图片描述
让我们研究一下数据集中每一列中的数据类型。

df.info()

在这里插入图片描述
现在我们将探索数据集的描述性统计度量。

df.describe().T

在这里插入图片描述

探索性数据分析(EDA)

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

df.isnull().sum()

在这里插入图片描述
由于不同列中的数据是连续值,因此让我们通过平均值来估算缺失值。

for col in df.columns:
  if df[col].isnull().sum() > 0:
    df[col] = df[col].fillna(df[col].mean())
 
df.isnull().sum().sum()

输出:

0

让我们绘制直方图来可视化数据集列中具有连续值的数据的分布。

df.hist(bins=20, figsize=(10, 10))
plt.show()

在这里插入图片描述
现在,让我们绘制计数图,以可视化每种葡萄酒质量的数字数据。

plt.bar(df['quality'], df['alcohol'])
plt.xlabel('quality')
plt.ylabel('alcohol')
plt.show()

在这里插入图片描述
有时提供给我们的数据包含冗余特征,它们无助于提高模型的性能,这就是为什么我们在使用它们来训练模型之前删除它们。

plt.figure(figsize=(12, 12))
sb.heatmap(df.corr() > 0.7, annot=True, cbar=False)
plt.show()

在这里插入图片描述
从上面的热图中,我们可以得出结论,“total sulphur dioxide”和“free sulphur dioxide”是高度相关的特征,因此,我们将删除它们。

df = df.drop('total sulfur dioxide', axis=1)

模型建立

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

df['best quality'] = [1 if x > 5 else 0 for x in df.quality]

我们也有一个对象数据类型的列,让我们用0和1替换它,因为只有两个类别。

df.replace({'white': 1, 'red': 0}, inplace=True)

从数据集中分离特征和目标变量后,我们将其分成80:20的比例进行模型选择。

features = df.drop(['quality', 'best quality'], axis=1)
target = df['best quality']
 
xtrain, xtest, ytrain, ytest = train_test_split(
    features, target, test_size=0.2, random_state=40)
 
xtrain.shape, xtest.shape

输出:

((5197, 11), (1300, 11))

在训练之前对数据进行归一化有助于我们实现模型的稳定和快速训练。

norm = MinMaxScaler()
xtrain = norm.fit_transform(xtrain)
xtest = norm.transform(xtest)

由于数据已经完全准备好了,让我们在上面训练一些先进的机器学习模型。

models = [LogisticRegression(), XGBClassifier(), SVC(kernel='rbf')]
 
for i in range(3):
    models[i].fit(xtrain, ytrain)
 
    print(f'{models[i]} : ')
    print('Training Accuracy : ', metrics.roc_auc_score(ytrain, models[i].predict(xtrain)))
    print('Validation Accuracy : ', metrics.roc_auc_score(
        ytest, models[i].predict(xtest)))
    print()

在这里插入图片描述

模型评估

从上述准确率,我们可以说,逻辑回归和SVC()分类器在验证数据上表现更好,验证数据和训练数据之间的差异更小。让我们使用Logistic回归模型绘制验证数据的混淆矩阵。

metrics.plot_confusion_matrix(models[1], xtest, ytest)
plt.show()

在这里插入图片描述
让我们打印性能最好的模型的分类结果。

print(metrics.classification_report(ytest,
                                    models[1].predict(xtest)))

在这里插入图片描述

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

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

相关文章

【Linux】带你深入理解文件系统

目录 文件系统 背景知识 磁盘结构 磁盘的存储结构 磁盘抽象(逻辑,虚拟)结构 BootBlock: Super block Data blocks inode Table BlcokBitmap inode Bitmap Group Descriptor Table 文件名和inode编号 硬链接和软链接 软链接 硬链接 取消…

Python的threading模块

为引入多线程的概念&#xff0c;下面是一个例子&#xff1a; import time, datetimestartTime datetime.datetime(2024, 1, 1, 0, 0, 0) while datetime.datetime.now() < startTime:time.sleep(1)print(Program now starting on NewYear2024) 在等待time.sleep()的循环调…

【Unity2D】Order in Layer 与Layer的区别

Order in Layer 是Unity 图形渲染的顺序&#xff0c;通过设置Order in Layer &#xff0c;可以设置同层(Layer)的物体出现顺序&#xff0c;可以默认使一种物体出现在另一种物体前方 设置一物体默认在其他物体之上不被遮挡 Layer是Unity中物体的层级&#xff0c;不同物体可以位…

vue2项目中使用svg图标

在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后&#xff0c;页面上加载的不再是图片资源, 这对页面性能来说是个很大的提升&#xff0c;而且我们SVG文件比img要小的很多&#xff0c;放在项目中几乎不占用资源。 1、安装SVG依赖插件并配置加载器和路径 npm instal…

原生求生记:揭秘UniApp的原生能力限制

文章目录 1. 样式适配问题2. 性能问题3. 原生能力限制4. 插件兼容性问题5. 第三方组件库兼容性问题6. 全局变量污染7. 调试和定位问题8. 版本兼容性问题9. 前端生态限制10. 文档和支持附录&#xff1a;「简历必备」前后端实战项目&#xff08;推荐&#xff1a;⭐️⭐️⭐️⭐️…

HDFS中namenode安全模式

HDFS中namenode安全模式 安全模式的现象探究step1step2step3step4 安全模式的概述控制进入时间和离开条件安全模式自动进入离开安全模式手动进入离开 安全模式的现象探究 step1 HDFS集群在停机状态下&#xff0c;使用hdfs -daemon命令逐个进程启动集群&#xff0c;观察现象首…

网站密码忘记了怎么办?chrome浏览器,谷歌浏览器。

有时候忘记了网站的密码&#xff0c;又不想“忘记密码”去一番折腾。如果你正好用的是 chrome 浏览器。 那么根本就没必要折腾&#xff0c;直接就能看到网站密码。 操作如下 1.在浏览器右上角点击三个小点&#xff1a; 2.点这三个点&#xff1a; 3.选择“显示密码”&#x…

Windows 10 中无法最大化任务栏中的程序

方法1&#xff1a;仅选择选项 PC 屏幕 如果您使用双显示器&#xff0c;有时这可能会发生在您的 1 台计算机已插入但您正在访问的应用程序正在另一台计算机上运行的情况下&#xff0c;因此您看不到任何选项。因此&#xff0c;请设置仅在主计算机上显示显示的 PC 屏幕选项。 第…

数字信号处理中的基本运算——累加运算

1. 累加原理 s a0 a1 a2 a3 ... a(L-1) 构成一个累加结果的输入数据为一帧数据&#xff0c;一帧数据所包含的数据个数为帧长度。 累加器的工作原理是&#xff1a;每帧数据周期性地流动&#xff0c;新的数据不断进入累加器与反馈支路相加&#xff0c;实现累加&#xff…

系统集成|第七章(笔记)

目录 第七章 范围管理7.1 项目范围管理概念7.2 主要过程7.2.1 规划范围管理7.2.2 收集需求7.2.3 定义范围7.2.4 创建工作分解结构 - WBS7.2.5 范围确认7.2.6 范围控制 上篇&#xff1a;第六章、整体管理 第七章 范围管理 7.1 项目范围管理概念 概述&#xff1a;项目范围管理就…

安装vite-plugin-svg-icons

找不到合适的图标&#xff0c;如何使用其他的svg图标&#xff1f; 安装vite-plugin-svg-icons 使用svg-icon&#xff0c;即可使用iconfont等svg图标库 安装及使用过程 一、安装依赖二、在main.js中导入文件三、在src/assets新建svg目录四、vite.config.js中进行配置五、在compo…

串口设备驱动

文章目录 一、串口简介二、Linux下串口驱动框架uart_driver 结构体uart_port 的添加与移除三、Linux下串口驱动工作流程四、Linux下串口应用开发终端工作模式多线程例程一、串口简介 串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线…

【PCIE】completion timeout disable功能总结

在PCI Express&#xff08;PCIe&#xff09;总线上进行I/O数据交换时&#xff0c;会使用Transaction layer packets&#xff08;TLP&#xff09;来将数据从一个端点传输到另一个端点。当发生一些错误或异常情况时&#xff0c;可能会导致一个TLP包没有被正常处理&#xff0c;从而…

BOB_1.0.1靶机详解

BOB_1.0.1靶机详解 靶机下载地址&#xff1a;https://download.vulnhub.com/bob/Bob_v1.0.1.ova 这个靶机是一个相对简单的靶机&#xff0c;很快就打完了。 找到ip地址后对IP进行一个单独的扫描&#xff0c;发现ssh端口被改到25468了&#xff0c;等会儿登陆时候需要用到。 目…

砖墙(力扣)Map + 思维 JAVA

你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同&#xff08;也就是一个单位高&#xff09;但是宽度不同。每一行砖块的宽度之和相等。 你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过&#xff0c;就不算穿过这块砖。你…

无涯教程-jQuery - Puff方法函数

吹气效果可以与show/hide/toggle一起使用。通过按比例放大元素并同时隐藏它&#xff0c;可以形成粉扑效果。 Puff - 语法 selector.hide|show|toggle( "puff", {arguments}, speed ); 这是所有参数的描述- model - 效果的模式。可以是"显…

3D Tiles官方示例资源下载链接

本文列出Cesium官方提供的 3D Tiles 1.0和1.1规范的9个示例切块集&#xff08;tileset&#xff09;。 有关如何使用本地服务器托管这些示例的详细信息&#xff0c;请参阅 INSTRUCTIONS.md。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 1、Metadata Granularities …

使用 Docker 快速上手 Stability AI 的 SDXL 1.0 正式版

本篇文章&#xff0c;我们聊聊如何使用 Docker 来本地部署使用 Stability AI 刚刚推出的 SDXL 1.0&#xff0c;新一代的开源图片生成模型&#xff0c;以及在当前如何高效的使用显卡进行推理。 写在前面 好久没有写 Stable Diffusion 相关的内容了&#xff0c;趁着 SDXL 刚刚推…

k8s一站式使用笔记

前言 个人感觉比较磨心态&#xff0c;要坐住&#xff0c;因为细节太多&#xff0c;建议&#xff1a;一遍看个大概&#xff0c;二遍回来细品&#xff0c;不要当成任务&#xff0c;把握零碎时间 一、k8s安装 1、配置准备 硬件要求 内存&#xff1a;2GB或更多RAMCPU: 2核CPU或更…

Linux 之 systemctl

systemctl 可以控制软件&#xff08;一般指服务&#xff09;的启动、关闭、开机自启动 能被systemctl 管理的软件&#xff0c;一般也称 服务 系统内置服务均可被 systemctl 控制第三方软件&#xff0c;如果 自动注册了 可被systemctl 控制第三方软件&#xff0c;如果没有自动…