RandomizedSearchCV best_params_每次运行此程序时都会更改

时间:2018-03-07 06:18:53

标签: scikit-learn

我想使用LogisticRegression进行分类。因此,我使用RandomizedSearchCVLogisticRegression中选择最佳C参数。

我的问题是:为什么best_params_每次运行此程序时都会更改?我认为best_params_应始终保持不变。

代码如下:

data = load_iris().data
target = load_iris().target

# DATA Split

TrainData , TestData ,TrainTarget , TestTarget = train_test_split(data,target,test_size=0.25,random_state=0)
assert len(TrainData)==len(TrainTarget)
Skf = StratifiedKFold(n_splits=5)

#Model

LR = LogisticRegression(C=10,multi_class='multinomial',penalty='l2',solver='sag',max_iter=10000,random_state=0)

#Params selection with Cross Validation
params = {'C':np.random.randint(1,10,10)}
RS = RandomizedSearchCV(LR,params,return_train_score=True,error_score=0,random_state=0)

RS.fit(TrainData,TrainTarget)

Result = pd.DataFrame(RS.cv_results_)
print RS.best_params_

1 个答案:

答案 0 :(得分:2)

您正确地将random_state设置为LogisticRegression和RandomizedSearchCV。但是,当您使用params生成np.random时,还有一个可以更改列车测试数据的来源。每次运行都会更改。

要控制此行为,您可以将numpy.random.seed()设置为您选择的整数。在你的代码之上有类似的东西:

np.random.seed(0)

注意:这样做也会为所有scikit模块设置种子,因为内部scikit会使用它。因此,在这种情况下,您可能不需要在任何地方设置random_state,但不建议这样做。

请参阅此回答 - Should I use `random.seed` or `numpy.random.seed` to control random number generation in `scikit-learn`?

您可能还想检查这些资源: