python机器学习决策树和SVM向量机算法实现红酒分类

news2024/12/28 10:32:21

1、红酒数据介绍

经典的红酒分类数据集是指UCI机器学习库中的Wine数据集。该数据集包含178个样本,每个样本有13个特征,可以用于分类任务。

具体每个字段的含义如下:
alcohol:酒精含量百分比
malic_acid:苹果酸含量(克/升)
ash:灰分含量(克/升)
alcalinity_of_ash:灰分碱度(以mEq/L为单位)
magnesium:镁含量(毫克/升)
total_phenols:总酚含量(以毫克/升为单位)
flavanoids:类黄酮含量(以毫克/升为单位)
nonflavanoid_phenols:非类黄酮酚含量(以毫克/升为单位)
proanthocyanins:原花青素含量(以毫克/升为单位)
color_intensity:颜色强度(以 absorbance 为单位,对应于 1cm 路径长度处的相对宽度)
hue:色调,即色彩的倾向性或相似性(在 1 至 10 之间的一个数字)
od280/od315_of_diluted_wines:稀释葡萄酒样品的光密度比值,用于测量葡萄酒中各种化合物的浓度
proline:脯氨酸含量(以毫克/升为单位),是一种天然氨基酸,与葡萄酒的品质和口感有关。

2、引入依赖库

import pandas as pd
import numpy as np
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

3、加载红酒数据集

# 加载红酒数据集
wineBunch = load_wine()
type(wineBunch)

sklearn.utils.Bunch
sklearn.utils.Bunch是Scikit-learn库中的一个数据容器,类似于Python字典(dictionary),
它可以存储任意数量和类型的数据,并且可以使用点(.)操作符来访问数据。Bunch常用于存储机器学习模型的数据集,
例如描述特征矩阵的数据、相关联的目标向量、特征名称等等,以便于组织和传递这些数据到模型中进行训练或预测。

len(wineBunch.data),len(wineBunch.target)

(178, 178)

featuresDf = pd.DataFrame(data=wineBunch.data, columns=wineBunch.feature_names)   # 特征数据
labelDf = pd.DataFrame(data=wineBunch.target, columns=["target"])               # 标签数据
wineDf = pd.concat([featuresDf, labelDf], axis=1)  # 横向拼接
wineDf.head(5).append(wineDf.tail(5))              # 打印首尾5行

在这里插入图片描述

wineDf.columns

Index([‘alcohol’, ‘malic_acid’, ‘ash’, ‘alcalinity_of_ash’, ‘magnesium’,
‘total_phenols’, ‘flavanoids’, ‘nonflavanoid_phenols’,
‘proanthocyanins’, ‘color_intensity’, ‘hue’,
‘od280/od315_of_diluted_wines’, ‘proline’, ‘target’],
dtype=‘object’)

3、构造训练集、验证集和测试集

# 将数据集分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(wineDf.drop("target", axis=1), wineDf["target"], test_size=0.2)

# 将训练集和验证集进一步划分为训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2)
type(X_train),type(y_train)

(pandas.core.frame.DataFrame, pandas.core.series.Series)

X_train.shape, X_test.shape, y_train.shape, y_test.shape

((113, 13), (36, 13), (113,), (36,))

X_train.shape, X_val.shape, y_train.shape, y_val.shape

((113, 13), (29, 13), (113,), (29,))

wineDf.target.unique()  # 3个分类

array([0, 1, 2])

4、训练决策树模型

# 使用决策树算法进行训练
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
# 在验证集上评估模型性能以避免过拟合
val_pred = clf.predict(X_val)
val_accuracy = accuracy_score(y_val, val_pred)
print("验证集准确率:", val_accuracy)

验证集准确率: 0.9655172413793104

# 在测试集上评估模型性能
test_pred = clf.predict(X_test)
test_accuracy = accuracy_score(y_test, test_pred)
print("测试集准确率:", test_accuracy)

测试集准确率: 0.9166666666666666

clf.feature_importances_   # 使用特征的数量的重要性
[*zip(wineBunch.feature_names, clf.feature_importances_)]  # 特征名称和重要性

