机器学习-决策树-分类-汽车数据集-fetch_openml python scikit-learn

这篇具有很好参考价值的文章主要介绍了机器学习-决策树-分类-汽车数据集-fetch_openml python scikit-learn。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在这个使用决策树的分类任务中,将使用OpenML提供的汽车数据集来预测给定汽车信息的汽车可接受性。将使用Sklearn ’ fetch_openml '函数加载它。

此次获取的数据的版本是2。在数据集的版本1中,目标类有4个类(unacc, acc, good, vgood),但在第二个版本中,大多数类是Positive§,而其余的是Negative§。如果要查看版本1,可以在下面的单元格中更改版本参数。

以下是有关数据的信息:

buying:汽车的购买价格(vhigh, high, med, low)
maint:汽车的保养价格(高、中、低)
doors:门的数量(2、3、4、5个以上)
persons:这辆车可以搭载的人数。他们是2岁,4岁,甚至更多。
lug_boot:行李箱行李箱的尺寸(小号,大号,大号)
safety:汽车的估计安全性(低、中、高)
BinaryClass(目标特性):汽车可接受性类。要么是正§要么是负(N)。

1.导入模块

import numpy as np
import pandas as pd
import seaborn as sns
import sklearn
import matplotlib.pyplot as plt
%matplotlib inline

2.加载数据

from sklearn.datasets import fetch_openml
car_data = fetch_openml(name='car', version=2)
car_data = car_data.frame
car_data.head()

fetch_openml,机器学习python,机器学习,python,决策树

3.探索性分析

将数据拆分为训练集和测试集

from sklearn.model_selection import train_test_split
train_data, test_data = train_test_split(car_data, test_size=0.1,random_state=20)

plt.figure(figsize=(15,10))
sns.countplot(data=train_data, x='buying', hue='binaryClass')

fetch_openml,机器学习python,机器学习,python,决策树

4.数据预处理

将数据准备为机器学习模型提供适当的格式。

处理分类特征

决策树不关心特征是否缩放,它们可以处理分类特征。有一个文档注释, sklearn树实现不支持分类特性。

#在处理分类特征之前,创建一个训练输入数据和标签。
car_train = train_data.drop('binaryClass', axis=1)
car_labels = train_data[['binaryClass']]
#创建一个Pipeline来编码训练输入数据中的所有特征。
from sklearn.preprocessing import OrdinalEncoder
from sklearn.pipeline import Pipeline
pipe = Pipeline([('ord_enc', OrdinalEncoder())])
car_train_prepared = pipe.fit_transform(car_train)

再处理标签。标签包含P和N,所以想把它们转换成数字。这里不使用普通编码器,而是使用标签编码器。Sklearn明确地用于对目标特征进行编码。

from sklearn.preprocessing import LabelEncoder
label_enc = LabelEncoder()
car_labels_prepared = label_enc.fit_transform(car_labels)

5.训练并评估决策树分类器

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report

tree_clf = DecisionTreeClassifier()
tree_clf.fit(car_train_prepared, car_labels_prepared)

def accuracy(input_data,model,labels):
    preds = model.predict(input_data)
    acc = accuracy_score(labels,preds)
    return acc

def conf_matrix(input_data,model,labels):
    preds = model.predict(input_data)
    cm = confusion_matrix(labels,preds)
    return cm

def class_report(input_data,model,labels):
    preds = model.predict(input_data)
    report = classification_report(labels,preds)
    report = print(report)
    return report
accuracy(car_train_prepared, tree_clf, car_labels_prepared) #1.0

可以看出决策树对数据集分类后过拟合。

class_report(car_train_prepared, tree_clf, car_labels_prepared)

fetch_openml,机器学习python,机器学习,python,决策树

6.改进决策树

避免过拟合的一种方法是减少树的最大深度,由超参数“max_depth”设置。类似地,可以尝试使用’ max ‘项减少所有超参数,同时增加’ min_ '项参数。

此外,将“class_weight”设置为“balanced”,因为该数据集是不平衡的。通过将其设置为平衡,模型将根据所有类别中可用样本的数量自动调整类别权重。

这里使用GridSearch来查找这些超参数的最佳值。

import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import GridSearchCV

params_grid = {'max_leaf_nodes': list(range(0, 10)), 
               'min_samples_split': [0,1,2, 3, 4], 
               'min_samples_leaf': [0,1,2, 3, 4], 
               'max_depth':[0,1,2,3,4,5],
               'max_features':[0,1,2,3,4,5],
              'max_leaf_nodes':[0,1,2,3,4,5]}

grid_search = GridSearchCV(DecisionTreeClassifier(random_state=42, class_weight='balanced'), params_grid, verbose=1, cv=3, refit=True)
grid_search.fit(car_train_prepared, car_labels_prepared)
tree_best = grid_search.best_estimator_
from sklearn.tree import plot_tree

plt.figure(figsize=(20,15))
plot_tree(tree_best, feature_names=car_train.columns, class_names=['N','P']);

fetch_openml,机器学习python,机器学习,python,决策树

accuracy(car_train_prepared, tree_best, car_labels_prepared)  #0.8926045016077171
conf_matrix(car_train_prepared, tree_best, car_labels_prepared)

在混淆矩阵中,每一行代表一个实际的类,每一列代表预测的类。
因此,从上面的结果来看:

  • 430个阴性例子(N)被正确预测为阴性(“真阴性”)。
  • 28个阴性例子(N)被错误地归类为阳性例子,而它们实际上是阴性的(“假阳性”)。
  • 139个正面例子被错误地归类为负面(N),而实际上它们是正面§(“假阴性”)。
  • 958例被正确归类为正例(“真阳性”)。
