1. 程式人生 > >《機器學習實戰》學習筆記———使用決策樹預測隱形眼鏡型別

《機器學習實戰》學習筆記———使用決策樹預測隱形眼鏡型別

擬解決基本問題描述

本文擬解決預測隱形眼鏡型別的問題,決策樹是概念學習的一種模型和學習演算法,所謂概念學習可以看成是一個搜尋過程,搜尋的範圍是假設定義的空間,搜尋的目標是尋找能更好得擬合訓練樣例的假設。決策樹希望通過構造一種IF-THEN的規則的集合,來對離散值資料進行分類。決策樹模型是一種監督學習,訓練樣例是包含特徵和類別,每個特徵的取值是離散的,類別也是離散的。
例如隱形眼鏡分類問題,隱形眼鏡的資料集合中,有四個特徵分別為患者年齡、眼睛處方、是否散光、眼淚分泌率,三個類別分別為硬型、軟型和不適合佩戴。決策樹模型是判別模型,通過直接生成後驗概率分佈作為判別條件進行分類。

資料準備與資料預處理

資料準備

資料來源於隱形眼鏡資料集,它包含很多患者眼部狀況的觀察條件以及醫生推薦的眼睛型別。隱形眼鏡型別包括硬材質、軟材質以及不適合佩戴隱形眼鏡。

資料預處理

解析tab鍵分割的資料行。對資料進行預處理,將文字檔案中資料中的用來隔開資料的空格刪除,替換為換行符。

資料視覺化

由於字典的表示形式非常不易於理解。而且直接繪製圖形也比較困難,本文將使用Matplotlib庫建立樹形圖,它可以對文字著色並提供多種形狀以供選擇,還可以反轉箭頭。
使用文字註解繪製樹節點,此函式可以繪製樹節點。

這裡寫圖片描述

這裡寫圖片描述

繪製一棵完整的樹需要知道有多少個葉節點,以便可以正確確定 軸的長度;還需知道樹有多少層,以便可以正確確定 軸的高度。本文定義兩個函式來獲取葉節點的數目和樹的層數。

這裡寫圖片描述

函式createPlot()是使用的主函式,它呼叫了plotTree(),函式plotTree又依次呼叫決策數所需的函式,函式createPlot(),它建立繪圖區,計算樹形圖的全域性尺寸,並呼叫遞迴函式plotTree()。

這裡寫圖片描述

最後可繪製樹形圖,可將此決策樹視覺化。

這裡寫圖片描述

模型基本原理與演算法實現

劃分資料集的大原則是:將無序的資料變得更加有序,可以使用資訊理論度量資訊。在劃分資料集前後資訊發生的變化稱為資訊增益,知道如何計算資訊增益,就可以計算每個特徵值劃分資料集獲得的資訊增益,獲得資訊增益最高的特徵就是最好的選擇。
熵定義為資訊的期望值,符號 的資訊定義為

l(xi)=log2p(xi)

其中

p(xi)是選擇該分類的概率。

為了計算熵,我們需要計算所有類別所有可能值包含的資訊期望值,通過下面的公式得到

H=i=1np(xi)log2p(xi)

其中n是分類的數目。
計算給定資料集的夏農熵

這裡寫圖片描述

熵越高,則混合的資料也越多,得到熵之後,我們就可以按照獲取最大資訊增益的方法劃分資料集。度量劃分資料集的熵,以便判斷當前是否正確地劃分了資料集。對每個特徵劃分資料集的結果計算一次資訊熵,然後判斷按照哪個特徵劃分資料集是最好的劃分方式。

這裡寫圖片描述

然後需要遍歷整個資料集,迴圈計算夏農熵和splitDataSet()函式,找到最好的特徵劃分方式。熵計算將會告訴我們如何劃分資料集是最好的資料組織方式。

當這些從資料集構造決策樹演算法所需要的子功能模組構建好後,得到原始資料集,然後基於最好的屬性值劃分資料集,由於特徵值可能多於兩個,因此可能存在大於兩個分支的資料集劃分。第一次劃分之後,資料將被向下傳遞到樹分支的下一個節點,在這個點上,我們可以再次劃分資料。因此採用遞迴的原則處理資料集。

測試方法與結果

為了測試此決策樹對資料的預測,由於原始資料較少,並且沒有測試資料,所以本文采用隱形眼鏡資料集的其中一條作為測試資料,剩餘的資料作為訓練資料。

這裡寫圖片描述

在進行24次不同的訓練和測試後,結果有17次測試資料的預測型別與標籤相同。

總結

決策樹演算法的優點:
1:理解和解釋起來簡單,且決策樹模型可以想象
2:需要準備的資料量不大,而其他的技術往往需要很大的資料集,需要建立虛擬變數,去除不完整的資料,但是該演算法對於丟失的資料不能進行準確的預測
3:決策樹演算法的時間複雜度(即預測資料)是用於訓練決策樹的資料點的對數
4:能夠處理數字和資料的類別(需要做相應的轉變),而其他演算法分析的資料集往往是隻有一種型別的變數
5:能夠處理多輸出的問題
決策樹演算法的缺點:
1:決策樹演算法學習者可以建立複雜的樹,但是沒有推廣依據,這就是所謂的過擬合,為了避免這種問題,出現了剪枝的概念,即設定一個葉子結點所需要的最小數目或者設定樹的最大深度
2:決策樹的結果可能是不穩定的,因為在資料中一個很小的變化可能導致生成一個完全不同的樹,這個問題可以通過使用整合決策樹來解決
3:這裡有一些概念是很難的理解的,因為決策樹本身並不難很輕易的表達它們,比如說異或校驗或複用的問題。
本文針對預測隱形眼鏡型別進行了計算,運用決策樹的方法進行了預測,對決策樹進行了深入的學習,進行了24次不同的訓練和測試後,結果有17次測試資料的預測型別與標籤相同。此結果的原因可能有訓練資料較少的原因。通過對本章的學習,對此演算法瞭解更加深入了,但也發現了自身的不足,在python語言的實現上仍有很大的不足,大部分依靠書中及網上的資源,還需繼續努力學習。

參考文獻

[1]《機器學習實戰》