集成學習
所謂的集成學習,舉個栗子來說,假如我們需要解決一個分類問題,我們不僅僅通過例如KNN這樣的算法來進行解決,我們可以讓多種算法參與分類預測的過程,例如下圖:
再舉個栗子來說,假如我們5個人準備去吃飯,在面臨選擇店鋪時,假如有4個人都覺得A店的食物物美價廉,我們就會選擇A店作爲我們最終的吃飯的店鋪,這就是生活中的集成思維的栗子。
scikit-learn中的集成分類代碼:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
X,y = datasets.make_moons(n_samples=500,noise=0.3,random_state=42)
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=42)
# sklearn中的集成分類器
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
voting_cif = VotingClassifier(estimators=[
('log_cif',LogisticRegression()),
('svc',SVC()),
('dt_clf',DecisionTreeClassifier())
],voting='hard')
voting_cif.fit(X_train,y_train)
voting_cif.score(X_test,y_test) # 結果爲0.897
分類
根據上面的代碼我們可知道,最終的集成學習方式我們大體上可以歸納爲這麼幾種,
①hard voting classifier 根據少數服從多數的形式定預測結果
②soft voting classifier 根據得出結果的概率的平均值來定預測結果
soft的使用:
voting_cif = VotingClassifier(estimators=[
('log_cif',LogisticRegression()),
('svc',SVC()),
('dt_clf',DecisionTreeClassifier())
],voting='hard')
voting_cif.fit(X_train,y_train)
voting_cif.score(X_test,y_test) # 結果爲0.912
其中:SVC中參數probability=true表示返回樣本爲各個類別的概率
抽樣方式
爲了提高準確率,我們需要更多的子模型參與進來,可分爲兩種方式,一種爲Bagging(放回取樣),另一種方式爲Pasting(不放回取樣)。
但是在Bagging中會出現有37%的數據永遠取不到,我們可以直接使用這部分數據作爲最終的驗證數據集,這樣便省去了train_test_split的過程。