[(‘alcohol’, 0.0),
(‘malic_acid’, 0.0),
(‘ash’, 0.0),
(‘alcalinity_of_ash’, 0.0),
(‘magnesium’, 0.0),
(‘total_phenols’, 0.0),
(‘flavanoids’, 0.39118650550280015),
(‘nonflavanoid_phenols’, 0.0),
(‘proanthocyanins’, 0.0),
(‘color_intensity’, 0.4062066644389752),
(‘hue’, 0.0),
(‘od280/od315_of_diluted_wines’, 0.026685709144887784),
(‘proline’, 0.17592112091333678)]

5、训练SVM向量机模型

from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
# 将数据集分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(wineDf.drop("target", axis=1), wineDf["target"], test_size=0.2)

# 将训练集和验证集进一步划分为训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2)
scaler = StandardScaler()
# 对特征进行标准化处理,以确保不同特征之间具有相同的范围
X_train = scaler.fit_transform(X_train)  # 特征标准化
X_test = scaler.fit_transform(X_test)  # 特征标准化
X_val = scaler.fit_transform(X_val)  # 特征标准化
# SVM模型训练
svm = SVC(kernel='rbf',    # 使用径向基函数(rbf)核
          C=1,             # 正则化参数C取值为1
          gamma=0.1)       # 核系数gamma取值为0.1
svm.fit(X_train, y_train)
# 在验证集上评估模型性能以避免过拟合
val_pred = svm.predict(X_val)
val_accuracy = accuracy_score(y_val, val_pred)
print("验证集准确率:", val_accuracy)
# 在测试集上评估模型性能
test_pred = svm.predict(X_test)
test_accuracy = accuracy_score(y_test, test_pred)
print("测试集准确率:", test_accuracy)

测试集准确率: 0.9722222222222222

结果说明:SVM向量机算法模型在红酒数据集上的性能表现优于决策树分类模型。

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

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

相关文章

中科大ChatGPT学术镜像小白部署教程,全民都可以拥抱AI

docker…不会用…python不会用…服务器默认python版本3.6不会升级…代理也不会配置…各种命令不会用… 那么下面就是最简单办法,点点点即可【希望有帮助?】 文章目录一、体验镜像地址二、 基本配置2.1 config.py文件2.2 main.py文件三、下载项目四、项目…

FRP内网穿透配置

FRP内网穿透(WIN) 官方文档:点击进入 1.下载地址:点击进入 2.linux 压缩命令:tar -zxvf 包名,即可! 3.linux配置服务端(frps) [common] bind_addr0.0.0.0 # frp监听的…

【NLP实战】基于Bert和双向LSTM的情感分类【下篇】

文章目录前言简介第一部分关于pytorch lightning保存模型的机制关于如何读取保存好的模型完善测试代码第二部分第一次训练出的模型的过拟合问题如何解决过拟合后记前言 本文涉及的代码全由博主自己完成,可以随意拿去做参考。如对代码有不懂的地方请联系博主。 博主…

TCP协议与UDP协议

1.TCP协议特点 1.1连接的建立与断开 TCP协议提供的是:面向连接、可靠的、字节流服务。使用TCP协议通信的双发必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全…

