我面临一个多类分类问题,其中我试图将我的数据点分类为4:{0,1,2,3}。
我想根据自己的问题,以一种特定的方式来处理模型,以特定的方式处理不同类型的错误分类:
如果(true_class-pred_class == 0)->错误= 0
否则if(true_class + pred_class == 3)->错误= 2
else->错误= 1
**我正在使用sklearn和“ rbf”内核在SVC模型上为C和gamma参数使用GridSearchCV。
我该怎么做? 在这种情况下设置定制的损失函数是否可能且有帮助?
我正在sklearn.metrics中使用make_scorer模块,但最后对我的准确性没有影响。而且,我的火车分数为负。
我的代码:
def find_best_estimator(X: np.ndarray, y:np.ndarray):
# Define params for grid search
param_grid = {'C': [0.1,1,10,100,1000,10000], 'gamma':[1,0.1,0.01,0.001,0.0001, 0.00001]}
################### Define loss function ###################
def two_dimensional_error(y_true, y_pred):
assert len(y_true) == len(y_pred)
error = 0
for i in range(len(y_true)):
if y_true[i] - y_pred[i] == 0:
continue
elif y_true[i] + y_pred[i] == 3:
error += 2
else:
error += 1
return error
############################################################
two_dimensinal_scorer = make_scorer(two_dimensional_error, greater_is_better=False)
# Grid search with SVM
grid = GridSearchCV(SVC(), param_grid=param_grid, verbose=3, cv=10, scoring=two_dimensinal_scorer)
grid.fit(X_train, y_train)
return grid
任何想法将不胜感激!
欢呼