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

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向量机算法模型在红酒数据集上的性能表现优于决策树分类模型。

  • 3
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机器学习实战Python基于支持向量机SVM)是一种强大的分类算法SVM是一种监督学习方法,可以用于解决二分类和多分类问题。 SVM的基本思想是找到一个最佳的超平面,将数据分割成不同的类别。超平面被定义为在n维空间中具有n-1维的子空间。这个子空间可以将不同类别的数据点分开,并且尽可能地最大化边界。这就意味着SVM分类时尽量避免误分类,并且对于新的未知数据具有较好的泛化能力。 在Python中,我们可以使用scikit-learn库中的SVM实现机器学习任务。首先,我们需要导入必要的库和数据集。然后,我们可以对数据集进行预处理,如特征缩放和数据划分。接下来,我们可以创建一个SVM分类器,并使用训练数据进行模型的训练。训练完成后,我们可以使用测试数据进行预测,并评估模型的性能。 SVM还有一些重要的参数需要调节,如C和gamma。C表示惩罚项的权重,用于控制分类器的错误率和边界的平衡。较大的C值会减小错误率,但可能导致边界过拟合。gamma表示径向基函数核的参数,影响分类器的决策边界的灵活性。较大的gamma值会导致边界更加精确地拟合训练数据,但可能导致过拟合。 总的来说,机器学习实战Python基于支持向量机SVM)是一个强大的分类算法,可以用于解决二分类和多分类问题。在实际应用中,我们需要注意调节参数,使得分类器具有良好的泛化能力。 ### 回答2: 机器学习实战是一本非常实用的书籍,其中详细介绍了如何使用Python编程语言基于支持向量机SVM)进行机器学习实践。 支持向量机是一种强大的监督学习算法,可以用于解决分类和回归问题。该算法通过寻找一个最优的超平面来分割样本空间,使得不同类别的样本尽可能远离超平面。实际上,SVM通过最大化支持向量与超平面的距离,来确保分类的准确性和泛化能力。 在书籍中,作者通过经典的例子和详细的代码示例,展示了如何应用Python编程语言和scikit-learn库来构建和训练SVM模型。读者将学会如何准备数据集,进行特征选择和数据预处理,选择合适的SVM参数以及评估模型的性能。 此外,书中还强调了交叉验证、网格搜索和模型调优等重要概念。这些概念是整个机器学习过程中不可或缺的一部分,能够帮助我们提高模型的准确性和可靠性。 机器学习实战还提供了丰富的示例和应用,涵盖了多个领域,如文本分类、手写数字识别和人脸识别等。通过这些实例,读者可以深入理解SVM在实际问题中的应用。 总而言之,机器学习实战是一本非常实用的书籍,提供了丰富的例子和代码,使读者能够快速上手并应用SVM算法解决实际问题。无论是对于初学者还是有一定机器学习经验的人来说,这本书都是一本值得推荐的学习资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值