2017-06-14 9 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

コードには2つのスコアが計算されています。最初のもの、

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

はい...しかし、問題は私が異なる結果を得ないということです。このラインプリントでは、 "バギングスコア:\ t"、cross_val_score(バギング、X、 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

関連する問題