從前,夕小瑤種了一棵樹
從前
從前,小夕種了一棵樹,種在了小夕的小屋後面~
nn為什麼要種這棵樹呢?因為呀,它可以幫小夕總結歷史經驗,然後幫小夕對當前的局勢做出決策~這樣小夕就可以安心給大家寫文章啦~
nn這棵樹是這樣的。
nn一開始,小夕買了一顆小樹苗,把它栽到地上。
nn然後呢,小夕不給它澆水,也不給他澆肥料,而是讓他吃歷史經驗。比如呢,今天,小夕讓它幫小夕識別出圖片中的生物是喵還是驢。所以呢,這裡的歷史經驗就是一大堆喵和驢的圖片,並且小夕給它標註好了每張圖片是喵還是驢。
可是由於樹沒有眼睛呀,不能直接觀察圖片。所以呢,小夕幫它把圖片轉化成了特徵,也就是用幾個特徵來描述每張圖片。nn小夕選了如下幾個特徵來描述每張圖片:
nn1、頭是否是長條形
2、身上有沒有毛3、有沒有發現鬍鬚4、丑不醜5、萌不萌nn
所以,比如小夕就會對下面這張圖片:
nn轉化為[False True False False True]的特徵向量(即,不是長條頭、有毛、沒發現鬍鬚、不醜、萌)
然後小夕一口氣給上千張圖片提取完了特徵,當然,這些圖片都是標註好類別的。
nn小夕就把它們丟給小夕心愛的小樹苗啦~
快快長大
nn
誒?那小樹苗要怎麼生長呢?
nn小夕問小樹苗:「小樹小樹,你接下來要怎麼長呢?」
nn小樹苗喝了口水,說:「我每一步的生長都是非常慎重的,我從不會多長個枝丫或者少長個枝丫。每個樣本這不是有五個特徵嘛,我呢,就會從中挑選出最有價值的一個特徵,來作為我第一次生長的分支。」
nn小夕接著問:「那你要怎麼挑選特徵呢?」
nn小樹苗說:「你看啊,比如你挑出來的第二個特徵,「身上有沒有毛」,這就是很糟糕的特徵。為什麼呢?我們就來看「有沒有毛」這個特徵。我數了一下,在所有有毛的動物中,50%的動物是喵,50%的動物是驢。而在所有沒有毛的動物中,也是50%的動物是喵,50%的動物是驢。所以「有沒有毛」這個特徵的任何一個取值下,所有類別的樣本數一樣,是完全等概率的,這樣的特徵完全無法用來做分類啊。因為不管這個特徵的值是什麼,它所映射的各個類別都是等概率的。所以這個類別是最糟糕的。」
nn
小樹苗喝了口水,接著說:「但是你用的第三個特徵,「有沒有鬍鬚」,就非常棒。我統計了一下,有鬍鬚的動物中,喵佔了92%,驢佔了8%。而沒有鬍鬚的動物中,喵佔了20%,驢佔了80%。這樣,如果給我一張未知類別的樣本,只需要看「有沒有鬍鬚」這個特徵的話,基本就可以判斷出這個樣本的類別是什麼了!比如說這個樣本的這個特徵的值恰好是「沒有鬍鬚」,那麼我就有80%的把握說這是一頭驢!當然,如果恰好這個樣本的特徵的值是「有鬍鬚」,我就有92%的把握說這個樣本時一隻喵!這麼棒的特徵,當然是首選的啦!所以,我下面要長的枝丫就是叫做「有沒有鬍鬚枝丫」!」
nn小夕:
nn「我可能買了一棵假樹。
nn我。。。懂你的意思了。你說的選擇最優特徵的方法實際就是計算條件熵的過程。對於你說的「有沒有毛」這個很糟糕的特徵,由於這個特徵的每個取值下,各個類別都是完全等概率分布的,所以是最無序的,最隨機的特徵,我們稱為「條件熵最大的特徵」。熵最大就是1,所以計算出的「有沒有毛」這個特徵的條件熵肯定是1。
nn而你說的「有沒有鬍鬚」這個特徵,它的每個取值下,類別分布很隨機,也就是說很有序(想像一下,最有序的狀態就是每個取值下,所有樣本都是同一個類別,多麼有序啊。而類別等概率分布的時候,就是每個特徵下魚龍混雜的時候,啥類別都有,亂糟糟的),這種很有序的特徵,計算出的條件熵肯定很小。最有序的情況下,條件熵就是0啦。」
nn小樹:「好了。但是,我的分類目標是達到100%的準確率。所以,我要進一步挑選特徵了!
nn基於有鬍鬚的那個分支,我會將這個分支里的樣本重新計算各個特徵的條件熵(當然鬍鬚這個特徵除外),像之前一樣選擇條件熵最大的特徵作為下一個枝丫!
nn一直重複這個過程,直到哪一個枝丫下的全部樣本都是同一個類別了,這個枝丫就不再繼續分裂了。」
nn
最終,小樹長成了大樹。
nn這時,小夕忙著給大家寫文章呢,但是小夕的一個好閨蜜小婭拿著一張圖片過來了,她想讓小夕幫她看看這是驢還是喵。
但是小夕很忙呀,沒空理她,就讓她拿著圖片問後院的決策樹啦~
nn然後小婭去問決策樹這是啥,決策樹說:「它有鬍鬚嗎?」
nn小婭說:「有!」
nn樹:「它萌嗎?」
nn小婭:「一點也不萌!」
nn樹:「它是長臉嗎?」
nn
小婭:「是長臉!」
nn樹:「那這就是只驢!」
nn留下一臉懵逼的小婭在樹下凌亂( ̄? ̄)
nn這棵神奇的樹叫什麼呢?
nn這棵樹的專業說法叫「ID3決策樹」,為什麼是ID3呢?因為它是通過計算條件熵來選擇最優特徵的。其他經典決策樹如C4.5決策樹、CART決策樹等與ID3的區別僅在於最優特徵選擇的演算法。
nn總結
然後對本文總結一下,本文經過了如下步驟,這也是一個簡單的機器學習/數據挖掘任務的經典流程。
nn1、對已標註類別的數據集進行數據預處理與特徵提取
2、訓練決策樹(分類器/機器學習模型)3、對未知類別的數據集進行數據預處理與特徵提取4、利用決策樹對未知類別樣本的類別做出決策nn想要詳細了解ID3決策樹選擇最優特徵的過程(即計算條件熵)的同學,可以Google或者百度一下「條件熵」或者查閱《數據挖掘導論》等機器學習相關的書籍;想要詳細了解如何代碼實現ID3決策樹的同學,可以搜索各種CSDN博客或者查閱《機器學習實戰》等側重代碼實現的書籍。對於如何提高決策樹的泛化能力(防止過擬合)等優化技巧,或者其他類型的決策樹,可以看《數據挖掘導論》等經典書籍~
喜歡本文?那小夕推薦一下自己的微信訂閱號【夕小瑤的賣萌屋】,據說每個想學機器學習的人進來後都停不下來了( ̄? ̄)
推薦閱讀:
※如何評價圖森科技連發的三篇關於深度模型壓縮的文章?
※奮進號歷險記(中)
※分類演算法之鄰近演算法:KNN(理論篇)
※Kmeans文本聚類
※跟蹤置信度與Long-term