决策树算法讲解

决策树算法: 量化选股案例

来源:Stata与风险管理

作者:首都经济贸易大学\quad金融学院\quad田文涛

邮箱:tianwentao1999@163.com


什么是决策树

  • 如何做决策
    eg:是否学习[1]? 二食、三食or华侨? If-Then算法?
  • 决策树是仿树结构来进行决策的
是否学习的决策过程

解决什么问题

  • 分类问题
  1. 训练集、测试集(7:3、6:4)\rightarrowsklearn学习训练\rightarrow生成模型\leftarrow测试集验证
  2. 评估指标:
混淆矩阵 预测为正样本 预测为负样本
实际为正样本 True Positive (TP) False Negative (FN)
实际为负样本 False Positive (FP) True Negative (TN)

准确率(ACC)
Accuracy =\frac {TP+TN}{TP+TN+FP+FN}

精确度(PPV)
Precision = \frac{TP}{TP+FP}

召回率(TPR、Recall)
Recall = \frac{TP}{TP+FN}

特异度(TNR)
Specificity = \frac{TN}{TN+FP}


有关“树”的基本概念

  • 节点
    根节点
    内部节点
    叶节点
  • 深度
决策树节点图

如何构造“树”——三要素

  1. 属性构造
  • 离散变量
    二元属性
    多元属性
  • 连续变量
    序数属性

  1. 指标度量
  • 信息熵
    Ent(D)=-\sum_{i=1}^{k} p_{i} \log \left(p_{i}\right)

Ent(D)的值越小,代表该样本集D的纯度越高。

  • 信息增益
    {Ent}(D, a)= Ent(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} Ent\left(D^{v}\right)

说明

-- 假设属性aV个可能取值,用a对样本集进行划分,就会产生V个分支节点,D^v是第v个分支所包含的样本。从而计算出用属性a对样本集D进行划分所获得的信息增益。
-- 信息增益越大,用属性a对样本进行划分的纯度越高。
--选择信息增益最大的属性进行划分。


  • 基尼系数
    Gini=1-\sum_{i=1}^{k} p_{i}^{2}

基尼系数越小,纯度越高。

举例:
label=0:5个,label=1:5个\rightarrow p(0)=0.5,p(1)=0.5
label=0:2个,label=1:8个\rightarrow p(0)=0.2,p(1)=0.8
label=0:0个,label=1:10个\rightarrow p(0)=0,p(1)=1

G_1=1-[p(0)^2+p(1)^2]=0.5

G_2=1-[p(0)^2+p(1)^2]=0.32

G_3=1-[p(0)^2+p(1)^2]=0


  1. 模型生成
  • 在第一级节点,寻求某个特征,按照该特征的标准(熵或者基尼系数)进行分组,分组后得到的纯度最大
  • 完成第一级节点,在第二级节点上按照类似的思路找特征
  • 直到最后一个节点,分类完毕

算法实现

  1. 手动造轮子
  • 导入包
  • 数据清洗
    数据集划分
  • 函数定义
    信息熵、信息增益、基尼系数
  • 结果输出

  1. 调包侠
  • 核心算法:
from sklearn.tree import DecisionTreeClassifier
tree=DecisionTreeClassifier(max_depth=2,criterion='gini')
tree.fit(X,y)
print("准确度:",tree.score(X,y))
  • 相关参数:
    max_depth
    criterion
  • 具体实例(鸢尾花数据集)
from sklearn.datasets import load_iris,load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
import pydotplus
iris = load_iris( )
clf = DecisionTreeClassifier( )
clf_iris = clf.fit(iris.data,iris.target)
dot_Data = export_graphviz(clf_iris,out_file=None)
graph_iris = pydotplus.graph_from_dot_data(dot_Data)
graph_iris.write_pdf("./load_iris.pdf")
鸢尾花数据分类结果

量化案例:股票购买投资策略[2]

  1. 数据


    数据集

说明:标黄的为测试集,标红的为模型训练结果。


  1. 代码展示:
userpath('D:\4-Project\决策树模型\DecisionTree2Demo')%设置路径为存放CSV的位置

TrainInput=readtable('TrainInput.csv');%录入训练集的输入部分

TrainOutput=readtable('TrainOutput.csv');%录入训练集的输出部分

TestInput=readtable('TestInput.csv');%录入测试集的输入部分

TestOutput=readtable('TestOutput.csv');%录入测试集的输出部分

S=fitctree(TrainInput,TrainOutput,'MinParentSize',3);%建立模型,并存入S

view(S,'Mode','Graph')%绘制决策树

InvestStrategy=S.predict(TestInput);%使用刚才建立的模型预测股票涨跌,涨就是买,跌就是卖,因此构建了一个投资策略

ActualPriceChange=table2cell(TestOutput);%转化TestOutput的数据格式(table格式)并存入变量ActualPriceChange(cell格式)

confusionmat(ActualPriceChange,InvestStrategy)%计算拟合值和真实值的混淆矩阵
  1. 结果展示:


    决策结果
混淆矩阵 预测为正样本 预测为负样本
实际为正样本 3 0
实际为负样本 1 1

总结

  • 决策树定义
  • 决策树用途
  • 决策树构造
  • 决策树量化应用

决策树前沿发展

  • 经典决策树:CLS、ID3、C4.5和CART树(李强,2006)
  • 决策树组合:RF(随机森林)、ET(极端随机树)、GBDT(梯度提升决策树)、XGB和LGB(李想,2017)
  • 神经网络:神经支持决策树(Wan A, et al,2020)
    研究发现在保留决策树可解释性的同时取得了当前神经网络才能达到的准确率,比其他基于决策树的图像分类方法高出了大约14%。

总结

  • 决策树定义
  • 决策树用途
  • 决策树构造
  • 决策树量化应用
  • 决策树前沿发展

  1. https://www.jianshu.com/p/14a9e8d1f2a3

  2. 案例来源于CSDN

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容