python-机器学习-决策树深度影响分析

python-机器学习-决策树深度影响
本文是python-机器学习系列第三篇,对决策数深度影响分析
此次的决策树算法是引用我上一篇决策树算法
链接:python-机器学习-决策树算法
代码如下:

# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
import DecisionTree as de

if __name__ == "__main__":
    N = 100
    x = np.random.rand(N) * 6      # [-3,3)
    x.sort()
    y = np.sin(x) + np.random.randn(N) * 0.05
    y = y.reshape(-1, 1)
    print(y) 
    x = x.reshape(-1, 1)  # 转置后,得到N个样本,每个样本都是1维的
    print(x) 
    # 比较决策树的深度影响
    depth = [2, 4, 6, 8, 10]
    clr = 'rgbmy'
    # reg = [DecisionTreeRegressor(criterion='mse', max_depth=depth[0]),
    #        DecisionTreeRegressor(criterion='mse', max_depth=depth[1]),
    #        DecisionTreeRegressor(criterion='mse', max_depth=depth[2]),
    #        DecisionTreeRegressor(criterion='mse', max_depth=depth[3]),
    #        DecisionTreeRegressor(criterion='mse', max_depth=depth[4])]
    reg = [de.DecisionTree(criterion='gini', max_depth=depth[0]),
           de.DecisionTree(criterion='gini', max_depth=depth[1]),
           de.DecisionTree(criterion='gini', max_depth=depth[2]),
           de.DecisionTree(criterion='gini', max_depth=depth[3]),
           de.DecisionTree(criterion='gini', max_depth=depth[4])]

    plt.plot(x, y, 'k^', linewidth=2, label='Actual')
    x_test = np.linspace(0, 6, 50).reshape(-1, 1)
    for i, r in enumerate(reg):
        dt = r.fit(x, y)
        y_hat = dt.predict(x_test)
        plt.plot(x_test, y_hat, '-', color=clr[i], linewidth=2, label='Depth=%d' % depth[i])
    plt.legend(loc='upper left')
    plt.grid()
    plt.show()

运行结果:
python-机器学习-决策树深度影响分析_第1张图片
从结果可以看出,决策数的数深越大,拟合的准确度就越高,但是所需时间也会几何倍数的递增一旦深度达到某个阈值就会出现过拟合。

你可能感兴趣的:(机器学习,决策树,python)