机器学习——决策树与随机森林

逻辑回归是一种线性由监督离散型分类模型
决策树是一种非线性有监督离散型分类模型
逻辑回归对于非线性的解决方案:映射到高维

决策树

在这里插入图片描述
决策树是一种非线性有监督离散型分类模型
随机森林是一种非线性有监督离散性分类模型

1.决策树
(1)决策树是一个有监督的机器学习算法,做分类用的,而且是非线性的。
(2)决策树的建模过程,不是创造一个方程了,而是构建一棵树。这棵树不一定只是二叉树
(3)损失函数
在这里插入图片描述
数据类型

  1. 离散的数据 需指明取值数量 2^M 种分割方式

天气 : 晴天 雨天 多云
学历: 高中 本科 研究生

  1. 连续的数据 需离散化, 需指明离散化后的数量

车速:
低速 (60)中速 (80 )高速
M+1种分割方式
决策树是通过固定的条件对类别进行判断
在这里插入图片描述
决策树的生成:数据在不断分裂的递归过程,每一次分裂,尽可能让类别一样的数据在树的一边,
当树的叶子节点的数据都是一类的时候,则停止分裂(if lese语句)
在这里插入图片描述
数据集:在这里插入图片描述
分割方式一:在这里插入图片描述
分割方式二:
在这里插入图片描述
计算纯度的方式:
在这里插入图片描述
one-hot划分方式:
决策树通过固定的条件对类别进行判断——非线性离散性数据
纯度越高,决策树越好——>熵大,方差大,基尼系数高。

熵:信息增益
决策树不一定是二叉树
纯度:当应用一个特征,对数据进行分类,如果这个特征能把数据分到一侧,则可说该特征的分类纯度高。

基尼系数,熵越大,方差越大,数据集越不一样,纯度越高
基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标
若低于0.2表示指数等级极低;(高度平均)
0.2-0.29表示指数等级低;(比较平均)
0.3-0.39表示指数等级中;(相对合理)
0.4-0.59表示指数等级高;(差距较大)
0.6以上表示指数等级极高。(差距悬殊)
一般发达国家的基尼指数在0.24到0.36之间,美国偏高,为0.45。中国国家统计局公布基尼系数2012年为0.474,2013年为0.473,2014年为0.469,2015年为0.462,2016年为0.465

决策树的分割方式:非线性
在这里插入图片描述
单棵决策树的缺点:
1.运算两大,需要一次加载所有数据进内存。并且找寻分割条件是一个极耗资源的工作。
2.训练应本中出现异常数据时,将会对决策树产生很大影响。抗干扰能力差

解决方法:
1.减少决策树所需训练样本
2.随机采样,降低异常数据的影响

逻辑回归的优点:和逻辑回归比,逻辑回归可以告诉我们概率,二决策树只能0,1

抗干扰能力差举例:
在这里插入图片描述
不同深度决策树对比:

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

N = 100
x = np.random.rand(N) * 6 - 3
x.sort()

y = np.sin(x) + np.random.rand(N) * 0.05
# print(y)
import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt

N = 100
x = np.random.rand(N) * 6 - 3
x.sort()

y = np.sin(x) + np.random.rand(N) * 0.05
# print(y)

x = x.reshape(-1, 1)
# print(x)

dt_reg = DecisionTreeRegressor(criterion='mse', max_depth=3)
dt_reg.fit(x, y)

x_test = np.linspace(-3, 3, 50).reshape(-1, 1)
y_hat = dt_reg.predict(x_test)

x_test = np.linspace(-3, 3, 50).reshape(-1, 1)
y_hat = dt_reg.predict(x_test)

plt.plot(x, y, "y*", label="actual")
plt.plot(x_test, y_hat, "b-", linewidth=2, label="predict")
plt.legend(loc="upper left")
plt.grid()
plt.show()

#################################################

# 比较不同深度的决策树
depth = [2, 4, 6, 8, 10]
color = 'rgbmy'
dt_reg = DecisionTreeRegressor()
plt.plot(x, y, "ko", label="actual")
x_test = np.linspace(-3, 3, 50).reshape(-1, 1)
for d, c in zip(depth, color):
    dt_reg.set_params(max_depth=d)
    dt_reg.fit(x, y)
    y_hat = dt_reg.predict(x_test)
    plt.plot(x_test, y_hat, '-', color=c, linewidth=2, label="depth=%d" % d)
plt.legend(loc="upper left")
plt.grid(b=True)
plt.show()

x = x.reshape(-1, 1)
# print(x)

dt_reg = DecisionTreeRegressor(criterion='mse', max_depth=3)
dt_reg.fit(x, y)

x_test = np.linspace(-3, 3, 50).reshape(-1, 1)
y_hat = dt_reg.predict(x_test)

x_test = np.linspace(-3, 3, 50).reshape(-1, 1)
y_hat = dt_reg.predict(x_test)

plt.plot(x, y, "y*", label="actual")
plt.plot(x_test, y_hat, "b-", linewidth=2, label="predict")
plt.legend(loc="upper left")
plt.grid()
plt.show()

#################################################

# 比较不同深度的决策树
depth = [2, 4, 6, 8, 10]
color = 'rgbmy'
dt_reg = DecisionTreeRegressor()
plt.plot(x, y, "ko", label="actual")
x_test = np.linspace(-3, 3, 50).reshape(-1, 1)
for d, c in zip(depth, color):
    dt_reg.set_params(max_depth=d)
    dt_reg.fit(x, y)
    y_hat = dt_reg.predict(x_test)
    plt.plot(x_test, y_hat, '-', color=c, linewidth=2, label="depth=%d" % d)
plt.legend(loc="upper left")
plt.grid(b=True)
plt.show()

实验结果展示:
在这里插入图片描述
实验分析:黑色的点代表原始数据,我们可以看出,当深度很小的时候,决策树的分类效果相对不好,也就是纯度不高。随着层数的深入,分类效果越发明显。

随机森林

森林:由树组成。
随机:生成树的数据都是从数据集中随机选取的。

随机森林:当数据集很大的时候,我们随机选取数据集的一部分,生成一棵树,重复上述过程,我们可以生成一堆形态各异的数,这些树放在一起就叫森林。

并行思想:因为随机森林中的树都是相互独立的,所以这些树可以在不同的机器上,或者CPU,GPU上运行
这样能极大缩短建模的时间
在这里插入图片描述
在这里插入图片描述
随机森林和逻辑回归的对比:
在这里插入图片描述
剪枝

预剪枝: 在这棵树还没开始分裂的时候,提前设定好一些条件,在达到这些条件以后就不长了
后剪枝:先长,长完了再去掉(比如合并叶子节点)

预剪枝的方式:
(1)控制分裂的层次
(2)控制叶子节点的样本数量

剪枝保证了模型的通用性

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值