繁体   English   中英

Sklearn SVM-UndefinedMetricWarning

[英]Sklearn SVM - UndefinedMetricWarning

我正在Python中执行分类任务,以将不同乐器的音频文件分类到各自的类中,在我的情况下,有4类,分别是Brass,String,Percussion和Woodwind。 我使用了3种不同的算法,k最近邻算法,朴素贝叶斯算法和SVM。 我的代码看起来像这样:

#X is feature matrix, y is class vector
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

#k-NN Classifier
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train,y_train)
knn_pred = knn.predict(X_test)
print(metrics.classification_report(y_test,knn_pred)

#Naive Bayes Classifier
nb = GaussianNB()
nb.fit(X_train,y_train)
nb_pred = nb.predict(X_test)
print(metrics.classification_report(y_test,nb_pred)

#SVM Classifier
svm = SVC()
svm.fit(X_train,y_train)
svm_pred = knn.predict(X_test)
print(metrics.classification_report(y_test,svm_pred)

当我尝试运行此代码时,我的SVM分类器出现问题。 错误代码如下所示:

      precision    recall  f1-score   support

  Brass       1.00      0.21      0.34        72
Percussion    0.38      1.00      0.55       279
 String       1.00      0.15      0.26       276
 Woodwind     0.00      0.00      0.00       156

 avg / total  0.58      0.43      0.32       783

C:\Users\Anaconda3\lib\site-packages\sklearn\metrics\classification.py:1135: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.

当我从SVM分类器(svm_pred)检查我的预测标签时,没有预测到Woodwind类,这导致Woodwind类的Precision和F1-Score值为0.0。 尽管我对所有3种算法使用了相同的训练集,但仅对于SVM分类器会出现此问题。 有人知道如何解决这个问题吗?

注意:我所有4个类别的数据集都不平衡,我怀疑这可能触发了此错误

我想我知道你的问题是什么。 可能是因为SVM分类器未正确分类Woodwind类的任何实例。 然后,当他尝试计算Woodwind类的精度时,他得到0,因为要计算精度,他做了类似的事情:

真阳性除以(真阳性+假阳性)。

但是真实正值等于0,因此他无法计算0除以某物。 这就是为什么精度分数的值为0的原因。

请记住,真正的肯定是分类器正确分类的Woodwind类的实例数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM