決策樹的小項目

本次作業是運用決策樹算法,來進行微博分類。

這是第一次寫機器學習項目,所以代碼真的很幼稚,但也是真的學到了很多

代碼在這裏:代碼

代碼整體結構:

整個代碼分成三個文件,

一個決策樹相關的函數類(clas.py)

一個用於訓練的文件(train.py)

一個用於測試的文件(test.py)

train.py :這是訓練算法的主文件,包括讀取文件、構造特徵值、數據降維、數據保存等功能

         其中:數據降維採用基於特徵選擇的降維,通過分析每個詞的文檔頻率,只保留那些出現的文檔頻率最高的那些詞。換一個角度,我移除只出現在最多x 個文檔中的所有詞。最後經過測試,我刪除了出現次數小於20的特徵值。這使得我的算法正確率有所提高,重點是提升了程序的運行速度。

clas.py :包含一個決策樹的類,含有創建決策樹,計算信息熵,選取最佳特徵值,預測等功能。其中,決策樹運用的特徵選取的規則:信息增益,此處借鑑了網上“笨鳥先飛”《機器學習實戰之決策樹》和 “超級傑哥”《 python 計算信息熵和信息增益》的算法思路

test.py :測試集,包含讀取數據,構造測試集,計算正確率等功能。

 運行結果:決策樹算法整體實現,但是正確率卻並不高。借用決策樹算法庫,正確率能達到60%,但是自己實現的代碼,正確率只有35-50%

分析:

1、  未進行數據清洗,訓練集中有一部分干擾數據,未除去標點符號和數字等無用數據

2、  特徵選擇不夠好,沒有處理詞與文章的管理,如‘年’,‘月’等詞,應通過某些算法降低其比重。

以及解決方法

一:決策樹過深,無法運行結束。

解決方法:增加一個參數,可以手動限制決策樹的最大深度,從而不會陷入無窮遞歸,或者樹過深,導致運行時間過長。

二:算法效率太低,無法訓練很多數據,進而導致算法正確率很低

解決方法:通過分析每個詞的文檔頻率,只保留那些出現的文檔頻率最高的那些詞。減少特徵值,來提升算法速度

三:函數過多,代碼整體結構太亂

解決方法:新建兩個文件,分別用來保存與決策樹有關的函數類和測試功能

四:需要的庫函數很多,庫之間的依賴也很麻煩

解決方法:通過一個叫做Anaconda 的包管理工具 ,來管理庫,使得管理 Python 更加方便

收穫及感想

1、 對PYTHON 的語法有了更深刻的瞭解,對PYTHON 的很多編程小技巧有了更多的瞭解。

2、 對機器學習有了初步的瞭解,瞭解了機器學習的大體步驟,瞭解了機器學習的整體架構。瞭解了訓練集與測試集之間的關係以及如何運用pickle

3、 對決策樹有了深刻的理解

參考資料

笨鳥先飛《機器學習實戰之決策樹》

超級傑哥 :《 python計算信息熵和信息增益》

hainingwyx:《Scikit-learn決策樹應用篇》

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