我对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)
谢谢
答案 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组合运行是一个干净的初始化。