Scikit学习SGDClassifier:精度和召回每次都会改变值

时间:2015-05-08 13:26:18

标签: scikit-learn classification precision-recall

我对scikit学习中的精确度和召回值有疑问。我正在使用函数SGDClassifier对我的数据进行分类。 为了评估性能,我正在使用精度和调用函数precision_recall_fscore_support,但每次运行程序时,我在精度和召回矩阵中都有不同的值。我怎样才能拥有真正的价值观? 我的代码是:

scalerI = preprocessing.StandardScaler()
X_train = scalerI.fit_transform(InputT)
X_test = scalerI.transform(InputCross)
clf = SGDClassifier(loss="log", penalty="elasticnet",n_iter=70)
y_rbf = clf.fit(X_train,TargetT)
y_hat=clf.predict(X_test)
a= clf.predict_proba(X_test)
p_and_rec=precision_recall_fscore_support(TargetCross,y_hat,beta=1)

谢谢

2 个答案:

答案 0 :(得分:1)

docs SGDClassifier有一个初始化为random_state的{​​{1}}参数,这是用于随机数生成器的种子值。您需要修复此值,以便结果可重复,因此请设置None或您想要的任何喜欢的数字

random_state=0

应为每次运行产生相同的结果

来自文档:

  

random_state:int seed,RandomState instance或None(默认值)   伪随机数生成器的种子在洗牌时使用   数据

答案 1 :(得分:0)

我遇到了同样的问题,除非在params网格上运行带有GridSearchCV的SGDClassifier。我甚至在SGDClassifier上设置了random_state。我注意到,如果我多次运行网格搜索,那么从运行到运行的param组合的平均得分并没有那么微妙。我甚至设置warm_start = False只是为了确保每个param组合运行是一个干净的初始化。