代码之家  ›  专栏  ›  技术社区  ›  Him

Logistic回归均方误差

  •  -1
  • Him  · 技术社区  · 8 年前

    注: 我很欣赏大量的评论,这些评论认为这不适合量化模型性能。然而,这与我的错误无关,并且这个错误发生在各种其他指标上。此外,请参见 here 当你认为OP“问错了问题”时,如何做出适当的回应

    我有一个sklearn逻辑模型,我正在尝试获得RMSE。然而,当我 .predict_proba ,我得到一个概率向量。然而,我的 y_test 是以其分类形式出现的 sklearn.linear_model.LogisticRegression 只是一种自动处理。

    如何协调这两件事以获得RMSE?

    >>> sklearn.metrics.mean_squared_error(y_test, pred_proba, sample_weight=weights_test)
    ValueError: y_true and y_pred have different number of output (1!=13)
    
    4 回复  |  直到 8 年前
        1
  •  0
  •   TayTay    8 年前

    predict_proba 是预测样本属于某个类的概率。这些概率的arg max是预测类(分类形式)。RMSE不是分类指标。如果要评估模型,请考虑不同的度量标准,如 accuracy_score :

    from sklearn.metrics import accuracy_score
    predictions = your_model.predict(X_test)
    print("Accuracy: %.3f" % accuracy_score(y_test, predictions))
    
        2
  •  0
  •   aikramer2    8 年前

    brier得分,基本上是均方误差,是利用概率得分的分类模型的已知有效损失函数;我也会看看这个。

    对于您的特定问题,您希望比较为目标类返回的概率,即针对二进制类问题:

    from sklearn.metrics import brier_score_loss
    
    probs = your_model.predict_proba(X_test)
    brier_score_loss(y_true, probs[:, 1])
    

    我不确定brier是否是针对多类问题正式定义的。我想指出平均错误分类错误的概念,它将不同类别的错误平均化。

    要在sklearn API中利用这一点,请将您的y\u true分类编码,即每个类都有自己的列,并调用

    sklearn。指标。mean\u squared\u error(y\u true,probs,multioutput=均匀\u average)

        3
  •  0
  •   Soerendip    8 年前

    以下是计算RMSE的方法:

    import numpy as np
    from sklearn.metrics import mean_squared_error
    x = np.range(10)
    y = x
    rmse = np.sqrt(mean_squared_error(x, y))
    
        4
  •  -1
  •   Him    8 年前

    可以改变 y_test 转换为与 predict_proba 输出如下:

    model = sklearn.linear_model.LogisticRegression().fit(X,y) # or whatever model
    label_encoder = sklearn.preprocessing.LabelEncoder()
    label_encoder.classes_ = model.classes_
    y_test_onehot = sklearn.preprocessing.OneHotEncoder().fit_transform(label_encoder.transform(y_test).reshape((-1,1)))
    

    现在,您可以在 sklearn.metric .这对于计算,比如说,brier分数是至关重要的。