机器学习之八大算法⑧——决策树(分类树DecisionTreeClassifier)

it2022-05-09  44

分类树代码及注释

import numpy as np import matplotlib.pyplot as plt from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_breast_cancer #肿瘤集 # 中文、负号 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 读取数据 data = load_breast_cancer() x = data.data y = data.target #创建模型 c_tree2 = DecisionTreeClassifier(max_depth=2) c_tree5 = DecisionTreeClassifier(max_depth=5) #训练模型 c_tree2.fit(x,y) c_tree5.fit(x,y) #打印准确率 print('max_depth=2准确率:',c_tree2.score(x,y)) print('max_depth=5准确率:',c_tree5.score(x,y)) # 特征缩放(标准化) x -= np.mean(x, 0) x /= np.std(x, 0, ddof=1) # 画图 plt.scatter(x[y==0,0],x[y==0,1],label='负样本') plt.scatter(x[y==1,0],x[y==1,1],label='正样本') plt.legend() plt.show()

效果展示

决策树算法python库实现:

dtr= DecisionTreeRegressor(max_depth=5) #决策树回归器(均方差mse/mae) dtr= DecisionTreeClassifier(max_depth=5) #决策树分类器(基尼系数或熵)

主要参数: max_depth: 树最大深度,可选,缺省None,

min_samples_split : 分割内部节点所需最少样本数,可选,缺省2

min_samples_leaf : 成为叶子节点所需最少样本, 可选, 缺省1

max_features : 寻找最佳分割时考虑的特征数目, 可选, 缺省None: float/比例, ‘sqrt’/sqrt(n_features), ‘log2’/log2(n_features)

min_impurity_decrease : 如果节点分割导致不纯度减少超过此值,将进行分割,可选, 缺省0.0

presort : 预排序,加速寻找最佳分割,可选,缺省False, 大数据集降低训练过程, 小训练集或受限深度,可加快训练

random_state: 缺省None; 若int, 随机数产生器seed, 若RandomStates实例, 随机数产生器, 若None, np.random

调用库函数计算:建立模型并计算

dtr.fit(X,y) # 调用库函数决策树算法: 分类器y是整数或string;回归器y是浮点数 dtr.predict(X) # 预测样本类别或回归值,返回shape(n_samples)或(n_samples,n_outputs) dtr.decision_path(X) #返回决策路径,返回shape = [n_samples, n_nodes] dtr.score(X, y) #返回预测结果的R^2(1-u/v). u=((y_true - y_pred) ** 2).sum() v=((y_true - y_true.mean()) ** 2).sum() dtr.apply(X) # 返回每个样本预测为叶子的索引 dtr.n_features_ # 执行’fit’时的特征数 dtr.n_outputs_ # 执行’fit’时的输出数 dtr.tree_ # 树对象


最新回复(0)