programming f#這本書已經發行了! 這意味著你可以,也應該去商店並買上一本.
既然已經有programming f# 這麼出色的f#語言程式設計指導書了,那麼對於語言特性而言,我更願意寫更多關於程式方面的東西. 這就是說,讓我們看看,能用這麼棒的f#語言做些什麼.
這是名為」f#真棒」系列部落格中的第一篇.這些部落格為我們展示了先進的,貼近實際的f# 應用程式能做的不可思議的事情.這篇部落格是關於決策樹和id3演算法的,這些問題最初在stackoverflow.com上討論的很激烈。
如果你想學習更多關於資料探勘技術和機器智慧型學習知識,tom mitchell編寫的machine learning 將是本很好的書籍。但是,提醒一下大家,這是我讀過的內容最嚴謹且知識密度很大的書。真的,不是開玩笑的!
定義這個問題
那麼,id3演算法是做什麼的呢?它是用來建立決策樹一項技術,就如同下圖中用來決定是不是去打網球一樣。從最上面的節點開始,如果天氣是陰天,那麼你就應該去打球。然而,如果是雨天,那麼只有當風很小的時候你才應該去打球。
除了幫助策劃你的體育活動,決策樹也是用來收集商業情報一種簡單地方法。假設,你經營著一家位於賓夕法尼亞州的斯克蘭頓的造紙公司。你有乙個收集了眾多客戶的ip位址的資料庫,包括誰訪問了你的**, 誰需求的產品中有一些特殊交易,那個誰是否已經取消了購買紙品。
這種情況下,你就需要資料探勘技術來抽取有用的資料了。 那麼,這種情形下,如何優化你的銷售額呢?
基於你擁有資料的型別與你查詢的內容,有很多不同的資料探勘技術演算法。這篇部落格將覆蓋決策樹——一種根據資料來**其概念的機器學習技術。(例如,根據乙個瀏覽器會話**此使用者是否會買些什麼。)
更形象點:給定乙個以」name/value」作為鍵值對的例項集合——判斷值鏈在**斷開——建立乙個決策樹來精確地識別任何乙個新加的例項。在上面的例子中,這些name/value鍵值對就是outlook:,類別就是」是否去打網球」。
方法
這裡最簡單的方法就是盡可能多的建立樹的分枝。根據練習的資料,先找到最合適的分枝,然後根據更多特定的特徵子集條件繼續篩減資料集。例如,如果試圖根據某人將從**上購買產品來判斷他是否是一位老顧客,那麼這將是一件很有價值的資訊。
為了找到」**分割」我們將使用被稱為」資訊增益」的方法。 但是首先,讓我們看看資訊理論中的乙個名為」熵」的概念。假設你想建立乙個決策樹來判斷某人是不是乙個**天才。每個論據包含了一些如性別、是否擁有博士學位等資訊。
熵和資訊增益是衡量你從給定的分枝中獲取資訊多少的度量單位。如果正好50%的**天才都是男性,那麼你沒能從性別分枝中獲取任何有用的資訊。(因為樹的左右兩邊的**天才數量是一樣的。)然而,為了判定**天才,教育情況將顯得非常重要——因為我們假設大部分**天才在很多方面擁有博士學位。那麼,這個決策樹將會尤為有效,在削減篩選這些資料到同類別的組:是否為**天才。
輸入數學公式
資訊增益和熵只是些簡單的概念,而數學就有點恐怖了。讓我們使用下面的資料來繼續完成這個**天才**器:
熵
給定乙個資料集s,此s可以被c整除得到商p,那麼這個集合的熵就可以由一下公式求得:
例如,如果乙個資料集合中的六個**天才中有四個是男性,那麼此集合的熵是多少呢?
或者0.9182。現在,如果乙個集合中五個擁有博士學位的人中有四個士**天才,那麼此時的熵是多少呢?
或者0.6883。這個較小的數字意味著加密擁有博士學位**天才的檔案需要更少的資訊。當乙個集合中的所有東西都有相同型別並都是1,且當此集合是以50/50作為分割的,如果執行這個熵的數學公式,其結果將會是0。看看下面的這個圖:
(圖象來自wolfram alpha)(請看此鏈結上的)
所以,同類別組成的集合的熵會低於混合類別的集合。這點是很重要的,因為在我們的決策樹中,我們想篩選資料到更具體的一些值——如此,我們才能做出更精確地**。
資訊增益
現在我們已經知道如何計算同類別的資料了,那麼我們如何才能決定哪個分枝才是最優的呢? 也就是我們是否根據性別,是否有博士學位,一些其它的屬性等來分枝?我們可以用資訊增益函式來計算這個,如下:
給定乙個值集合s,在此集合中每個已知數都有乙個標籤(屬性)a,判斷能從這些已知的標籤中獲取多少的資訊。注意sv是集合s的子集,且此子集中的每個元素有乙個屬性值v。
那麼,如果將根節點設定為「是否有博士學位」,那麼我們能獲得什麼樣的資訊呢,還是沒有任何資訊呢?
或者0.2002。如果我們計算性別分枝上的資訊增益,那麼它的結果將是——(-0.0513)。所以,數學上已經證明了我們的斷言:是否擁有博士學位比性別因素在判斷是否為**天才上更有價值。(如此表明,4/5的博士是**天才,然而2/25的非博士是**天才,看起來還是蠻合理的)
綜上所述
在第二部分,我們將用f#實現id3 演算法,且它將貫穿下面的每個流程:
找到能給給我們帶來最多資訊的屬性(標籤)
為此屬性(標籤)加上乙個分枝
對每個子節點重複使用上面步驟直到所有的資料擁有相同的分類
Axure RP 第一部分
axure rp是乙個專業的快速原型設計工具。axure 發音 ack sure 代表美國axure公司 rp則是rapid prototyping 快速原型 的縮寫。axure rp是美國axure software solution公司旗艦產品,是乙個專業的快速原型設計工具,讓負責定義需求和規格...
第一部分 初識Solr
第一章 solr簡介 這章主要包括內容 這本書講述nosql技術,apache solr 像它的非關係模式兄弟一樣,針對於某些問題進行了優化。特別的,solr在處理企業級大量資料 及時搜尋 文字資料 返回相關性結果等方面進行了很大優化。這裡說的只是冰山一角,讓我們從下面幾方面來進行詳細敘說 solr...
css排雷第一部分
import url basic.css warning urgent plant moons plant moons 1 a href span title feature lang en 選出屬性等於lang或者以lang開頭的所有元素。選擇h1 strong 可以解釋為選擇h1字元素中的所有s...