sklearn.svm.SVC的自定义损失函数

时间:2020-08-09 10:47:26

标签: scikit-learn libsvm loss-function multiclass-classification

我面临一个多类分类问题,其中我试图将我的数据点分类为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 

任何想法将不胜感激!

欢呼

0 个答案:

没有答案