注意:我很欣赏大量的意见,表明这不适合量化模型的表现。但是,这与我的错误无关,并且对于各种其他指标会发生此错误。另外,当您认为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)
答案 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得分至关重要。