【问题标题】:How to set seed value properly to a ML model?如何为 ML 模型正确设置种子值?
【发布时间】:2020-04-09 21:11:17
【问题描述】:

我是 ML 新手,正在运行不同的分类模型。我观察到每次运行模型时,我得到的结果都略有不同。我在网上了解到这是关于设置种子值的。但我无法实现重现性?

下面是我尝试设置种子值但没有帮助的代码

from sklearn.svm import SVC
random.seed(1234)
param_grid = {'C': [0.001,0.01,0.1,1,10,100],  
              'gamma': [1,0.1,0.01,0.001], 
              'kernel': ['linear','rbf','poly'],
              'class_weight':['balanced']}
svm=SVC()
svm_cv=GridSearchCV(svm,param_grid,cv=5)
svm_cv.fit(X_train_std,y_train)
y_pred = svm_cv.predict(X_test_std)
cm = confusion_matrix(y_test, y_pred)
print(cm)
print("Accuracy is ", accuracy_score(y_test, y_pred))

您能帮我了解如何设置seed 值,以便每次运行上述代码时,我都会得到相同的结果/准确度/指标

【问题讨论】:

    标签: python machine-learning deep-learning classification random-seed


    【解决方案1】:

    Scikit learn 使用 numpy 随机种子。因此,您应该像这样导入 numpy 并设置其随机种子:

    import numpy as np
    np.random.seed(1234)
    

    (https://www.mikulskibartosz.name/how-to-set-the-global-random_state-in-scikit-learn/)

    【讨论】:

    • 感谢您投票并标记为答案。那么我应该对每个模型都使用它吗?或者设置一次种子,将帮助我随时为任何模型重现结果
    • @SSMK 您也可以参考常见问题解答-How do I set a random_state for an entire execution?
    • 嗨,我试过了,但还是不行。我的意思是我在顶部的 Jupyter 单元中定义了 np.random.seed
    • 在下面的单元格中,我为上面显示的分类器执行了代码。我应该将此种子值作为参数传递给任何地方的模型吗?
    • 正如您在链接中看到的,种子从您定义它的位置开始。因此,如果您有上述代码,则需要在任何函数调用之前将种子重置为相同的值以获得相同的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2019-04-20
    • 2016-02-13
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多