决策树模型介绍(什么场景使用)
- 决策树 -有监督(有y)
- 产生的模型具有可解释性。
- 决策树不仅可以用来构建模型也可以用来筛选变量。(决策树用一个递归的过程将数据切分成越来越小的单元格中,单元格中数据逐步得到‘净化’,在这个过程中,决策树会选择出对有知道数据挖掘任务最重要的那些变量)
- 决策树利用目标变量来确定如何划分每个输入。最后,决策树将数据分解为不同的片段,他们是由每一步的划分规则所定义。将所有片段中对应的规则整合在一起构成了决策树模型。
- 决策树,顾名思义,是一种树,一种依托于策略抉择而建立起来的树。
优点
- 决策树模型具有可解释性,白盒模型,可以看到分类的原理(决策树可以给出结果,也可以给出为什么是这个结果,用什么规则/原理进行划分);
- 对决策树模型,数据准备往往是简单或者不必要的,决策数不需要进行归一化,因为每一个节点只是用一个变量,忽略了变量之间的联系,所以不需要进行归一化;
- 适合数据量比较大的场合
缺点
- 决策数一个节点只使用一个变量进行判断,忽略了变量(指标)之间的相关性/关联性。
- 对于各个类别样本数量不一致的数据,在决策树中,信息增益的结果偏向于那些具有更多数据的特性。(朴素贝叶斯可以部分解决这个问题)例子,100个人,90个男生,10个女生,系统更加倾向于分类成男生
- 过拟合问题的出现。 决策数容易过拟合,需要控制。
决策树思维导图
决策树算法实现 python sklearn
决策树算法与sklearn决策树参数说明
classsklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
七个参数:
Criterion,
两个随机性相关的参数(random_state,splitter),
四个剪枝参数(max_depth, min_sample_leaf,max_feature,min_impurity_decrease)
一个属性:feature_importances_
四个接口:fit,score,apply,predict
代码示例
#-*- coding: utf-8 -*-
#使用ID3决策树算法预测销量高低
# 代码需要统一安装pydot graphviz
# pydot文件夹 graphviz conda install
import pandas as pd
import os
import pydot
#from io import StringIO
os.chdir(u'C:/第二次/01决策树分类问题:预测销量高低') #u表示 unicode
from sklearn.externals.six import StringIO
#参数初始化
inputfile ='sales_data.xls'
data = pd.read_excel(inputfile, index_col = u'序号') #导入数据
#数据是类别标签,要将它转换为数据
#用1来表示“好”、“是”、“高”这三个属性,用-1来表示“坏”、“否”、“低”
data[data == u'好'] = 1
data[data == u'是'] = 1
data[data == u'高'] = 1
data[data != 1] = -1
x = data.iloc[:,:3].as_matrix().astype(int)
y = data.iloc[:,3].as_matrix().astype(int)
import sklearn.tree as tree
#初始化对象,选择标准,默认 gini系数,entropy是交叉熵。min_sanmples_spilt节点分裂出来的samples数
clf = tree.DecisionTreeClassifier(criterion='entropy', max_depth=8, min_samples_split=5)
#训练模型
tree1=clf.fit(x, y)
#预测数据
result = clf.predict(test_data)
result = clf.predict_proba(test_data)