機器學習“傻瓜式”理解(17)集成學習

集成學習

所謂的集成學習,舉個栗子來說,假如我們需要解決一個分類問題,我們不僅僅通過例如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的過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章