【问题标题】:sklearn SGDClassifier can not make it train or predict deterministicallysklearn SGDClassifier 无法使其确定性地训练或预测
【发布时间】:2018-11-30 22:31:08
【问题描述】:

我正在使用 sklearn.linear_model.SGDClassifier 训练一个简单的线性模型。我看到了一些结果,在相同的训练集上进行训练有时会产生截然不同的结果。我正在尝试进行一项实验,在该实验中,我冻结了有关我的特征构建管道和样本选择的所有内容,以查看初始随机状态对分类器结果的影响。所以在这里我尝试循环遍历相同的拟合并多次预测代码,每次都重新实例化分类器对象并将种子设置为 123456。

    classif['classifier'].random_state = 123456
    classif['classifier'].fit(LABELED, LABELS)   
    y_test = classif['classifier'].predict(TEST_LABELED[:1000])                                                                                                                                                                              
    classif['accuracy_over_iter'] = np.append(classif['accuracy_over_iter'], accuracy_score(TEST_LABELS[:1000], y_test))  
    classif["score"] = accuracy_score(TEST_LABELS[:1000], y_test)
    print(f'{classif["description"]} score {classif["score"]}')    

之后,我训练的每个分类器最终都会得到稍微不同的预测。我是否没有以某种方式正确设置种子?

reflectance_standard_scaler__SGD score 0.642    
reflectance_standard_scaler__SGD score 0.644  
reflectance_standard_scaler__SGD score 0.632 
reflectance_standard_scaler__SGD score 0.623 
reflectance_standard_scaler__SGD score 0.66
reflectance_standard_scaler__SGD score 0.601 
reflectance_standard_scaler__SGD score 0.671

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    似乎 sklearn 仅在实例化时检查 random_state 变量的状态。在这种情况下,我在其他地方实例化,然后设置状态,这为时已晚,因为 sklearn 已经创建了自己的 RNG。

    在实例化时传入 random_state 会导致确定性结果。

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 2019-03-08
      • 2017-12-28
      • 2015-12-04
      • 2014-06-12
      • 2019-07-18
      • 1970-01-01
      • 2019-06-02
      • 2018-05-07
      相关资源
      最近更新 更多