Python+GBDT算法實戰(zhàn)——預測實現(xiàn)100%準確率

原文地址:https://finthon.com/python-gbdt-prediction/
-- 全文閱讀3分鐘 --

在本文中,你將學習到以下內(nèi)容:


  • GBDT算法實現(xiàn)
  • 模型保存
  • 模型加載及預測

前言

GBDT屬于Boosting算法者填,它是利用損失函數(shù)的負梯度方向在當前模型的值作為殘差的近似值谣殊,進而擬合一棵CART回歸樹。GBDT的會累加所有樹的結(jié)果柜某,而這種累加是無法通過分類完成的,因此GBDT的樹都是CART回歸樹,而不是分類樹(盡管GBDT調(diào)整后也可以用于分類但不代表GBDT的樹為分類樹)绘搞。本文就是利用GBDT算法實現(xiàn)一個例子。

數(shù)據(jù)說明

新能源汽車充電樁的故障檢測問題傅物,提供85500條訓練數(shù)據(jù)(標簽:0代表充電樁正常夯辖,1代表充電樁有故障),參賽者需對36644條測試數(shù)據(jù)進行預測董饰。

訓練數(shù)據(jù)

數(shù)據(jù)文件:data_train.csv
字段說明:


測試數(shù)據(jù)

數(shù)據(jù)文件:data_test.csv
字段說明:


GBDT算法

導入所需庫:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.externals import joblib

通過pandas讀取csv文件蒿褂,GDBT算法直接從sklearn.ensemble調(diào)用,導入joblib函數(shù)保存模型卒暂。
接著讀取文件,去除id和label標簽項啄栓,并把數(shù)據(jù)分成訓練集和驗證集:

data = pd.read_csv(r"./data_train.csv")
x_columns = []
for x in data.columns:
    if x not in ['id', 'label']:
        x_columns.append(x)
X = data[x_columns]
y = data['label']
x_train, x_test, y_train, y_test = train_test_split(X, y)

這里采用默認劃分比例,即75%數(shù)據(jù)作為訓練集也祠,25%作為預測集昙楚。
接下來調(diào)用GBDT算法:

# 模型訓練,使用GBDT算法
gbr = GradientBoostingClassifier(n_estimators=3000, max_depth=2, min_samples_split=2, learning_rate=0.1)
gbr.fit(x_train, y_train.ravel())
joblib.dump(gbr, 'train_model_result4.m')   # 保存模型

GBDT算法參數(shù)設(shè)置如上诈嘿,也可以通過網(wǎng)格搜索尋找最優(yōu)參數(shù)設(shè)置堪旧,這里不贅述。模型train_model_result4.m保存在當前目錄下奖亚。
最后我們打印訓練和驗證的準確率:

y_gbr = gbr.predict(x_train)
y_gbr1 = gbr.predict(x_test)
acc_train = gbr.score(x_train, y_train)
acc_test = gbr.score(x_test, y_test)
print(acc_train)
print(acc_test)

我們的模型對于訓練和預測都達到了100%的準確率:


訓練和驗證準確率

完整代碼如下:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.externals import joblib


data = pd.read_csv(r"./data_train.csv")
x_columns = []
for x in data.columns:
    if x not in ['id', 'label']:
        x_columns.append(x)
X = data[x_columns]
y = data['label']
x_train, x_test, y_train, y_test = train_test_split(X, y)

# 模型訓練崎场,使用GBDT算法
gbr = GradientBoostingClassifier(n_estimators=3000, max_depth=2, min_samples_split=2, learning_rate=0.1)
gbr.fit(x_train, y_train.ravel())
joblib.dump(gbr, 'train_model_result4.m')   # 保存模型

y_gbr = gbr.predict(x_train)
y_gbr1 = gbr.predict(x_test)
acc_train = gbr.score(x_train, y_train)
acc_test = gbr.score(x_test, y_test)
print(acc_train)
print(acc_test)

模型預測

在訓練和驗證集上,我們的模型都達到了100%的準確率遂蛀,接下來用模型預測測試集的結(jié)果谭跨。
代碼如下:

import numpy as np
import pandas as pd
from sklearn.externals import joblib


# 加載模型并預測
gbr = joblib.load('train_model_result4.m')    # 加載模型
test_data = pd.read_csv(r"./data_test.csv")
testx_columns = []
for xx in test_data.columns:
    if xx not in ['id', 'label']:
        testx_columns.append(xx)
test_x = test_data[testx_columns]
test_y = gbr.predict(test_x)
test_y = np.reshape(test_y, (36644, 1))

# 保存預測結(jié)果
df = pd.DataFrame()
df['id'] = test_data['id']
df['label'] = test_y
df.to_csv("./data_predict.csv", header=None, index=None)

最終我們將結(jié)果保存在data_predict.csv提交比賽作業(yè)。該結(jié)果準確率100%。
我們通過一個具體的項目實現(xiàn)GBDT算法的訓練及預測過程螃宙,本文所需資料我都放在這里蛮瞄, 密碼:47v5,希望對你們有幫助谆扎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挂捅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子堂湖,更是在濱河造成了極大的恐慌闲先,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件无蜂,死亡現(xiàn)場離奇詭異伺糠,居然都是意外死亡,警方通過查閱死者的電腦和手機斥季,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門训桶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酣倾,你說我怎么就攤上這事舵揭。” “怎么了躁锡?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵午绳,是天一觀的道長。 經(jīng)常有香客問我映之,道長拦焚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任惕医,我火速辦了婚禮耕漱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抬伺。我一直安慰自己螟够,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布峡钓。 她就那樣靜靜地躺著妓笙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪能岩。 梳的紋絲不亂的頭發(fā)上寞宫,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音拉鹃,去河邊找鬼辈赋。 笑死鲫忍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的钥屈。 我是一名探鬼主播悟民,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼埠对,長吁一口氣:“原來是場噩夢啊……” “哼弱恒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起田晚,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤竭业,失蹤者是張志新(化名)和其女友劉穎智润,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體未辆,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡窟绷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鼎姐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钾麸。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡更振,死狀恐怖炕桨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肯腕,我是刑警寧澤献宫,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站实撒,受9級特大地震影響姊途,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜知态,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一捷兰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧负敏,春花似錦贡茅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妖泄,卻和暖如春驹沿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹈胡。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工渊季, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朋蔫,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓却汉,卻偏偏與公主長得像斑举,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子病涨,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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