gpt4 book ai didi

python - 使 scikit 具有确定性?

转载 作者:太空狗 更新时间:2023-10-30 01:15:12 24 4
gpt4 key购买 nike

我正在使用 scikit-learn 来训练一些分类器。我进行交叉验证,然后计算 AUC。但是,尽管我确保使用种子和 RandomState,但每次运行测试时我都会得到不同的 AUC 编号。我希望我的测试是确定性的。这是我的代码:

from sklearn.utils import shuffle
SEED = 0
random_state = np.random.RandomState(SEED)
X, y = shuffle(data, Y, random_state=random_state)
X_train, X_test, y_train, y_test = \
cross_validation.train_test_split(X, y, test_size=test_size, random_state=random_state)
clf = linear_model.LogisticRegression()
kfold = cross_validation.KFold(len(X), n_folds=n_folds)
mean_tpr = 0.0
mean_fpr = np.linspace(0, 1, 100)

for train, test in kfold:
probas_ = clf.fit(X[train], Y[train]).predict_proba(X[test])
fpr, tpr, thresholds = roc_curve(Y[test], probas_[:, 1])
mean_tpr += interp(mean_fpr, fpr, tpr)
mean_tpr[0] = 0.0

mean_tpr /= len(kfold)
mean_tpr[-1] = 1.0
mean_auc = auc(mean_fpr, mean_tpr)

我的问题:1-我的代码中是否有什么问题导致我每次运行时的结果都不一样?2- 是否有一种全局方法可以使 scikit 具有确定性?

编辑:

我刚试过这个:

test_size = 0.5
X = np.random.randint(10, size=(10,2))
Y = np.random.randint(2, size=(10))
SEED = 0
random_state = np.random.RandomState(SEED)
X_train, X_test, y_train, y_test = \
cross_validation.train_test_split(X, Y, test_size=test_size, random_state=random_state)

print X_train # I recorded the result

然后我做了:

X_train, X_test, y_train, y_test = \
cross_validation.train_test_split(X, Y, test_size=test_size, random_state=6) #notice the change in random_state

然后我做了:

X_train, X_test, y_train, y_test = \
cross_validation.train_test_split(X, Y, test_size=test_size, random_state=random_state)

print X_train #the result is different from the first one!!!!

如您所见,尽管我使用了相同的 random_state,但我得到了不同的结果!如何解决?

最佳答案

LogisticRegression 在内部使用随机性并有一个(未记录,稍后会修复)random_state 参数。

没有设置随机状态的全局方法,因为不幸的是 LogisticRegression 和 SVM 代码上的随机状态只能以一种 hacky 方式设置。这是因为此代码来自 Liblinear 和 LibSVM,它们使用 C 标准库的 rand 函数并且无法以原则性方式播种。

编辑 以上是正确的,但可能不是问题的原因。您正在通过调用线程处理单个 np.random.RandomState,同时您应该传递相同的整数种子以便于重现。

关于python - 使 scikit 具有确定性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23445420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com