Scikit learn RandomizedSearchCV最佳参数每次运行此程序时都会更改

Scikit learn RandomizedSearchCV最佳参数每次运行此程序时都会更改,scikit-learn,Scikit Learn,我想使用LogisticRegression进行分类。因此,我使用RandomizedSearchCV在logisticsregression中选择最佳的C参数 我的问题是:为什么每次我运行这个程序时,best\u params\u都会改变?我假设最佳参数应该始终保持不变 代码如下: data = load_iris().data target = load_iris().target # DATA Split TrainData , TestData ,TrainTarget , Test

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

我的问题是:为什么每次我运行这个程序时,
best\u params\u
都会改变?我假设
最佳参数
应该始终保持不变

代码如下:

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_

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

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

np.random.seed(0)
注意:这样做还将为所有scikit模块设置种子,因为scikit内部使用此选项。因此,在这种情况下,您可能不需要到处设置随机_状态,但不建议这样做

看到这个答案了吗

您可能还需要检查这些资源:


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

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

np.random.seed(0)
注意:这样做还将为所有scikit模块设置种子,因为scikit内部使用此选项。因此,在这种情况下,您可能不需要到处设置随机_状态,但不建议这样做

看到这个答案了吗

您可能还需要检查这些资源:


请将代码放入代码块中。请将代码放入代码块中。@Kumar谢谢。你是对的。我应该使用np.arange(1,11,1)来获取列表,而不是np.random.randint(1,10,10)@Kumar谢谢。你是对的。我应该使用np.arange(1,11,1)来获取列表,而不是np.random.randint(1,10,10)