【发布时间】:2018-08-11 20:54:59
【问题描述】:
我正在用 Python 进行分类任务,将不同乐器的音频文件分类到各自的类中,在我的例子中,有 4 个类,分别是铜管乐器、弦乐、打击乐器和木管乐器。我使用了 3 种不同的算法,k-Nearest Neighbor、朴素贝叶斯和 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。这个问题只发生在 SVM 分类器上,尽管我对所有 3 种算法都使用了相同的训练集。有谁知道如何解决这个问题?
注意:我的所有 4 个类的数据集都不平衡,我怀疑这可能会触发此错误
【问题讨论】:
标签: python python-3.x scikit-learn svm