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

相关问题