我正在尝试在
GridSearchCV
上使用 OneClassSVM
构建员工流失预测模型。我的代码如下:
from sklearn.svm import OneClassSVM
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import precision, recall, f1_score
grid = {'nu' : [0.02, 0.03],
'kernel' : ['poly', 'sigmoid', 'linear', 'rbf'],
'degree' : [1,3,5,7],
'gamma' : [.01, .1, 1, 10, 500]
'coeff0' : [1,2,3]
}
mod = GridSearchCV(OneClassSVM(),
grid,
cv = 3,
scoring = ['f1', 'precision', 'recall'],
refit = 'f1',
return_train_score = True)
mod.fit(x_train, y_train)
这里 y 只有 0 和 1(本质上是否辞职),但不确定为什么我得到:
ValueError: Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted']
有人可以帮我解决这个问题吗?
您的错误发生是由于
OneClassSVM
模型是无监督学习模型。您正在使用已标记的数据作为输入(受监督的标签,如 0
和 1
)。
您可以通过两种方式解决这个问题。您可以按预期使用
OneClassSVM
:
mod = GridSearchCV(
OneClassSVM(),
grid,
cv=3,
scoring=None, # Scoring doesn't apply here because no ground truth is used
refit=False
)
mod.fit(x_train_majority)
y_pred = mod.best_estimator_.predict(x_train)
然后将“y_pred”与“y_train”进行比较,以计算精度、召回率或 F1 分数等指标。 F1 在你的情况下,因为这就是你想要使用的。