基于鸢尾花分类决策树的示例

本文通过鸢尾花数据集演示了决策树分类算法的应用,展示了训练和测试数据的精度,以及特征重要性。训练数据准确率为0.97,测试数据准确率为1.0。特征A、B、C、D中,D的重要性最高。
摘要由CSDN通过智能技术生成
import sys
import warnings

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.pylab as mpl

from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn.metrics import auc, roc_curve, classification_report

# 步骤0: 溢出警告设置 忽略
warnings.filterwarnings('ignore')

# 防止中文乱码
mpl.rcParams['font.sans-serif'] = [u'simHei']
mpl.rcParams['axes.unicode_minus'] = False

# 步骤1:数据加载、读取、处理
pth = "E:/XX/机器学习课程/决策树操作/datas/iris.data"
names = ['A', 'B', 'C', 'D', 'cls']

# 将文本内容转化为表格方便后续处理
df = pd.read_csv(filepath_or_buffer=pth, sep=",", header=None, names=names)
df.info()
# print(df)

# 数据清洗或调用LabelEncoder
class_label = {'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2}
# print(df['cls'].values)
# 采用匿名函数、map函数实现一一对应的关系,将字符型数据转化为数值型
# print(list(map(lambda cls: class_label[cls], df['cls'].values)))

# 步骤2:根据需求和原始模型;
# 从最原始的特征属性中获取具体的特征属性矩阵X和目标属性矩阵Y
# X = df.drop('cls', axis=1)  # axis=1 是列操作
X = df.iloc[:, :4]
X = np.asarray(X).astype(np.float64)
Y = df['cls']
# 对目标属性做一个类别的转换,将字符串的数据转换为从0开始的int值
label_encoder = LabelEncoder()
Y = label_encoder.fit_transform(Y)

# 步骤3:根据需求进行数据训练集和测试集拆分;
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.1, random_state=28)
print("训练数据X的格式:{}, 以及数据类型:{}".format(x_train.shape, type(x_train)))
print("测试数据X的格式:{}".format(x_test.shape))
print("训练数据Y的数据类型:{}".format(y_train.shape))
print("Y的取值范围:{}".format(np.unique(Y)))

# 步骤4:特征工程的操作[构建决策树时,由于拆分节点并不考虑不同属性单位之间的差异,没必要进行归一化、标准化]
# # a. 创建对象(标准化操作)
# scaler = StandardScaler()
# # b. 模型训练+训练数据转换
# x_train = scaler.fit_transform(x_train, y_train)
# # c. 基于训练好的对象对数据做一个转换
# x_test = scaler.transform(x_test)

# 步骤5:模型对象的构建
"""
def __init__(self,
             criterion="gini",
             splitter="best",
             max_depth=None,
             min_samples_split=2,
             min_samples_leaf=1,
             min_weight_fraction_leaf=0,
             max_features=None,
             random_state=None,
             max_leaf_nodes=None,
             min_impurity_decrease=0.,
             min_impurity_split=None,
             class_weight=None,
             presort=False)
    criterion: 给定决策树构建过程中的纯度的衡量指标,可选值: gini、entropy, 默认gini
    splitter:给定选择特征属性的方式,best指最优选择,random指随机选择(局部最优)
    max_features:当splitter参数设置为random的有效,是给定随机选择的局部区域有多大。
    max_depth:剪枝参数,用于限制最终的决策树的深度,默认为None,表示不限制
    min_samples_split=2:剪枝参数,给定当数据集中的样本数目大于等于该值的时候,允许对当前数据集进行分裂;如果低于该值,那么不允许继续分裂。
    min_samples_leaf=1, 剪枝参数,要求叶子节点中的样本数目至少为该值。
    class_weight:给定目标属性中各
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值