【数据挖掘算法实现】决策树sklearn实现

决策树模型介绍(什么场景使用)

  • 决策树 -有监督(有y)
  • 产生的模型具有可解释性。
  • 决策树不仅可以用来构建模型也可以用来筛选变量。(决策树用一个递归的过程将数据切分成越来越小的单元格中,单元格中数据逐步得到‘净化’,在这个过程中,决策树会选择出对有知道数据挖掘任务最重要的那些变量)
  • 决策树利用目标变量来确定如何划分每个输入。最后,决策树将数据分解为不同的片段,他们是由每一步的划分规则所定义。将所有片段中对应的规则整合在一起构成了决策树模型。
  • 决策树,顾名思义,是一种树,一种依托于策略抉择而建立起来的树。

优点

  1. 决策树模型具有可解释性,白盒模型,可以看到分类的原理(决策树可以给出结果,也可以给出为什么是这个结果,用什么规则/原理进行划分);
  2. 对决策树模型,数据准备往往是简单或者不必要的,决策数不需要进行归一化,因为每一个节点只是用一个变量,忽略了变量之间的联系,所以不需要进行归一化;
  3. 适合数据量比较大的场合

缺点

  • 决策数一个节点只使用一个变量进行判断,忽略了变量(指标)之间的相关性/关联性。
  • 对于各个类别样本数量不一致的数据,在决策树中,信息增益的结果偏向于那些具有更多数据的特性。(朴素贝叶斯可以部分解决这个问题)例子,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

参见决策树scikit-learn重要参数详解

代码示例

#-*- 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值