【machine learning】- 決策樹(DTs)之Python實現(xiàn) by Scikit-Learn

這學期AI課的最后一次assignment,老師要讓大家實踐一下decision tree,而且“You can use any existing machine learning tool for this task”岩臣,所以就有了我下面這篇文章亲善,不足之處,望指正芥吟,共勉!


目錄###

1. 環(huán)境搭建
2. 什么是Decision Tree专甩?
3. 具體Python實現(xiàn)钟鸵,附代碼


1. 環(huán)境搭建

1.1 用Python實現(xiàn)機器學習的基礎(chǔ)環(huán)境搭建, click here.

1.2 安裝 pyparsing (1.5.7) 和 pydot

注:以下針對于 Mac OS 并且使用 Python2.7

  • 如果已經(jīng)安裝了pyparsing (2.x.x),操作如下:
    $ pip uninstalled pyparsing
    $ pip install -Iv https://pypi.python.org/packages/source/p/pyparsing/pyparsing-1.5.7.tar.gz#md5=9be0fcdcc595199c646ab317c1d9a709
    $ pip install pydot
  • 如果沒有安裝過pyparsing任何版本配深,操作如下:
    $ pip install -Iv https://pypi.python.org/packages/source/p/pyparsing/pyparsing-1.5.7.tar.gz#md5=9be0fcdcc595199c646ab317c1d9a709
    $ pip install pydot

1.3 安裝 GraphViz

graphviz

Graphviz (Graph Visualization Software) 是一個由AT&T實驗室啟動的開源工具包携添,用于繪制DOT語言腳本描述的圖形。

  • GraphViz不能通過pip安裝篓叶。 所以烈掠,下載對于Mac的正確版本(graphviz-2.36.0.pkg)之后,自行安裝缸托。
  • 你可能還需要安裝xlrd
    $ pip install xlrd

2. 什么是Decision Tree左敌?

決策樹(Decision Tree)是基于符號的監(jiān)督學習方法中的一種。更多相關(guān)知識俐镐,可以看我另外一篇文章矫限。


3. 具體Python實現(xiàn)

  • 導入library
import numpy as np
import pandas as pd
from sklearn import tree
from sklearn.feature_extraction import DictVectorizer
  • 讀取數(shù)據(jù)
  • 使用pandas讀取Excel文件,當然pandas還支持多種文件格式的讀寫佩抹,比如:text, sql, json, csv ......
  • 使用pd.read_excel() 讀取后默認生成 pandas.DataFrame
# read data from excel file as DataFrame
raw_train_data = pd.read_excel("/Users/boyuan/Desktop/TrainingData.xlsx", parse_cols=[1,2,3,4,5,6,7,8,9,10,11])
raw_test_data = pd.read_excel("/Users/boyuan/Desktop/TestingData.xlsx", parse_cols=[1,2,3,4,5,6,7,8,9,10,11])
  • 清洗數(shù)據(jù)
 # If the data has missing values, they will become NaNs in the resulting Numpy arrays.
 # The vectorizer will create additional column <feature>=NA for each feature with NAs

 raw_train_data = raw_train_data.fillna("NA")
 raw_test_data = raw_test_data.fillna("NA")

 exc_cols = [u'adjGross']
 cols = [c for c in raw_train_data.columns if c not in exc_cols]

 X_train = raw_train_data.ix[:,cols]
 y_train = raw_train_data['adjGross'].values

 X_test = raw_test_data.ix[:,cols]
 y_test = raw_test_data['adjGross'].values
  • 使用pandas to_dict() 將DataFrame轉(zhuǎn)化成Dict
# Convert DataFrame to dict See more: http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.to_dict.html#pandas.DataFrame.to_dict
dict_X_train = X_train.to_dict(orient='records')
dict_X_test = X_test.to_dict(orient='records')
vec = DictVectorizer()
X_train = vec.fit_transform(dict_X_train).toarray()
X_test = vec.fit_transform(dict_X_test).toarray()
  • 最后叼风,把train data喂給fit()函數(shù),用score()函數(shù)檢驗?zāi)P驮趖est data上的表現(xiàn)棍苹!
 clf = tree.DecisionTreeClassifier()
 clf = clf.fit(X_train,y_train)

 score = clf.score(X_test,y_test)
  • 當然也可以把tree導出到dot文件中无宿,使用GraphViz畫圖
from sklearn.externals.six import StringIO
with open("文件名稱.dot", 'w') as f:
    f = tree.export_graphviz(clf, out_file=f, feature_names= vec.get_feature_names())

在CLI上輸入如下命令:
$ dot -Tps tree.dot -o tree.ps (PostScript 格式)
$ dot -Tpng tree.dot -o tree.png (PNG 格式)


結(jié)語

  • 這是第一次使用Python進行data mining孽鸡,學習使用Python斷斷續(xù)續(xù)也有大半年蹂午,從寫簡單的算法課作業(yè),后來寫爬蟲彬碱,接觸Flask寫網(wǎng)站豆胸, 不斷體會到“人生苦短,我用Python”巷疼。這當然基于Python非常完善的代碼庫晚胡。
  • 沒有一種語言是萬能的,Python當然也不是皮迟,但不得不說在某些領(lǐng)域Python確實作為一種高級語言搬泥,可以讓你更專注你核心要做的事情, 而非語言本身伏尼。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忿檩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子爆阶,更是在濱河造成了極大的恐慌燥透,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辨图,死亡現(xiàn)場離奇詭異班套,居然都是意外死亡,警方通過查閱死者的電腦和手機故河,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門吱韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鱼的,你說我怎么就攤上這事理盆。” “怎么了凑阶?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵猿规,是天一觀的道長。 經(jīng)常有香客問我宙橱,道長姨俩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任师郑,我火速辦了婚禮环葵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宝冕。我一直安慰自己张遭,他們只是感情好,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布猬仁。 她就那樣靜靜地躺著帝璧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪湿刽。 梳的紋絲不亂的頭發(fā)上的烁,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音诈闺,去河邊找鬼渴庆。 笑死,一個胖子當著我的面吹牛雅镊,可吹牛的內(nèi)容都是我干的襟雷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼仁烹,長吁一口氣:“原來是場噩夢啊……” “哼耸弄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卓缰,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤计呈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后征唬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捌显,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年总寒,在試婚紗的時候發(fā)現(xiàn)自己被綠了扶歪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡摄闸,死狀恐怖善镰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贪薪,我是刑警寧澤媳禁,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站画切,受9級特大地震影響竣稽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霍弹,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一毫别、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧典格,春花似錦岛宦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挽霉。三九已至,卻和暖如春变汪,著一層夾襖步出監(jiān)牢的瞬間侠坎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工裙盾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留实胸,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓番官,卻偏偏與公主長得像庐完,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子徘熔,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容