https://blog.csdn.net/xunan003/article/details/100106478
1)使用方式
voting = 'hard':表示最終決策方式為 Hard Voting Classifier;
voting = 'soft':表示最終決策方式為 Soft Voting Classifier;
2)思想
Hard Voting Classifier:根據(jù)少數(shù)服從多數(shù)來定最終結(jié)果;
Soft Voting Classifier:將所有模型預(yù)測樣本為某一類別的概率的平均值作為標(biāo)準(zhǔn),概率最高的對應(yīng)的類型為最終的預(yù)測結(jié)果;
模型 1:A - 99%、B - 1%,表示模型 1 認(rèn)為該樣本是 A 類型的概率為 99%,為 B 類型的概率為 1%;
將所有模型預(yù)測樣本為某一類別的概率的平均值作為標(biāo)準(zhǔn);
Hard Voting 投票方式的弊端:
如上圖,最終的分類結(jié)果不是由概率值更大的模型 1 和模型 4 決定,而是由概率值相對較低的模型 2/3/5 來決定的;
Soft Voting 的決策方式,要求集合的每一個模型都能估計概率;
1)邏輯回歸算法
P = σ( y_predict )
2)kNN 算法
k 個樣本點中,數(shù)量最多的樣本所對應(yīng)的類別作為最終的預(yù)測結(jié)果;
kNN 算法也可以考慮權(quán)值,根據(jù)選中的 k 個點距離待預(yù)測點的距離不同,k 個點的權(quán)值也不同;
P = n / k
n:k 個樣本中,最終確定的類型的個數(shù);如下圖,最終判斷為 紅色類型,概率:p = n/k = 2 / 3;
3)決策樹算法
通常在“葉子”節(jié)點處的信息熵或者基尼系數(shù)不為 0,數(shù)據(jù)集中包含多種類別的數(shù)據(jù),以數(shù)量最多的樣本對應(yīng)的類別作為最終的預(yù)測結(jié)果;(和 kNN 算法類似)
P = n / N
n:“葉子”中數(shù)量最多的樣本的類型對應(yīng)的樣本數(shù)量;
N:“葉子”中樣本總量;
4)SVM 算法
在 scikit-learn 中的 SVC() 中的一個參數(shù):probability
probability = True:SVC() 返回樣本為各個類別的概率;(默認(rèn)為 False)
from sklearn.svm import SVCsvc = SVC(probability=True)
計算樣本為各個類別的概率需要花費較多時間;
1)模擬數(shù)據(jù)集
import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasetsfrom sklearn.model_selection import train_test_splitX, 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 LogisticRegressionfrom sklearn.svm import SVCfrom sklearn.tree import DecisionTreeClassifierfrom 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)# 準(zhǔn)確率: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)# 準(zhǔn)確率:0.912
聯(lián)系客服