我想使用LogisticRegression
进行分类。因此,我使用RandomizedSearchCV
在LogisticRegression
中选择最佳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_
答案 0 :(得分:2)
您正确地将random_state设置为LogisticRegression和RandomizedSearchCV。但是,当您使用params
生成np.random
时,还有一个可以更改列车测试数据的来源。每次运行都会更改。
要控制此行为,您可以将numpy.random.seed()
设置为您选择的整数。在你的代码之上有类似的东西:
np.random.seed(0)
注意:这样做也会为所有scikit模块设置种子,因为内部scikit会使用它。因此,在这种情况下,您可能不需要在任何地方设置random_state,但不建议这样做。
您可能还想检查这些资源: