如何获得日志丢失?

时间:2019-05-18 13:44:37

标签: python machine-learning scikit-learn

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

setState

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

 # 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.

我真正想念什么?

1 个答案:

答案 0 :(得分:0)

来自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是包含数据集中所有类的列表。