從相親實例簡單的講明機器學習——決策樹

一、前言

決策樹其實就是一種分類模型,那爲什麼起這個名字啊?因爲他分類的時候,也就是決策的時候畫出來的模型很像一顆倒着生長的數。一枝一枝的往下生長。

我們常見的分類都是線性分類,比如初中時候的數學題,畫幾個線性方程,看看所給的數例如點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。那這個可把我牛逼壞了,插會腰。。。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章