什么是GBDT
GBDT全稱Gradient Boost Decision Tree,中文梯度提升決策樹。它是一種常用的非線性模型,基于集成學習中的boosting思想,每次迭代都在向減少殘差的梯度方向新建立一棵決策樹,并且都是基于上一棵樹進行建立的,迭代多少次就會產生多少個決策樹,在這里迭代次數過多的話,容易產生過擬合。GBDT的思想可以用一個簡單的例子來說明,假如買某個東西需要100元,首先使用80去擬合,發現損失有20元,接著我們使用10元去擬合剩下的損失,發現還損失10元,緊接著我們使用5元去擬合,發現損失還差5元,如果迭代次數還有,我們將繼續迭代下去。每一次迭代,擬合的誤差都將減少。梯度問題可以了解BP算法,就很直觀了。
GBDT的思想具有天然的優勢能夠發現多種區分性特征以及特征組合,決策樹的路徑可以用于LR的輸入特征。在Kaggle上也是經常使用這種方式的。在kaggle的一次CTR中就是用GBDT+LR/FM取得了不錯的成績。
以前我也是分開用,今天學習了發現分開使用的ROC并沒有聯合使用的高,于是打算將它分享出來。這里就不介紹LR了。可以理解成一個線性函數然后加了一個sigmoid函數(S型函數)進行映射到0到1的一個區間,可以理解為概率,用于二分類中。
我是使用的是Python的Jupyter作為開發工具,能夠實時地了解到每一步。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.preprocessing import OneHotEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve
from sklearn.pipeline import make_pipeline
因為需要的python包。然后我們定義迭代次數為10。并引用python里面自帶的數據,是一個二分類數據。并作拆分。
np.random.seed(100)
n_estimator=10
X,y=make_classification(n_samples=100000)
X_train, X_test, y_train, y_test=train_test_split(X,y,test_size=0.8)
X_train, X_train_lr, y_train, y_train_lr=train_test_split(X_train,y_train,test_size=0.5)
然后定義GBDT,然后建立模型,以及使用GBDT生成的決策樹進行LR的輸入。
gbdt=GradientBoostingClassifier(
max_depth=3,n_estimators=n_estimator,random_state=0)
gbdt_enc=OneHotEncoder()
gbdt_lr=LogisticRegression()
gbdt.fit(X_train,y_train)
gbdt_enc.fit(gbdt.apply(X_train)[:,:,0])
gbdt_lr.fit(gbdt_enc.transform(gbdt.apply(X_train_lr)[:,:,0]),y_train_lr)
y_pred_gbdt_lr=gbdt_lr.predict_proba(
gbdt_enc.transform(gbdt.apply(X_test)[:, :, 0]))[:, 1]
fpr_gbdt_lr, tpr_gbdt_lr, _=roc_curve(y_test, y_pred_gbdt_lm)
再單獨使用GBDT看其效果:
y_pred_gbdt=gbdt.predict_proba(X_test)[:, 1]
fpr_gbdt, tpr_gbdt, _=roc_curve(y_test, y_pred_grd)
接下來我們看看ROC情況圖片:
plt.figure(1)
#先畫一個橫縱坐標為0到1的區間圖, k--是指以 --- 的形式畫一條斜線一半分開
plt.plot([0,1],[0,1],"k--")
plt.plot(fpr_gbdt, tpr_gbdt, label='GBT')
plt.plot(fpr_gbdt_lr, tpr_gbdt_lr, label='GBT + LR')
plt.xlabel('False positive rate')
plt.ylabel('True positive rate')
plt.title('ROC curve')
plt.legend(loc='best')
plt.show()
效果還是很直觀的嘛。
我們放大那部分區域呢?會是什么樣子
plt.figure(2)
plt.xlim(0, 0.2)
plt.ylim(0.8, 1)
plt.plot([0,1],[0,1],"k--")
plt.plot(fpr_gbdt, tpr_gbdt, label='GBT')
plt.plot(fpr_gbdt_lr, tpr_gbdt_lr, label='GBT + LR')
plt.xlabel('False positive rate')
plt.ylabel('True positive rate')
plt.title('ROC curve bigger')
plt.legend(loc='best')
plt.show()
感興趣的話也可在tantic數據上測試下算法。
重裝系統之前都會了解一些關于BIOS與EFI的知識,很多小伙伴了解之后都會問快啟動小編,自己的電腦硬盤分區MBR和GPT選哪個好?其實這個問題得根據你的電腦配置以及需求來回答,所以今天快啟動小編為大家分享相關知識點,一起來看看吧。
關于選擇分區方案的建議:
其實,你的電腦用的是傳統bios啟動還是uefi啟動,這跟你的硬盤選擇MBR還是GPT的關系是非常大的。而對于一些普通用戶來說,快啟動小編還是建議大家根據電腦配置來選擇分區表格式,以下有兩種方案:
1、選擇BIOS + MBR模式
要是你的電腦主板是特別老式BIOS主板的話,亦或是你電腦雖然是新式UEFI主板,但是你很想使用傳統BIOS啟動方式,那還是給電腦硬盤使用MBR分區方案。
2、選擇UEFI + GPT模式
要是你的電腦是新式UEFI主板,而且你的電腦使用的是UEFI啟動方式,則需要給你的電腦硬盤使用GPT分區方案。
然而有些電腦高手看到這里會打算反駁我,因為網上也有很多BIOS+GPT或UEFI+MBR安裝系統的組合,但是快啟動小編還是要跟大家強調一點,如果你不是專業的電腦高手,還是安安心心選擇BIOS + MBR或UEFI + GPT這種硬盤組合模式吧,這樣做會讓你在使用電腦的時候有以下兩種好處:
(1)使用BIOS + MBR或UEFI + GPT對應模式,可以讓你的硬件與軟件的工作效率更加高些,運行速度也會變得更快。
(2)使用BIOS + MBR或UEFI + GPT對應模式,可以避免安裝和運行系統的時候出問題,而對于高手來說,他們很容易解決安裝和運行中出現的系統問題,但對于大部分電腦小白來說,這些問題足以讓大家吃不消,也特別浪費大家的時間。
分享到這里,可能也有一部分朋友想說:我的電腦主板是新式的UEFI主板,那我轉換成Legacy BIOS模式會好嗎?
這里快啟動小編想告訴大家的是:如果你的硬盤容量非常小,比較適合使用成Legacy BIOS模式,要是你的電腦容易夠大,則請選擇UEFI模式,好處自然是可以讓你的電腦運行速度變得更快些,而為啥硬盤空間小不適合使用UEFI模式,這是因為UEFI + GPT比BIOS+MBR會更占用你100來兆的硬盤空間。
而大家在BIOS + MBR或UEFI + GPT模式的選擇和使用上要注意兩點:
(1) MBR硬盤模式不能管理容量超過2TB的大硬盤,而GPT硬盤模式卻無此限制,所以你的硬盤要是大于2TB,就直接使用GPT吧。
(2)電腦買來的時候是使用傳統BIOS主板,還是建議大家繼續使用MBR硬盤模式,電腦買來的時候是使用UEFI主板的話,則建議繼續使用GPT。
到這里,關于MBR與GPT的知識點,我們單單了解這些是不夠的,我們還需要了解你電腦使用的Windows版本,能不能支持MBR與GPT哦。下面來看看你Windows對MBR與GPT的兼容性:
(1)Windows系統的版本非常多,而某些版本又有32位與64位兩個版本之分。
(2)而Windows系統兼容本身又有2種情況:一種是數據兼容,指的是系統能否識別出MBR或GPT分區方案的硬,然后讀寫這個硬盤分區上的數據;一種是系統兼容,系統本身可以裝在MBR或GPT分區方案的硬盤上。
數據兼容與系統兼容并不是大家想的一回事,多數情況下,某個版本的Windows能夠數據兼容MBR或GPT分區方案的硬盤,卻不能系統兼容該硬盤。
對MBR的兼容:
不管是新的系統版本還是老的系統版本,不管是64位系統還是32位系統,都能同時兼容MBR。所以要是你在MBR硬盤上安裝windows10系統,出現了故障,不用懷疑它不支持MBR,建議去檢查是否主板是BIOS方式。
對GPT的兼容:
而Windows各種版本對GPT分區方案的兼容性,請參考這個表格:
這個表格,可以歸納為如下三點:
(1)除去XP 32位系統,其他Windows版本都能做到數據兼容GPT分區的硬盤。
(2)所有的32位Windows版本,都不能兼容GPT分區的硬盤。
(3)從Windows Vista 64位開始的系統都能兼容GPT分區的硬盤,當然前提是你的電腦必須支持UEFI模式哦。