Sklearn常用集成算法實踐

前言

用Sklearn常用的Ensemble算法對當當熱銷書評論進行分類實踐。

關于集成算法概念可以看這篇文章 總結Bootstraping钮热、Bagging和Boosting

先看一下這篇文章樸素貝葉斯分類算法實踐填抬,本文主要還是用當當評論數(shù)據做的分析。關于代碼部分一些細節(jié)在樸素貝葉斯分類算法實踐已經詳細的解釋了隧期。

正文

RandomForest

sklearn RandomForestClassifier文檔地址

代碼
import numpy as np
from numpy import array, argmax, reshape
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
import pickle
from sklearn.ensemble import RandomForestClassifier as RDF
np.set_printoptions(threshold=np.inf)


# 訓練集測試集 3/7分割
def train(xFile, yFile):
    with open(xFile, "rb") as file_r:
        X = pickle.load(file_r)

    X = reshape(X, (212841, -1))  # reshape一下 (212841, 30*128)
    # 讀取label數(shù)據飒责,并且encodig
    with open(yFile, "r") as yFile_r:
        labelLines = [_.strip("\n") for _ in yFile_r.readlines()]
    values = array(labelLines)
    labelEncoder = LabelEncoder()
    integerEncoded = labelEncoder.fit_transform(values)
    integerEncoded = integerEncoded.reshape(len(integerEncoded), 1)
    # print(integerEncoded)

    # 獲得label  編碼
    Y = integerEncoded.reshape(212841, )
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=42)

    # 隨機森林分類器
    clf = RDF(criterion="gini")
    # criterion 可以使用"gini"或者"entropy",前者代表基尼系數(shù)仆潮,后者代表信息增益宏蛉。一般說使用默認的基尼系數(shù)"gini"就可以了,即CART算法性置。除非你更喜歡類似ID3, C4.5的最優(yōu)特征選擇方法檐晕。

    clf.fit(X_train, Y_train)

    # 測試數(shù)據
    predict = clf.predict(X_test)
    count = 0
    for p, t in zip(predict, Y_test):
        if p == t:
            count += 1
    print("RandomForest Accuracy is:", count/len(Y_test))


if __name__ == "__main__":
    xFile = "Res/char_embedded.pkl"
    yFile = "data/label.txt"
    print("Start Training.....")
    train(xFile, yFile)
    print("End.....")
主要的參數(shù)說明
  • criterion 可以使用"gini"或者"entropy",前者代表基尼系數(shù)蚌讼,后者代表信息增益辟灰。一般說使用默認的基尼系數(shù)"gini"就可以了,即CART算法篡石。除非你更喜歡類似ID3, C4.5的最優(yōu)特征選擇方法芥喇。
  • 其他參數(shù)都用默認,以后再更新 =凰萨。=
結果
Start Training.....
RandomForest Accuracy is: 0.9258453009255634
End.....

最終結果大概92.6%左右的準確率

梯度提升算法GradientBoostingClassifier

sklearn GradientBoostingClassifier 文檔地址

Boosting不斷串行地迭代弱學習器最終形成一個強學習器继控,這點和Bagging并行的 方式不同,所以在用梯度提升算法時耗時非常長

代碼

import numpy as np
from numpy import array, argmax, reshape
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
import pickle
from sklearn.ensemble import GradientBoostingClassifier as GBC

np.set_printoptions(threshold=np.inf)


