機器學習:集成學習(Soft Voting Classifier)


 

一、Hard Voting 與 Soft Voting 的對比

 1)使用方式

  • voting = 'hard':表示最終決策方式為 Hard Voting Classifier;
  • voting = 'soft':表示最終決策方式為 Soft Voting Classifier;

 

 2)思想

  • Hard Voting Classifier:根據少數服從多數來定最終結果;
  • Soft Voting Classifier:將所有模型預測樣本為某一類別的概率的平均值作為標准,概率最高的對應的類型為最終的預測結果;

 

  • Hard Voting

  • 模型 1:A - 99%、B - 1%,表示模型 1 認為該樣本是 A 類型的概率為 99%,為 B 類型的概率為 1%;

 

  • Soft Voting

  • 將所有模型預測樣本為某一類別的概率的平均值作為標准;

 

  • Hard Voting 投票方式的弊端
  1. 如上圖,最終的分類結果不是由概率值更大的模型 1 和模型 4 決定,而是由概率值相對較低的模型 2/3/5 來決定的;

 

 

二、各分類算法的概率計算

  • Soft Voting 的決策方式,要求集合的每一個模型都能估計概率;

 1)邏輯回歸算法

  • P = σ( y_predict )

 

 2)kNN 算法

  • k 個樣本點中,數量最多的樣本所對應的類別作為最終的預測結果;
  • kNN 算法也可以考慮權值,根據選中的 k 個點距離待預測點的距離不同,k 個點的權值也不同;
  • P = n / k
  • n:k 個樣本中,最終確定的類型的個數;如下圖,最終判斷為 紅色類型,概率:p = n/k = 2 / 3;

 

 

 3)決策樹算法

  • 通常在“葉子”節點處的信息熵或者基尼系數不為 0,數據集中包含多種類別的數據,以數量最多的樣本對應的類別作為最終的預測結果;(和 kNN 算法類似)
  • P = n / N 
  1. n:“葉子”中數量最多的樣本的類型對應的樣本數量;
  2. N:“葉子”中樣本總量;

 

 4)SVM 算法

  • 在 scikit-learn 中的 SVC() 中的一個參數:probability
  1. probability = True:SVC() 返回樣本為各個類別的概率;(默認為 False)
    from sklearn.svm import SVC
    svc = SVC(probability=True)

     

  2. 計算樣本為各個類別的概率需要花費較多時間;

 

 

三、scikit-learn 中使用集成分類器:VotingClassifier

 1)模擬數據集

  • 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)

     

 2)voting = 'hard':使用 Hard Voting 做決策

  • from sklearn.linear_model import LogisticRegression
    from sklearn.svm import SVC
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import VotingClassifier
    
    # 實例化
    voting_clf = VotingClassifier(estimators=[
        ('log_clf', LogisticRegression()),
        ('svm_clf', SVC()),
        ('dt_clf', DecisionTreeClassifier(random_state=666))
    ], voting='hard')
    
    voting_clf.fit(X_train, y_train)
    voting_clf.score(X_test, y_test)
    # 准確率:0.896

     

 3)voting = 'soft':使用 Soft Voting 做決策

  • voting_clf = VotingClassifier(estimators=[
        ('log_clf', LogisticRegression()),
        ('svm_clf', SVC(probability=True)),
        ('dt_clf', DecisionTreeClassifier(random_state=666))
    ], voting='soft')
    
    voting_clf.fit(X_train, y_train)
    voting_clf.score(X_test, y_test)
    # 准確率:0.912
  • 使用 Soft Voting 時,SVC() 算法的參數:probability=True

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM