从相亲实例简单的讲明机器学习——决策树

一、前言

决策树其实就是一种分类模型,那为什么起这个名字啊?因为他分类的时候,也就是决策的时候画出来的模型很像一颗倒着生长的数。一枝一枝的往下生长。

我们常见的分类都是线性分类,比如初中时候的数学题,画几个线性方程,看看所给的数例如点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。那这个可把我牛逼坏了,插会腰。。。



展开阅读全文

没有更多推荐了,返回首页