基于sklearn的集成分類器

理論

集成模型

集成分類器模型是綜合考慮多種機(jī)器學(xué)習(xí)模型的訓(xùn)練結(jié)果述吸,做出分類決策的分類器模型

  • 投票式:平行訓(xùn)練多種機(jī)器學(xué)習(xí)模型猾瘸,每個(gè)模型的輸出進(jìn)行投票做出分類決策
  • 順序式:按順序搭建多個(gè)模型殿雪,模型之間存在依賴關(guān)系歌粥,最終整合模型

隨機(jī)森林分類器

隨機(jī)森林分類器是投票式的集成模型陨溅,核心思想是訓(xùn)練數(shù)個(gè)并行的決策樹针余,對所有決策樹的輸出做投票處理脚祟,為了防止所有決策樹生長成相同的樣子谬以,決策樹的特征選取由最大熵增變?yōu)殡S機(jī)選取

梯度上升決策樹

梯度上升決策樹不常用于分類問題(可查找到的資料幾乎全在講回歸樹),其基本思想是每次訓(xùn)練的數(shù)據(jù)是(上次訓(xùn)練數(shù)據(jù),殘差)組成(不清楚分類問題的殘差是如何計(jì)算的)由桌,最后按權(quán)值組合出每個(gè)決策樹的結(jié)果

代碼實(shí)現(xiàn)

導(dǎo)入數(shù)據(jù)集——泰坦尼克遇難者數(shù)據(jù)

import pandas as pd
titan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
print(titan.head())
   row.names pclass  survived  \
0          1    1st         1   
1          2    1st         0   
2          3    1st         0   
3          4    1st         0   
4          5    1st         1   

                                              name      age     embarked  \
0                     Allen, Miss Elisabeth Walton  29.0000  Southampton   
1                      Allison, Miss Helen Loraine   2.0000  Southampton   
2              Allison, Mr Hudson Joshua Creighton  30.0000  Southampton   
3  Allison, Mrs Hudson J.C. (Bessie Waldo Daniels)  25.0000  Southampton   
4                    Allison, Master Hudson Trevor   0.9167  Southampton   

                         home.dest room      ticket   boat     sex  
0                     St Louis, MO  B-5  24160 L221      2  female  
1  Montreal, PQ / Chesterville, ON  C26         NaN    NaN  female  
2  Montreal, PQ / Chesterville, ON  C26         NaN  (135)    male  
3  Montreal, PQ / Chesterville, ON  C26         NaN    NaN  female  
4  Montreal, PQ / Chesterville, ON  C22         NaN     11    male  

數(shù)據(jù)預(yù)處理

選取特征

x = titan[['pclass','age',"sex"]]
y = titan['survived']
print(x.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1313 entries, 0 to 1312
Data columns (total 3 columns):
pclass    1313 non-null object
age       633 non-null float64
sex       1313 non-null object
dtypes: float64(1), object(2)
memory usage: 30.9+ KB
None

缺失數(shù)據(jù)處理

x.fillna(x['age'].mean(),inplace=True)
print(x.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1313 entries, 0 to 1312
Data columns (total 3 columns):
pclass    1313 non-null object
age       1313 non-null float64
sex       1313 non-null object
dtypes: float64(1), object(2)
memory usage: 30.9+ KB
None


c:\users\qiank\appdata\local\programs\python\python35\lib\site-packages\pandas\core\frame.py:2754: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  downcast=downcast, **kwargs)

劃分?jǐn)?shù)據(jù)集

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25,random_state=1)
print(x_train.shape,x_test.shape)
(984, 3) (329, 3)

特征向量化

from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False)
x_train = vec.fit_transform(x_train.to_dict(orient='record'))
x_test = vec.transform(x_test.to_dict(orient='record'))
print(vec.feature_names_)
['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=female', 'sex=male']

模型訓(xùn)練

隨機(jī)森林

from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier()
rfc.fit(x_train,y_train)
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)

梯度提升決策樹

from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier()
gbc.fit(x_train,y_train)
GradientBoostingClassifier(criterion='friedman_mse', init=None,
              learning_rate=0.1, loss='deviance', max_depth=3,
              max_features=None, max_leaf_nodes=None,
              min_impurity_decrease=0.0, min_impurity_split=None,
              min_samples_leaf=1, min_samples_split=2,
              min_weight_fraction_leaf=0.0, n_estimators=100,
              presort='auto', random_state=None, subsample=1.0, verbose=0,
              warm_start=False)

模型評(píng)估

隨機(jī)森林

rfc.score(x_test,y_test)
0.83282674772036469
from sklearn.metrics import classification_report
rfc_pre = rfc.predict(x_test)
print(classification_report(rfc_pre,y_test))
             precision    recall  f1-score   support

          0       0.89      0.84      0.87       211
          1       0.74      0.82      0.78       118

avg / total       0.84      0.83      0.83       329  

梯度提升決策樹

gbc.score(x_test,y_test)
0.82370820668693012
from sklearn.metrics import classification_report
print(classification_report(gbc.predict(x_test),y_test))
             precision    recall  f1-score   support

          0       0.92      0.81      0.86       224
          1       0.68      0.85      0.75       105

avg / total       0.84      0.82      0.83       329

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末为黎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子行您,更是在濱河造成了極大的恐慌铭乾,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娃循,死亡現(xiàn)場離奇詭異炕檩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捌斧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門笛质,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捞蚂,你說我怎么就攤上這事妇押。” “怎么了姓迅?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵敲霍,是天一觀的道長。 經(jīng)常有香客問我丁存,道長肩杈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任解寝,我火速辦了婚禮扩然,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘编丘。我一直安慰自己与学,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布嘉抓。 她就那樣靜靜地躺著索守,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抑片。 梳的紋絲不亂的頭發(fā)上卵佛,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼截汪。 笑死疾牲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衙解。 我是一名探鬼主播阳柔,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蚓峦!你這毒婦竟也來了舌剂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對情侶失蹤暑椰,失蹤者是張志新(化名)和其女友劉穎霍转,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體一汽,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡避消,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了召夹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岩喷。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戳鹅,靈堂內(nèi)的尸體忽然破棺而出均驶,到底是詐尸還是另有隱情,我是刑警寧澤枫虏,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布妇穴,位于F島的核電站,受9級(jí)特大地震影響隶债,放射性物質(zhì)發(fā)生泄漏腾它。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一死讹、第九天 我趴在偏房一處隱蔽的房頂上張望瞒滴。 院中可真熱鬧,春花似錦赞警、人聲如沸妓忍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽世剖。三九已至,卻和暖如春笤虫,著一層夾襖步出監(jiān)牢的瞬間旁瘫,已是汗流浹背祖凫。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酬凳,地道東北人惠况。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像宁仔,于是被迫代替她去往敵國和親稠屠。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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