决策树和随机森林

决策树之特征选择依据

决策树由根节点、非叶子节点和叶子节点三部分组成
在这里插入图片描述
信息熵:代表了信息的程度,类别数越多,熵值越大,信息越丰富;类别数越少,熵值越小,信息量越小。
在这里插入图片描述
实例:,我们有14天的打球情况数据,有4个特征,如何选择特征构造决策树?我们以信息熵为例讲解一下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
决策树算法除了以信息增益为依据,还可以以有信息增益率,基尼系数等。
在这里插入图片描述
信息增益率
在这里插入图片描述
对于基于天气划分的信息增益率:
0.247/(0.971+0+0.971)
基尼系数
在这里插入图片描述
依然以天气特征作为例子:
根据天气数据可以分为三个部分(sunny、overcast和rainy),分别有5个,4个,5个。在sunny部分有一天打球;在overcast有4天打球,在rainy有3天打球
在这里插入图片描述

剪枝策略

在这里插入图片描述
在这里插入图片描述

创建决策树模型以及查看决策树

本代码以经纬度作为特征数据进行试验

import pandas as pd
import matplotlib.pyplot as plt
#sklearn 的数据集有好多个种
#自带的小数据集(packaged dataset):sklearn.datasets.load_<name>
#可在线下载的数据集(Downloaded Dataset):sklearn.datasets.fetch_<name>
#计算机生成的数据集(Generated Dataset):sklearn.datasets.make_<name>
#svmlight/libsvm格式的数据集:sklearn.datasets.load_svmlight_file(...)
#从买了data.org在线下载获取的数据集:sklearn.datasets.fetch_mldata(...)
from sklearn.datasets.california_housing import fetch_california_housing#导入波士顿房屋数据
from sklearn import tree
from IPython.display import Image
import pydotplus
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import GridSearchCV

housing=fetch_california_housing()#导入房屋数据
dtr=tree.DecisionTreeRegressor(max_depth=2)#创建决策树模型
dtr.fit(housing.data[:,[6,7]],housing.target)#训练数据
##将决策树进行可视化展示
dot_data = \
    tree.export_graphviz(
        dtr,
        out_file = None,
        feature_names = housing.feature_names[6:8],
        filled = True,
        impurity = False,
        rounded = True
    )
graph = pydotplus.graph_from_dot_data(dot_data)
graph.get_nodes()[7].set_fillcolor("#FFF2DD")
Image(graph.create_png())#转化为.png
graph.write_png("dtr.png")#保存到本地

在这里插入图片描述
选择更新决策树参数在训练

#决策树
housing.data_train,housing.data_test,housing.target_train,housing.target_test=train_test_split(housing.data[:,[6,7]],
                                                                                               housing.target,test_size=0.1,
                                                                                               random_state=42)
dtr1=tree.DecisionTreeRegressor(random_state=42)
dtr1.fit(housing.data_train,housing.target_train)
print("决策树验证集得分:"+str(dtr1.score(housing.data_test,housing.target_test)))
#决策树参数选择
tree_param_grid = { 'max_depth': list((2,4,6)),'min_samples_split':list((2,5,7))}
grid_tree=GridSearchCV(tree.DecisionTreeRegressor(),param_grid=tree_param_grid, cv=5)
grid_tree.fit(housing.data_train, housing.target_train)
#print("具体用法模型不同参数下交叉验证的结果:",grid_tree.cv_results_)
print("最佳模型下的分数和最佳模型参数" ,grid_tree.best_params_, grid_tree.best_score_)
dtrnew=tree.DecisionTreeRegressor(max_depth=6,min_samples_split=7)
dtrnew.fit(housing.data_train,housing.target_train)
print("决策树参数更新验证集得分:"+str(dtrnew.score(housing.data_test,housing.target_test)))

集成算法(三种集成算法)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
SKlearn中分类决策树的重要参数详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值