class_report(car_train_prepared, tree_best, car_labels_prepared)

fetch_openml,机器学习python,机器学习,python,决策树
结果好多了。通过将类权重设置为“平衡”并找到超参数的最佳值,能够改进模型。

负类的例子比正类的少,可以在分类报告的“support”中看到它们。但模型能够以76%的准确率正确识别它们,并且能够以97%的准确率识别正例,而不会过度拟合,这就是精确性。

关于precision /Recall/F1分数的几点注意事项:

  • 精度是模型正确预测正例的精度。
  • 召回率是模型正确识别的正面例子的比率。
  • F1分数是准确率和召回率的调和平均值。

7.在测试集上评估模型

只有在改进了模型之后,才能把它提供给测试集。如果试图在训练时向模型显示测试集,可能会导致潜在的泄漏,从而产生误导性的预测。
同样,这里将应用与训练集相同的处理函数。

car_test = test_data.drop('binaryClass', axis=1)
car_test_labels = test_data['binaryClass']
car_test_prepared = pipe.transform(car_test)
car_test_labels_prepared = label_enc.transform(car_test_labels)

accuracy(car_test_prepared, tree_best, car_test_labels_prepared)#0.8554913294797688
class_report(car_test_prepared, tree_best, car_test_labels_prepared)

fetch_openml,机器学习python,机器学习,python,决策树

8.总结

决策树的学习到此结束,已经学习了如何构建和如何正则化(或处理过拟合)决策树分类器。文章来源地址https://www.toymoban.com/news/detail-836963.html

到了这里,关于机器学习-决策树-分类-汽车数据集-fetch_openml python scikit-learn的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《机器学习核心技术》分类算法 - 决策树

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 小白零基础《Python入门到精通》 决策树是一种 「二叉树形式」 的预测模型,每个 「节点」 对应一个 「判断条件」 , 「满足」 上一个条件才

    2024年02月11日
    浏览(56)
  • 机器学习:什么是分类/回归/聚类/降维/决策

    目录 学习模式分为三大类:监督,无监督,强化学习 监督学习基本问题 分类问题 回归问题 无监督学习基本问题 聚类问题 降维问题 强化学习基本问题 决策问题 如何选择合适的算法 我们将涵盖目前「五大」最常见机器学习任务: 回归 分类 聚类 降维 决策 分类是监督学习

    2024年02月12日
    浏览(46)
  • 机器学习基础之《分类算法(6)—决策树》

    一、决策树 1、认识决策树 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法 2、一个对话的例子 想一想这个女生为什么把年龄放在最上面判断!!! 如何高效的进行决策?特征的先后顺序

    2024年02月09日
    浏览(49)
  • 【机器学习】决策树与分类案例分析

    决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。下面就来举一个例子: 通过这一个例子我们会有一个问题,为什么女生会把年龄放在第一个呢?这就是决策树的一个思想:高效性。 为了

    2024年02月07日
    浏览(42)
  • 吴恩达《机器学习》6-1->6-3:分类问题、假设陈述、决策界限

    一、什么是分类问题? 在分类问题中,我们试图预测的变量𝑦是离散的值,通常表示某种类别或标签。这些类别可以是二元的,也可以是多元的。分类问题的示例包括: 判断一封电子邮件是否是垃圾邮件(二元分类) 判断一次金融交易是否涉及欺诈(二元分类) 区分肿瘤

    2024年02月05日
    浏览(43)
  • 机器学习中的分类算法详细介绍一(KNN、决策树)

    机器学习中的分类算法有:KNN算法、决策树、随机森林、SVM、极限学习机、多层感知机(BP神经网络)、贝叶斯方法。 关键知识:数据预处理(数据标准化)、K个邻居(需要由用户指定)、距离计算方式(需要考虑数据的特点) 核心思想:物以类聚人以群分,空间相近则类

    2024年02月09日
    浏览(41)
  • python机器学习决策树和SVM向量机算法实现红酒分类

    经典的红酒分类数据集是指UCI机器学习库中的Wine数据集。该数据集包含178个样本,每个样本有13个特征,可以用于分类任务。 具体每个字段的含义如下: alcohol:酒精含量百分比 malic_acid:苹果酸含量(克/升) ash:灰分含量(克/升) alcalinity_of_ash:灰分碱度(以mEq/L为单位)

    2024年02月08日
    浏览(41)
  • 机器学习实战:Python基于DT决策树模型进行分类预测(六)

    1.1 决策树的介绍 决策树(Decision Tree,DT)是一种类似流程图的树形结构,其中内部节点表示特征或属性,分支表示决策规则,每个叶节点表示结果。在决策树中,最上方的节点称为根节点。它学习基于属性值进行分区。它以递归方式进行分区,称为递归分区。这种类似流程

    2023年04月27日
    浏览(60)
  • python机器学习——分类模型评估 & 分类算法(k近邻,朴素贝叶斯,决策树,随机森林,逻辑回归,svm)

    交叉验证:为了让被评估的模型更加准确可信 交叉验证:将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。 通常情

    2024年02月03日
    浏览(67)
  • 【吴恩达·机器学习】第三章:分类任务:逻辑回归模型(交叉熵损失函数、决策边界、过拟合、正则化)

    博主简介: 努力学习的22级计算机科学与技术本科生一枚🌸 博主主页: @Yaoyao2024 每日一言🌼: 勇敢的人,不是不落泪的人,而是愿意含着泪继续奔跑的人。 ——《朗读者》 本系列博客文章是博主本人根据吴恩达老师2022年的机器学习课程所学而写,主要包括老师的核心讲义

    2024年02月19日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包