Python Scikit学习支持向量机-没有类的预测样本

Python Scikit学习支持向量机-没有类的预测样本,python,python-3.x,scikit-learn,classification,svm,Python,Python 3.x,Scikit Learn,Classification,Svm,我正在用Python做一个分类任务,将不同乐器的音频文件分类到各自的类中,在我的例子中有4个类,分别是铜管乐器、弦乐器、打击乐器和木管乐器。我使用SVM算法作为分类器。我的代码看起来有点像这样(我没有更改分类器的任何参数): 当我试图运行这段代码时,我发现分类器有问题。错误代码如下所示: precision recall f1-score support Brass 1.00 0.21 0.34 72 Perc

我正在用Python做一个分类任务,将不同乐器的音频文件分类到各自的类中,在我的例子中有4个类,分别是铜管乐器、弦乐器、打击乐器和木管乐器。我使用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)检查预测的标签时,分类器不会预测木管乐器类

>>> set(svm_pred)
{'Brass','String','Percussion'}
我每门课的样本数量是这样的:黄铜=200个样本,木管乐器=500个样本,打击乐器=900个样本,弦乐器=800个样本,所以有点不平衡


我的问题是,SVM分类器是否可能完全不在分类器的输出中预测一个类,就像我上面的例子一样?

如果木管乐器在训练集中的表现和在测试集中的表现一样好,我的猜测是你的模型完全不正确,因此不能预测这个类。尝试使用SKSCALE()缩放任何数字特征

以及支持向量机分类器的不同核选择

>>> set(svm_pred)
{'Brass','String','Percussion'}

如果木管乐器在训练集中的表现和在测试集中的表现一样好,我猜你的模型是完全错误的,因此不能预测这门课。尝试使用SKSCALE()缩放任何数字特征

以及支持向量机分类器的不同核选择

>>> set(svm_pred)
{'Brass','String','Percussion'}

另一个问题可能是由于这样一个事实,即如果在分割数据集时不进行分层,则可能是某些折叠根本不包含一个类,而其他折叠则包含一个类。尝试使用stratify=y选项来解决问题:)

另一个问题可能是由于这样一个事实,即如果在分割数据集时不进行分层,则可能是某些折叠根本不包含一个类,而其他折叠则包含一个类。尝试使用stratify=y选项来解决问题:)

您是否注意到在代码中使用knn.predict()而不是svm.predict()?抱歉,这是输入错误。我在我的实际程序中使用了正确的一个(svm.predict()),但仍然得到了上面的结果@KRKirovIf Woodwind在训练集中的表现和在测试集中的表现一样好,我的猜测是你的模型完全不正确,因此不能预测这门课。尝试使用sklearns scale()和SVM分类器的不同内核选项缩放任何数值特征。我尝试在参数中使用多项式内核,它提供了显著更好的结果(>90%的精度)。SVC()函数的默认内核是RBF。我怎样才能分析为什么会发生这种情况@Krkirovad还添加了缩放功能-这肯定会进一步帮助您。您是否注意到在代码中使用knn.predict()而不是svm.predict()?抱歉,这是输入错误。我在我的实际程序中使用了正确的一个(svm.predict()),但仍然得到了上面的结果@KRKirovIf Woodwind在训练集中的表现和在测试集中的表现一样好,我的猜测是你的模型完全不正确,因此不能预测这门课。尝试使用sklearns scale()和SVM分类器的不同内核选项缩放任何数值特征。我尝试在参数中使用多项式内核,它提供了显著更好的结果(>90%的精度)。SVC()函数的默认内核是RBF。我怎样才能分析为什么会发生这种情况@KRKirovAdd的缩放以及-它一定会帮助你进一步。