# 訓練集測試集 3/7分割
def train(xFile, yFile):
    with open(xFile, "rb") as file_r:
        X = pickle.load(file_r)

    X = reshape(X, (212841, -1))  # reshape一下 (212841, 30*128)
    # 讀取label數(shù)據胖眷,并且Encoding
    with open(yFile, "r") as yFile_r:
        labelLines = [_.strip("\n") for _ in yFile_r.readlines()]
    values = array(labelLines)
    labelEncoder = LabelEncoder()
    integerEncoded = labelEncoder.fit_transform(values)
    integerEncoded = integerEncoded.reshape(len(integerEncoded), 1)
    # print(integerEncoded)

    # 獲得label 編碼
    Y = integerEncoded.reshape(212841, )
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=42)

    # 梯度提升分類器
    clf = GBC(loss="deviance", subsample=0.8, criterion="friedman_mse")

    clf.fit(X_train, Y_train)

    # 測試數(shù)據
    predict = clf.predict(X_test)
    count = 0
    for p, t in zip(predict, Y_test):
        if p == t:
            count += 1
    print("GradientBoosting  Accuracy is:", count/len(Y_test))


if __name__ == "__main__":
    xFile = "Res/char_embedded.pkl"
    yFile = "data/label.txt"
    print("Start Training.....")
    train(xFile, yFile)
    print("End.....")
主要的參數(shù)說明
  • subsample 數(shù)據隨機抽樣對決策樹進行訓練武通,這個參數(shù)設置比1小即可,具體數(shù)值需要在“調參”過程中發(fā)現(xiàn)最優(yōu)
  • 其他參數(shù)日后再(tai)整(lan)理(le)
  • 源碼中的默認參數(shù)設置
    _SUPPORTED_LOSS = ('deviance', 'exponential')

    def __init__(self, loss='deviance', learning_rate=0.1, n_estimators=100,
                 subsample=1.0, criterion='friedman_mse', min_samples_split=2,
                 min_samples_leaf=1, min_weight_fraction_leaf=0.,
                 max_depth=3, min_impurity_split=1e-7, init=None,
                 random_state=None, max_features=None, verbose=0,
                 max_leaf_nodes=None, warm_start=False,
                 presort='auto'):

        super(GradientBoostingClassifier, self).__init__(
            loss=loss, learning_rate=learning_rate, n_estimators=n_estimators,
            criterion=criterion, min_samples_split=min_samples_split,
            min_samples_leaf=min_samples_leaf,
            min_weight_fraction_leaf=min_weight_fraction_leaf,
            max_depth=max_depth, init=init, subsample=subsample,
            max_features=max_features,
            random_state=random_state, verbose=verbose,
            max_leaf_nodes=max_leaf_nodes,
            min_impurity_split=min_impurity_split,
            warm_start=warm_start,
            presort=presort)
結果
Start Training.....
GradientBoosting  Accuracy is: 0.8833727467777551
End.....

最終準確率88.3%左右

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末珊搀,一起剝皮案震驚了整個濱河市冶忱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌境析,老刑警劉巖囚枪,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異劳淆,居然都是意外死亡链沼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門沛鸵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來括勺,“玉大人,你說我怎么就攤上這事〖埠矗” “怎么了奈辰?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拾氓。 經常有香客問我冯挎,道長底哥,這世上最難降的妖魔是什么咙鞍? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮趾徽,結果婚禮上续滋,老公的妹妹穿的比我還像新娘。我一直安慰自己孵奶,他們只是感情好疲酌,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著了袁,像睡著了一般朗恳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上载绿,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天粥诫,我揣著相機與錄音,去河邊找鬼崭庸。 笑死怀浆,一個胖子當著我的面吹牛,可吹牛的內容都是我干的怕享。 我是一名探鬼主播执赡,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼函筋!你這毒婦竟也來了沙合?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤跌帐,失蹤者是張志新(化名)和其女友劉穎灌诅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體含末,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡猜拾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了佣盒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挎袜。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出盯仪,到底是詐尸還是另有隱情紊搪,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布全景,位于F島的核電站耀石,受9級特大地震影響,放射性物質發(fā)生泄漏爸黄。R本人自食惡果不足惜滞伟,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炕贵。 院中可真熱鬧梆奈,春花似錦、人聲如沸称开。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳖轰。三九已至清酥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蕴侣,已是汗流浹背焰轻。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留睛蛛,地道東北人鹦马。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像忆肾,于是被迫代替她去往敵國和親荸频。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容