2017-06-14 42 views
1

我正在測試一個簡單模型(knn)並嘗試將結果與一個Ensamble進行比較。BaggingClassifier在不同的執行過程中給出相同的結果

from sklearn.model_selection import cross_val_score 
from sklearn.neighbors import KNeighborsClassifier 
from sklearn.ensemble import BaggingClassifier 
from sklearn.datasets import load_iris 
data = load_iris() 
y = data.target 
X = data.data 
knn = KNeighborsClassifier() 
bagging = BaggingClassifier(knn, max_samples=0.5, max_features=0.5) 

print "KNN Score:\t", cross_val_score(knn, X, y, cv=5, n_jobs=-1).mean() 
print "Bagging Score:\t", cross_val_score(bagging, X, y, cv=5, n_jobs=-1).mean() 

但是每次我運行它的代碼我得到相同的錯誤估計...每次都不應該有所不同?

+0

沒有數據就不好說了。 –

+0

我已經添加了一些數據作爲示例... – gefero

回答

1

在您的代碼中有兩個計算得分。第一個,

print "KNN Score:\t", cross_val_score(knn, X, y, cv=5, n_jobs=-1).mean() 

將始終返回相同的值。原因是在這個過程中沒有任何隨機的。數據完全相同,並且5倍的分解完全相同(如here所示,數據分成5個連續的摺疊)。

然而,計算以下分數時:

print "Bagging Score:\t", cross_val_score(bagging, X, y, cv=5, n_jobs=-1).mean() 

有在該過程中的隨機性。例如,從max_samples=0.5開始,您隨機抽取一半樣本來訓練每個基本估計量。因此,每次運行代碼時都可能得到不同的結果。

+0

是的......但問題是我沒有得到不同的結果......在這個lineprint「Bagging Score:\ t」,cross_val_score(bagging,X,y, cv = 5,n_jobs = -1).mean() – gefero

+0

這很奇怪......也許你係統中的某個地方的隨機種子是固定的?嘗試執行以下操作:將參數random_state添加到BaggingClassifier。即用bagging = BaggingClassifier(knn,max_samples = 0.5,max_features = 0.5,random_state = 2)運行你的代碼。然後運行代碼,但切換隨機狀態。例如,使用bagging = BaggingClassifier(knn,max_samples = 0.5,max_features = 0.5,random_state = 1)運行代碼。你仍然得到相同的結果? –

+0

我認爲你是對的。我在不同的計算機上使用了相同的代碼(使用Windows),並且我看到了不同的結果......此外,我曾在'random_state'參數中設置不同的種子之前嘗試過,並且引發了不同的結果。感謝您的迴應... – gefero

相關問題