机器学习——决策树(一)

决策树(DT)是用于分类回归的非参数监督学习方法。目标是创建一个模型,通过学习从数据特征推断出的简单决策规则来预测目标变量的值。

例如,在下面的示例中,决策树从数据中学习以使用一组if-then-else决策规则来近似正弦曲线。树越深,决策规则越复杂,模型越适合。

决策树的优点

  • 简单易懂和解释,直观
  • 只需少量的数据准备
  • 能够处理数字和分类数据
  • 能够处理多输出问题
  • 可以使用统计测试验证模型

决策树的缺点

  • 容易过拟合
  • 决策树可能不稳定
  • 已知在最优性的几个方面甚至对于简单的概念,学习最优决策树的问题是NP完全的。因此,实际的决策树学习算法基于启发式算法,例如贪婪算法,其中在每个节点处进行局部最优决策。这种算法不能保证返回全局最优决策树。这可以通过在集合学习器中训练多个树来减轻,其中特征和样本随替换而被随机采样。
  • 有些概念很难学习,因为决策树不容易表达它们,例如XOR,奇偶校验或多路复用器问题。
  • 如果某些类占主导地位,决策树学习者会创建偏向的树。因此,建议在拟合决策树之前平衡数据集。

1、分类

决策树能够对数据集执行多类分类,将两个数组作为输入:数组X,稀疏或密集,大小 保存训练样本,以及数组Y的整数值,大小,保存训练样本的类标签:[n_samples, n_features][n_samples]。

>>> from sklearn.datasets import load_iris
>>> from sklearn import tree
>>> iris = load_iris()
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(iris.data, iris.target)

使用sklearn.datasets生成数据,并调用tree.DescisionTreeClassifier()方法对数据进行分类,如下:

In [11]: >>> import graphviz
    ...: >>> dot_data = tree.export_graphviz(clf, out_file=None)
    ...: >>> graph = graphviz.Source(dot_data)
    ...: >>> graph.render("iris")
    ...:
Out[11]: 'iris.pdf'

对数据进行可视化,输出为pdf格式:

可视化决策树

2.回归

决策树也可以使用DecisionTreeRegressor该类应用于回归问题 ,y应该是浮点值。

import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt

# Create a random dataset
#获取随机数生成器
rng = np.random.RandomState(1)
#训练数据,并排序
X = np.sort(5 * rng.rand(100, 1), axis=0)
#数据对应的标签,并取余弦改变格式
y = np.sin(X).ravel()

y[::5] += 3 * (0.5 - rng.rand(20))

# 创建回归对象,用训练数据拟合回归模型
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(X, y)
regr_2.fit(X, y)

# 预测
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)
回归

3.多输出问题

多输出问题是一种监督学习问题,有几个输出要预测,构建能够预测所有n个输出的单个模型。首先,它需要较低的训练时间,因为只建立了一个估算器。其次,通常可以增加所得估计器的泛化精度。

该模块通过在DecisionTreeClassifier和中 实现此策略,为多输出问题提供支持DecisionTreeRegressor。如果决策树适合大小的输出数组Y,则结果估计器将:[n_samples, n_outputs]

  • 输出n_output值predict;
  • 输出类概率的n_output数组列表 predict_proba

多输出决策树回归中演示了使用 多输出树进行回归。在此示例中,输入X是单个实数值,输出Y是X的正弦和余弦。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor

# 生成训练数据集
#获取随机数生成器
rng = np.random.RandomState(1)
#生成训练数据,并排序
X = np.sort(200 * rng.rand(100, 1) - 100, axis=0)
#生成数据对应的标签,并取余弦改变格式
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T
y[::5, :] += (0.5 - rng.rand(20, 2))

#创建回归对象
regr_1 = DecisionTreeRegressor(max_depth=3)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_3 = DecisionTreeRegressor(max_depth=8)
#用训练数据拟合回归模型
regr_1.fit(X, y)
regr_2.fit(X, y)
regr_3.fit(X, y)

# 预测
X_test = np.arange(-100.0, 100.0, 0.01)[:, np.newaxis]
print(X_test)
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)
y_3 = regr_3.predict(X_test)
多输出问题

 

决策树算法是一种广泛应用于分类和回归的机器学习算法,它基于树形结构对样本进行分类或预测。决策树算法的主要思想是通过一系列的判断来对样本进行分类或预测。在决策树中,每个节点表示一个属性或特征,每个分支代表该属性或特征的一个取值,而每个叶子节点代表一个分类或预测结果。 决策树算法的训练过程主要包括以下步骤: 1. 特征选择:根据某种指标(如信息增益或基尼系数)选择最优的特征作为当前节点的分裂属性。 2. 决策树生成:根据选择的特征将数据集分成若干个子集,并递归地生成决策树。 3. 剪枝:通过剪枝操作来提高决策树的泛化性能。 决策树算法的优点包括易于理解和解释、计算复杂度较低、对缺失值不敏感等。但是,决策树算法也存在一些缺点,如容易出现过拟合、对离散数据敏感等。 下面是一个决策树算法的案例:假设我们要根据一个人的年龄、性别、教育程度和职业预测其收入水平(高于或低于50K)。首先,我们需要将这些特征进行编码,将其转换为数值型数据。然后,我们可以使用决策树算法对这些数据进行训练,并生成一个决策树模型。最后,我们可以使用该模型对新的数据进行分类或预测。例如,根据一个人的年龄、性别、教育程度和职业,我们可以使用决策树模型预测该人的收入水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值