SVM二进制分类器针对所有测试数据预测一个类别

时间:2019-09-18 11:10:06

标签: machine-learning scikit-learn svm

我有10个特征的分类问题,必须预测10。当我训练SVC模型时,通过训练测试拆分,数据测试部分的所有预测值都出来为0。数据具有以下0-1计数:

  • 0:1875
  • 1:1463

用于训练模型的代码如下:

from sklearn.svm import SVC
model = SVC()
model.fit(X_train, y_train)
pred= model.predict(X_test)
from sklearn.metrics import accuracy_score 
accuracy_score(y_test, pred)`

为什么在所有情况下都预测0

2 个答案:

答案 0 :(得分:0)

即使数据集也没有太多不平衡,该模型仍会预测更频繁的班级。目前很可能无法根据功能预测类。

  • 您可以尝试normalizing the features
  • 您可能要尝试的另一件事是查看功能之间的关联程度。具有高度相关的特征也可能会阻止模型收敛。
  • 此外,您可能选择了错误的功能。

答案 1 :(得分:0)

对于分类问题,最好将虚拟分类作为起点。这将使您了解模型的性能。

您可以将其用作代码:

from sklearn.dummy import DummyClassifier
dummy_classifier = DummyClassifier(strategy="most_frequent")
dummy_classifier.fit(X_train,y_train)
pred_dum= dummy_classifier.predict(X_test)
accuracy_score(y_test, pred_dum)

如果您始终预测最频繁的课程,这将使您具有准确性。例如:100%,这意味着您的数据集中只有一个类。 80%表示您80%的数据属于一类。

第一步,您可以调整SVC:

model = SVC(C=1.0, kernel=’rbf’, random_state=42)
  

C:浮点数,可选(默认= 1.0)错误的惩罚参数C   学期。

     

kernel:指定算法中要使用的内核类型。它   必须是“线性”,“多边形”,“ rbf”

之一

这可以为您提供一个起点。

最重要的是,您还应该对训练数据进行预测,以查看拟合或过度拟合的结果。

trainpred= model.predict(X_train)
accuracy_score(y_test, trainpred)