【问题标题】:BaggingClassifier give the same result in different executionsBaggingClassifier 在不同的执行中给出相同的结果
【发布时间】:2017-06-19 22:24:08
【问题描述】:

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

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

但是每次我运行它的代码我都会得到相同的错误估计......每次都不应该不同吗?

【问题讨论】:

  • 没有数据很难说。
  • 我已经添加了一些数据作为示例...

标签: python scikit-learn classification


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

【讨论】:

  • 是的......但问题是我没有得到不同的结果......在这个 lineprint "Bagging Score:\t", cross_val_score(bagging, X, y, cv=5, n_jobs=-1).mean()
  • 这很奇怪......也许在你系统的某个地方,随机种子是固定的?尝试执行以下操作:将参数 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) 运行代码。你仍然得到相同的结果吗?
  • 我认为你是对的。我在另一台计算机(使用 Windows)上尝试了相同的代码,但我看到了不同的结果......此外,我在 random_state 参数中设置不同的种子之前尝试过,它抛出了不同的结果。感谢您的回复...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
相关资源
最近更新 更多