《Python AI 机器学习·深度学习》笔记

编程入门 行业动态 更新时间:2024-10-07 18:20:56

《Python AI 机器学习·<a href=https://www.elefans.com/category/jswz/34/1769690.html style=深度学习》笔记"/>

《Python AI 机器学习·深度学习》笔记

本文包含作者认为的文章重点、探索及思考。

一、分析问题 


 根据前述机器学习的基本步骤,尝试分析葡萄酒评级问题:

(1)制定目标—— 根据11个葡萄酒成分指标分析其品质
(2)收集数据—— UCI提供的Wine Quality开源数据集(UCI Machine Learning Repository)


(3)数据预处理—— 将数据集中的数据 1. 分离成数据部分+标签部分 2. 分成训练集和测试集
(4)学习数据
    •(4-1)选择机器学习的方法—— 集成学习中的随机森林

随机森林(Random Forest)是一种集成学习算法,它通过结合多个决策树来进行分类和回归任务。随机森林的主要思想是通过构建多个决策树,并对它们的预测结果进行集成,从而提高模型的准确性和鲁棒性。

Q1:为什么选择集成分类器处理此葡萄酒评级问题?

A1:此问题是一个非线性、非文本数据、数据维度高,所以可以采用SCV或者集成分类器来解决。而根据数据集可以看出,此数据集有以下特征:

        1)特征维度高:11个特征

        2)特征关系复杂:涉及多个特征之间的复杂关系

        可以采用集成分类器进行尝试,但也不是唯一选择。

Q2:为什么选择选择集成分类器中的随机森林?

A2:随机森林通过随机选择特征子集并基于这些子集构建多个决策树,然后通过投票或平均来产生最终的预测。这种随机性减少了过拟合的风险,使得模型更加稳定。

        当然,也可以根据数据特点、问题需求、计算资源和模型性能等因素尝试其它的集成分类器。

    •(4-2)调整参数
    •(4-3)学习数据构建模型
(5)模型评估
(6)精度未达标则返回执行步骤(4)
(7)用于实际工作

二、解决问题

关键步骤:

1. 读取数据集(直接使用UCI中的 Wine Quality数据集)

2. 将数据分为【标签数据】和【输入数据】

3. 将数据分为【训练数据】及【测试数据】

4. 进行训练

5. 进行测试

关键方法:

drop() 函数是 Pandas 库中的一个方法,用于在 DataFrame 中删除指定的行或列。在您的代码片段中,您使用了 drop 函数来删除 DataFrame 中的某一列。

        new_dataframe = dataframe.drop(labels, axis=axis)

  • labels:要删除的行或列的标签(名称)。
  • axis:指定删除的方向,可以是 0(行)或 1(列)。

classification_report() 函数是 Scikit-learn 库中的一个方法,用于生成分类报告,以评估分类模型的性能。这个报告对于了解模型在不同类别上的预测表现非常有用。

        from sklearn.metrics import classification_report

        report = classification_report(y_true, y_pred, target_names=class_names)

  • y_true:真实的标签(ground truth)。
  • y_pred:模型预测的标签。
  • target_names:一个包含类别名称的列表,用于标识不同的类别。

过程代码与结果:

本次代码在pycharm中编译。python3.6

第一次训练与预测:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report# 1. 读取数据
wine = pd.read_csv("winequality-white.csv", sep=";", encoding="utf-8")# 2. 将数据分为【标签数据】和【输入数据】
y = wine["quality"] #标签数据
x = wine.drop("quality",axis=1) #输入的特征(即每行去掉标签)# 3. 将数据分为【训练数据】及【测试数据】
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)# 4. 使用随机森林制作分类器,然后进行训练
model = RandomForestClassifier()
model.fit(x_train, y_train)# 5. 进行测试
y_pred = model.predict(x_test)
print(classification_report(y_test, y_pred))
print("正确率=", accuracy_score(y_test, y_pred))

第一次训练与预测结果:

精确率(Precision)关注减少假正例(误报)的数量,而召回率(Recall)关注减少假反例(漏报)的数量。对于垃圾邮件分类,可能更关注精确率,以避免误报正常邮件;对于医疗诊断问题,可能更关注召回率,以确保不漏掉任何患者。

当类别样本数量不平衡,且关注特定类别的性能时,准确度(Accuracy)可能无法提供足够的信息。在这种情况下,应该关注与特定类别相关的精确率、召回率等指标。

可以看出,准确度不高,且运行时可以看到有UndefinedMetricWarning警告,说明标签中存在不平衡数据,需要统计一下数据的情况。

import matplotlib.pyplot as plt
import pandas as pdwine = pd.read_csv("winequality-white.csv", sep=";", encoding="utf-8")
count_data = wine.groupby('quality')["quality"].count()
print(count_data)count_data.plot()
plt.savefig("whine-count-plt.png")
plt.show()

运行后结果:

根据统计结果,可以看出样本数量分布的不均衡,于是更新代码——

将原始标签中的评级范围分为以下三个类别:

  • 如果评级小于等于 4,映射为 0。
  • 如果评级大于 4 且小于等于 7,映射为 1。
  • 如果评级大于 7,映射为 2。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report# 1. 读取数据
wine = pd.read_csv("winequality-white.csv", sep=";", encoding="utf-8")# 2. 将数据分为【标签数据】和【输入数据】
y = wine["quality"] #标签数据
x = wine.drop("quality",axis=1) #输入的特征(即每行去掉标签)# 更新y的标签数据
newlist = []
for v in list(y):if v <= 4:newlist +=[0]elif v <=7:newlist +=[1]else:newlist +=[2]
y = newlist# 3. 将数据分为【训练数据】及【测试数据】
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)# 4. 使用随机森林制作分类器,然后进行训练
model = RandomForestClassifier()
model.fit(x_train, y_train)# 5. 进行测试
y_pred = model.predict(x_test)
print(classification_report(y_test, y_pred))
print("正确率=", accuracy_score(y_test, y_pred))

更新后结果:

更多推荐

《Python AI 机器学习·深度学习》笔记

本文发布于:2024-02-17 17:45:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1694904.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:深度   机器   笔记   Python   AI

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!