整合學習是使用一系列學習器進行學習,並使用某種規則把各個學習結果進行整合從而獲得比單個學習器更好的學習效果的一種機器學習方法。
#準備資料
x,y = datasets.make_moons(noise=0.3,n_samples=500,random_state=42)
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=666)
#邏輯回歸**
from sklearn.linear_model import logisticregression
log_reg = logisticregression()
log_reg.fit(x_train,y_train)
log_reg.score(x_test,y_test)
#svm**
from sklearn.svm import svc
svc = svc()
svc.fit(x_train,y_train)
svc.score(x_test,y_test)
#決策樹**
from sklearn.tree import decisiontreeclassifier
dec_clf = decisiontreeclassifier()
dec_clf.fit(x_train,y_train)
dec_clf.score(x_test,y_test)
y1_predict = log_reg.predict(x_test)
y2_predict = svc.predict(x_test)
y3_predict = dec_clf.predict(x_test)
#使用整合學習的方法決定最終**結果
使用sklearn中的votingclassifier
from sklearn.ensemble import votingclassifier
voting_clf = votingclassifier(estimators=[
('log_clf',logisticregression()),
('svm',svc()),
('dec_clf',decisiontreeclassifier())
],voting='hard') #hard為少數服從多數的整合學習方式
soft voting這種方式必須要模型具有**概率的能力,例如邏輯回歸演算法本身就是基於概率做分類的,而knn演算法一類的非引數學習方法,也可以根據樣本資料**概率,svm演算法可以將probablity屬性設定為true以支援概率**。
voting_clf2 = votingclassifier(estimators=[
('log_clf',logisticregression()),
('svm',svc(probability=true)),
('dec_clf',decisiontreeclassifier(random_state=666))
],voting='soft')
voting_clf2.fit(x_train,y_train)
voting_clf2.score(x_test,y_test)
讓每個子模型只看資料的一部分,用放回取樣的方式來訓練大量的子模型,作為整合學習的方法。
from sklearn.ensemble import baggingclassifier
#建立bagging整合學習的引數
#使用decisiontreeclassifier()作為子模型,決策樹作為子模型更容易建立子模型間的差異性,對於bagging這種方式的整合學習來說,決策樹是相對較好的子模型選擇
#max_samples決定每個子模型最多參考樣本資料量
#n_estimators決定生成多少個子模型
#bootstrap決定採用放回抽樣還是不放回抽樣,true為放回抽樣
bagging_clf = baggingclassifier(decisiontreeclassifier(),max_samples=100,n_estimators=500,bootstrap=true)
上例為對樣本進行隨機取樣,但對於bagging,其實有更多的方法可以進行取樣來建立子模型
#max_features設定隨機取的最大樣本特徵數量
#bootstrap_features設定對特徵進行放回或不放回取樣
#oob_score設定對所有樣本進行取樣,不分離訓練和測試資料集,而在隨機取樣中所有沒有被取樣的資料作為測試集使用
random_subspaces_clf = baggingclassifier(decisiontreeclassifier(),max_samples=500,n_estimators=500,bootstrap=true,
max_features=1,bootstrap_features=true,n_jobs=-1,oob_score=true)
random_subspaces_clf.fit(x,y)
random_subspaces_clf.oob_score_
random patches
random_patches_clf = baggingclassifier(decisiontreeclassifier(),max_samples=100,n_estimators=500,bootstrap=true,
max_features=1,bootstrap_features=true,n_jobs=-1)
random_patches_clf.fit(x,y)
random_patches_clf.oob_score
隨機森林
ada boosting思路,對每次學習後,無法較好擬合的資料點,在下次擬合過程中,增加這些資料點的權重,依次迴圈生成子模型
gradient boosting思路,對於上次擬合錯誤的資料點,給與下乙個模型專門訓練,依次迴圈
#gradientboostingclassifier本身基於決策樹進行,因此不需要設定best_estamitor
from sklearn.ensemble import gradientboostingclassifier
ada_clf = gradientboostingclassifier(n_estimators=500)
ada_clf.fit(x_train,y_train)
Python3機器學習實踐 整合學習之GBDT
1 gbdt說明 gbdt是gradient boosting decison tree的簡稱,其中gradient是梯度,是這個方法的核心 boosting是提公升樹,是這個方法的框架 decision tree是決策樹,是實現這個方法用到的模型。gbdt可以解決回歸問題,經過一些處理也可以解決分...
Python3入門機器學習 numpy篇
numpy是python的乙個支援矩陣 向量運算的庫,由於python自帶的list不僅效率低,也不會將陣列看作矩陣或者向量,因此在機器學習中,使用numpy來作為運算元組及矩陣的工具 x numpy.arange 10,3,5 x.ndim x的維度 x.shape x的各維度長度 x.size ...
Python3 入門學習
最近專案中使用到了 演算法,為了找到合適的引數,以及清楚地了解 d的運 況.因此想要將pid的資料 用上位機畫出來 以前都是使用串列埠來做的,但是現在的專案中,只有使用網口比較方便,這樣合適的上位機就 只好由自己來寫了 需求比較簡單只要將下位機傳送上來的特定資料,實時在電腦上繪製成曲線就可以了,不同...