Machine learning SVM二元分类器为所有测试数据预测一类

Machine learning SVM二元分类器为所有测试数据预测一类,machine-learning,scikit-learn,svm,Machine Learning,Scikit Learn,Svm,我有10个特征的分类问题,我必须预测1或0。当我对SVC模型进行训练时,通过训练测试分割,数据测试部分的所有预测值均为0。数据具有以下0-1计数: 0:1875 1:1463 培训模型的代码如下所示: 从sklearn.svm导入SVC model=SVC() 模型拟合(X\U系列、y\U系列) pred=模型预测(X_检验) 从sklearn.metrics导入准确性\u分数 准确度评分(y检验,pred)` 为什么它预测所有情况下的0?该模型预测更频繁的类,即使数据集也不太不平衡。很可

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

  • 0
    :1875
  • 1
    :1463
培训模型的代码如下所示:

从sklearn.svm导入SVC
model=SVC()
模型拟合(X\U系列、y\U系列)
pred=模型预测(X_检验)
从sklearn.metrics导入准确性\u分数
准确度评分(y检验,pred)`

为什么它预测所有情况下的
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 任期

内核:指定要在算法中使用的内核类型。信息技术 必须是“线性”、“多边形”、“rbf”之一

这可以给你一个起点

最重要的是,你还应该对你的训练数据进行预测,看看你是过度拟合还是欠拟合

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