代码之家  ›  专栏  ›  技术社区  ›  Krishi H JakeJ

如何在sklearn中同时获得预测值和误差度量

  •  3
  • Krishi H JakeJ  · 技术社区  · 7 年前

    cross_val_predict 另一个使用 cross_validate . 下面显示的是用于获取度量值的方法(我实现了一个类似的方法来获取预测)。

    def metric_val(folds):
    .
    .
    .
    scoring = {'r_score': 'r2',
               'abs_error': 'neg_mean_absolute_error',
               'squared_error': 'neg_mean_squared_error'}
    
    scores = cross_validate(best_svr, X, y, scoring=scoring, cv=folds, return_train_score=True)
    
    print("****\nR2 :", "", scores['test_r_score'].mean(),
          "| MAE :", scores['test_abs_error'].mean(),
          )
    return prediction
    

    2 回复  |  直到 7 年前
        1
  •  4
  •   andrew_reece    7 年前

    有可能操纵一个记分器,使其返回预测,尽管这是一个小技巧。以下是操作方法:

    这个 cross_validate() 函数可以采用自定义评分函数。评分函数必须返回一个数字,但是在函数中可以做任何您想做的事情。既然你有 clf clf.predict() 然后返回一个虚拟值以使记分员满意。请参阅上的sklearn文档 Implementing your own scoring object 更多。

    from sklearn import svm, datasets
    from sklearn.model_selection import train_test_split, cross_validate, cross_val_predict
    
    # example data
    iris = datasets.load_iris()
    X, y = iris.data, iris.target 
    clf = svm.SVC(probability=True, random_state=0)
    

    定义自定义 get_preds() scorer :

    def get_preds(clf, X, y): # y is required for a scorer but we won't use it
        with open("pred.csv", "ab+") as f: # append each fold to file
            np.savetxt(f, clf.predict(X))
        return 0
    
    scoring = {'preds': get_preds,
               'accuracy': 'accuracy',
               'recall': 'recall_macro'} # add desired scorers here
    
    k = 5
    cross_validate(clf, X, y, 
                   scoring=scoring, 
                   return_train_score=True,
                   cv = k)
    

    获取preds()

    preds = np.loadtxt("pred.csv").reshape(k, len(X))
    my_preds = np.mean(my_preds, axis=0).round()
    

    比较 cross_val_predict() 预言:

    cv_preds = cross_val_predict(clf, X, y, cv=k)
    
    np.equal(my_preds, cv_preds).sum() # 487 out of 500
    

    我们看到临时工之间几乎达成了完美的协议 接近和 交叉值预测() . 小的分歧可能是由于我的平均方法不同于 cross_val_predict sklearn cross-validation docs :

        2
  •  1
  •   Shridhar R Kulkarni    7 年前

    sklearn中没有预先定义的函数来计算预测和性能指标。 sklearn.metrics .

    推荐文章