【问题标题】:SVM binary classifier predicts one class for all of test dataSVM 二元分类器为所有测试数据预测一个类别
【发布时间】:2020-01-19 07:55:27
【问题描述】:

我有一个包含 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

【问题讨论】:

    标签: machine-learning scikit-learn svm


    【解决方案1】:

    该模型预测更频繁的类别,即使数据集也不太不平衡。很有可能无法像现在这样从特征中预测出该类别。

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

    【讨论】:

      【解决方案2】:

      对于分类问题,运行一个虚拟分类器作为起点总是好的。这会让你知道你的模型有多好。

      您可以将其用作代码:

      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, optional (default=1.0)错误的惩罚参数C 术语。

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

      这可以给你一个起点。

      此外,您还应该对训练数据进行预测,以查看是否过拟合或欠拟合。

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

      【讨论】:

        猜你喜欢
        • 2018-04-01
        • 2020-05-22
        • 1970-01-01
        • 2016-11-28
        • 2017-10-03
        • 2017-07-10
        • 1970-01-01
        • 2020-07-11
        • 2018-06-30
        相关资源
        最近更新 更多