从C语言到C++(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for +nullptr

目录 1. 内联函数 1.1 内联函数的概念 1.2 内联函数的特性 1.3 宏的优缺点和替代方法 2. auto关键字(C11) 2.1 改版前的auto 2.2 改版后的auto 2.3 auto 的使用场景 2.3.1处理很长的数据类型 2.3.2 auto 与指针结合起来使用: 2.4…

第2章 数据的类型

第2章 数据的类型 文章目录第2章 数据的类型2.2 为什么要进行区分2.3 结构化数据和非结构化数据案例:数据预处理字数/短语数特殊符号文本相对长度文本主题2.4 定量数据和定性数据2.4.1 案例:咖啡店数据2.4.2 案例:世界酒精消费量2.4.3 更深入…

4.18、TCP滑动窗口

4.18、TCP滑动窗口1.滑动窗口的介绍2.滑动窗口通信的例子1.滑动窗口的介绍 滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数…

客户案例 | 迎接智能化浪潮,传统水厂数字化势在必行

关键发现 客户痛点:传统水厂业务离散,无法实现数据实时同步,为收集和分析处理数据并辅助决策带来障碍。需要智能化管理系统帮助水厂提升管理效率,优化管理流程,实现数字化、智能化的目标。 解决方案:天津腾…

你说你还不会Redis?别怕,今天带你搞定它!

Redis 前言 本文章是我学习过程中,不断总结而成,篇幅较长,可以根据选段阅读。 全篇17000字,图片 十三 张,预计用时1小时。 认识Redis 什么是Redis? 要使用一门技术,首先要知道这门技术是什…

pytorch进阶学习(三):在数据集数量不够时如何进行数据增强

对图片数据增强,可以对图片实现: 1. 尺寸放大缩小 2. 旋转(任意角度,如45,90,180,270) 3. 翻转(水平翻转,垂直翻转) 4. 明亮度改变(变…

一零五五、mysql8.0高版本数据导入5.6低版本通解

背景 今日想将本机的mysql(8.0)中的数据库文件导出到远程服务器中的mysql(5.6)中,刚开始用source 一直报一大串ERROR,由于数据量比较大,那就直接用图形化工具导吧,连接上远程数据库&…

【常见CSS扫盲之渐变效果】好看的24种CSS渐变效果汇总(附源码)

【写在前面】web开发过程中,页面背景色想要一个渐变的效果很多时候网上一找全是官网那种很丑的色系,尤其是一些按钮和一些大背景色时候,不能搞得很yellow,今天我就做个工具人给大家罗列一些我在工作过程中总结的一些好看的渐变效果…

51单片机(8051系列)外部时钟

OUT(输出引脚),IN(输入引脚)的区别 OUT(输出引脚) 输入引脚连接输入设备IN(输入引脚) 输出引脚连接输出设备外部时钟和内部时钟的区别 1、XTAL1和XTAL2引脚 内部时钟方式:必须在XTAL1和XTAL2引脚两端跨…

观早报 | 特斯拉储能超级工厂落沪;“华尔街之狼”募资550亿

今日要闻:京东拟今年发布千亿级产业大模型;特斯拉储能超级工厂落沪;“华尔街之狼”募资550亿;英特尔落户海南三亚;日本人要搞二次元老婆版 ChatGPT京东拟今年发布千亿级产业大模型 据《科创板日报》消息,京…

机器学习——L1范数充当正则项,让模型获得稀疏解,解决过拟合问题

问:使用L2范数正则项比L1范数正则项得到的是更为稀疏的解。 答:错误,L1范数正则项得到的是更稀疏的解。因为在L1正则项中,惩罚项是每个参数绝对值之和;而在L2正则项中,惩罚项是每个参数平方的和。L1正则项…

数字孪生智慧应急怎么实现?

根据国家对智慧应急建设的指示精神以及城市发展的迫切需求,智慧应急体系的建设应当从“大应急、大安全”的业务关切出发,聚焦“智慧应急”需求,融合对安全推进城市韧性建设的思考,将人工智能、物联网、大数据等高科技手段与应急救…

深度学习----DenseNet

1. 结构图 Input Shape : (3, 7, 7) — Output Shape : (2, 3, 3) — K : (3, 3) — P : (1, 1) — S : (2, 2) — D : (2, 2) — G : 1 The parts of this post will be divided according to the following arguments. These arguments can be found in the Pytorch documen…

STM32CubeMx+HAL库实现USB CDC+MSC复合设备

之前的文章中介绍过STM32的USB应用,包括虚拟串口(CDC)和大容量存储设备(MSC)。今天来介绍USB实现CDC和MSC复合设备的方法。 硬件:STM32F407VET6 软件:STM32CubeMx v6.5F4库v1.27.1 编译环境&a…

行内元素之间出现空白间隙及解决办法

这里的行内元素包括 display 为 inline 和 inline-block 的元素。 基本布局 <div class"container"><span class"item">1</span><span class"item">2</span><span class"item">3</span> …

15. unity官网资源商店的免费资源引入自己项目中

1. 说明 在unity开发中可以在官网引入一些免费的资源&#xff0c;免得自己找不到合适的素材 第一步&#xff1a; 首先进入Unity资源商店官网&#xff0c;https://assetstore.unity.com/&#xff0c;计入并登录自己的unity账号&#xff0c;如果没账号&#xff0c;可以注册一个…