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

问题描述 投票:0回答:2

我有一个包含 10 个特征的分类问题,我必须预测

1
0
。当我训练 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

machine-learning scikit-learn svm
2个回答
1
投票

对于分类问题,运行虚拟分类器作为起点总是好的。这会让您了解您的模型有多好。

您可以使用它作为代码:

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 :float,可选(默认=1.0)错误的惩罚参数C 术语。

kernel :指定算法中使用的内核类型。它 必须是“线性”、“聚”、“rbf”之一

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

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

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

0
投票

即使数据集不太不平衡,模型也会预测更频繁的类别。很可能无法根据现在的特征来预测类别。

  • 您可以尝试标准化功能
  • 您可能想要尝试的另一件事是查看特征彼此之间的相关性。具有高度相关的特征也可能会阻止模型收敛。
  • 此外,您可能选择了错误的功能。
© www.soinside.com 2019 - 2024. All rights reserved.