我有一个包含 10 个特征的分类问题,我必须预测
1
或 0
。当我训练 SVC 模型时,通过训练测试分割,数据测试部分的所有预测值都是 0
。数据有以下0-1计数:
0
:18751
: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
?
对于分类问题,运行虚拟分类器作为起点总是好的。这会让您了解您的模型有多好。
您可以使用它作为代码:
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)
即使数据集不太不平衡,模型也会预测更频繁的类别。很可能无法根据现在的特征来预测类别。