我正在测试一个简单的模型(knn),并尝试将结果与Ensemble进行比较。

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

但是每次我运行它时,我得到的错误估计都是相同的……每次都应该不一样吗?

最佳答案

您的代码中计算出两个分数。第一个,

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,您随机抽取一半样本来训练每个基本估计量。因此,每次运行代码时,您可能会得到不同的结果。

10-06 06:29