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:给定目标属性中各
基于鸢尾花分类决策树的示例
于 2022-11-20 12:22:03 首次发布
本文通过鸢尾花数据集演示了决策树分类算法的应用,展示了训练和测试数据的精度,以及特征重要性。训练数据准确率为0.97,测试数据准确率为1.0。特征A、B、C、D中,D的重要性最高。
摘要由CSDN通过智能技术生成