我有一个强烈不平衡的数据集,我想尝试不同的形状模型,支持向量机分类和不同的烟雾“随机”和“打击”我做了这个,但有没有一个更紧凑的方法来做到这一点?
DecisionShapeModel = ['ovo', 'ovr']
Smoothing = [SMOTE(k_neighbors=3),RandomOverSampler()]
ListParam = itertools.product(DecisionShapeModel, Smoothing)
for DecisionShapeModel, Smoothing in ListParam:
model = SVC(decision_function_shape=DecisionShapeModel, probability=True)
PipelineIMB = Pipeline([
('smote', Smoothing),
('svm', model)
])
""" Define search space """
param_grid = {
'svm__C': np.arange(1, 20, 1),
'svm__kernel': ['linear', 'poly', 'rbf', 'sigmoid']
}
kf = KFold(n_splits=10, random_state=42, shuffle=True)
grid_imba = GridSearchCV(PipelineIMB, param_grid, cv=kf, scoring='f1_macro',
verbose=10, n_jobs=-1, error_score='raise')
grid_imba.fit(X_train, y_train)
y_pred = grid_imba.predict(X_test)发布于 2022-03-07 20:09:02
如果您的目标是测试这些选项,并且只保留最好的修改模型,那么您可以将所有内容打包到GridSearchCV中,利用参数网格中替换整个步骤的功能。
model = SVC(probability=True)
PipelineIMB = Pipeline([
('sample', 'passthrough'),
('svm', model),
])
param_grid = {
'sample': [
SMOTE(k_neighbors=3),
RandomOverSampler(),
], # these replace the original definition of "passthrough"
'svm__decision_function_shape': ['ovo', 'ovr'],
'svm__C': np.arange(1, 20, 1),
'svm__kernel': ['linear', 'poly', 'rbf', 'sigmoid'],
}
kf = KFold(n_splits=10, random_state=42, shuffle=True)
grid_imba = GridSearchCV(PipelineIMB, param_grid, cv=kf, scoring='f1_macro',
verbose=10, n_jobs=-1, error_score='raise')
grid_imba.fit(X_train, y_train)https://stackoverflow.com/questions/71237726
复制相似问题