决策树其实就是一种分类模型,那为什么起这个名字啊?因为他分类的时候,也就是决策的时候画出来的模型很像一颗倒着生长的数。一枝一枝的往下生长。
我们常见的分类都是线性分类,比如初中时候的数学题,画几个线性方程,看看所给的数例如点A(50,50) 在那个范围类,诸如此类。
但是千变万化的世界内,事物并不是具有规则,也不是用方程式能解决了得,所以决策树应势而生。
决策树主要有两种算法去分类,ID3算法和C4.5算法。前者以信息增益为判断标准,后者以信息增益率为判断标准。(不要慌,虽然是专用名词,不碍理解该算法)。
说到这还得提一个名词“熵”,他指的是系统的凌乱程度。
现在以相亲的例子开讲决策树的来龙去脉:
图示表达了相亲时的基本过程,可以大致认为是一棵决策树,将其量化之后,便可以进行分类。
橙色节点:叶子结点表示决策结果。
绿色节点:表示判断条件。
属性值:表示判断条件选择的阈值,去选择那一个趋向。
(此次模型纯属瞎搞,如有得罪还请见谅#微笑脸#)
下面我们将模型量化,让机器去判断一下相亲时 是见还是不见。
首先利用rand函数随机生成的前五列的属性值,然后一开始想自己判断出结果,但是陈SIR说EXCEL可以直接写函数出结果的啊,所以又先学得到EXCEL的IF函数,感觉到了学无止境,哈哈,待会儿再出一篇EXCEL的IF函数的博文。
现在书归正传,现在先把这部分结果的部分数据展示出来。
注:财富数值1为有钱;人品数值1为好;工作数值1为生意人; 外貌数值1为帅;结果数值1为见。 %% 清空环境变量 clear all clc %% 导入数据 load dating.mat %% 随机产生训练集/测试集 a = randperm(49); Train = dating(a(1:40),:); Test = dating(a(41:end),:); %% 训练数据 Ptrain = Train(:,1:end-1); Ttrain = Train(:,end); %% 测试数据 P_test = Test(:,1:end-1); T_test = Test(:,end); %% 创建决策树分类器 ctree = ClassificationTree.fit(Ptrain,Ttrain); %% 查看决策树视图 view(ctree,'mode','graph'); %% IV. 仿真测试 T_pre = predict(ctree,P_test); %% 结果分析 numberD = length(find(T_test == 1)); numberND = length(find(T_test == 0)); numberD_pre = length(find(T_pre == 1 & T_test == 1)); numberND_pre = length(find(T_pre == 0 & T_test == 0)); disp(['见(去约会):' num2str(numberD_pre)... '误判个数:' num2str(numberD - numberD_pre)]); disp(['不见(不去约会):' num2str(numberND_pre)... '误判个数:' num2str(numberND - numberND_pre)]);结果如下:
是不是和上图我分析的很一致啊,证明此次建模成功!
再来看看预测结果:
误判个数为:0。那这个可把我牛逼坏了,插会腰。。。