Logistic回归均方误差

时间:2018-06-05 17:11:11

标签: python scikit-learn

注意:我很欣赏大量的意见,表明这不适合量化模型的表现。但是,这与我的错误无关,并且对于各种其他指标会发生此错误。另外,当您认为OP“提出错误的问题”时,请参阅here以获得适当的回应方式

我有一个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 个答案:

答案 0 :(得分:0)

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))

答案 1 :(得分:0)

以下是如何计算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))

答案 2 :(得分:0)

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_true进行分类编码,即每个类都有自己的列,然后调用

sklearn.metrics.mean_squared_error(y_true,probs,multioutput ='uniform_average')

答案 3 :(得分:-1)

可以将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得分至关重要。