【问题标题】:How to get the log loss?如何获得日志丢失?
【发布时间】:2019-10-05 13:26:51
【问题描述】:

我正在使用叶分类数据集,并且在测试模型后我正在努力计算模型的对数损失。从这里的指标类中导入它后,我会这样做:

 # fitting the knn with train-test split 
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
 
 # Optimisation via gridSearch
 knn=KNeighborsClassifier()
 params={'n_neighbors': range(1,40), 'weights':['uniform', 'distance'], 'metric':['minkowski','euclidean'],'algorithm': ['auto','ball_tree','kd_tree', 'brute']}
 k_grd=GridSearchCV(estimator=knn,param_grid=params,cv=5)
 k_grd.fit(X_train,y_train)
 
 # testing 
 yk_grd=k_grd.predict(X_test)

 # calculating the logloss 
 print (log_loss(y_test, yk_grd))

但是,我的最后一行导致以下错误:

 y_true and y_pred contain different number of classes 93, 2. Please provide the true labels explicitly through the labels argument. Classes found in y_true.

但是当我运行以下命令时:

X_train.shape, X_test.shape, y_train.shape, y_test.shape, yk_grd.shape
# results
((742, 192), (248, 192), (742,), (248,), (248,))

我真的错过了什么?

【问题讨论】:

  • 以这种方式改变最后一行会发生什么:print (log_loss(y_test, k_grd.predict_proba(X_test)))

标签: python python-3.x machine-learning scikit-learn metrics


【解决方案1】:

来自sklearn.metrics.log_loss documentantion

y_pred : 类似于数组的 float, shape = (n_samples, n_classes) 或 (n_samples,)

预测概率,由分类器的 predict_proba 方法返回。

然后,获取log loss

yk_grd_probs = k_grd.predict_proba(X_test)
print(log_loss(y_test, yk_grd_probs))

如果仍然出现错误,则表示y_test 中缺少特定类。

用途:

print(log_loss(y_test, yk_grd_probs, labels=all_classes))

其中all_classes 是一个包含数据集中所有类的列表。

【讨论】:

  • 这样做时我遇到了完全相同的问题。我会进一步调查。这也是我在文档中可以看到的。我已经试过好几次了。这就是为什么我打印了我拥有的所有数据的形状,但仍然告诉我类的数量有问题。
  • @Camue 检查我的进一步说明。
  • 谢谢。是的,你是对的。 Predic_proba 模式允许您将概率与真实标签进行比较并进一步计算 log_loss。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2018-09-04
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多