在sklearn中自定义评分器是否会影响GridSearchCV中估计器的损失函数?
SVM损失函数与GridSearchCV自定义评分器的关系
SVM的损失函数由自身算法决定,和GridSearchCV的scoring无关
SVM(比如scikit-learn里的SVC)训练时的损失函数是模型本身的属性,默认是铰链损失(hinge loss)。只要你没修改SVM模型自身的损失函数参数(比如线性SVC的loss参数),不管用不用GridSearchCV,训练过程都会以铰链损失为优化目标,寻找最优分类超平面。GridSearchCV的scoring是超参数筛选的评价标准,不改变模型训练逻辑
你传入的自定义评分器,只是GridSearchCV用来对比不同超参数组合模型性能的依据。比如你自定义了加权F1或特定召回率,GridSearchCV会在每个超参数组合训练完模型后,用这个评分器计算得分,最终选出得分最高的超参数组合。这个过程完全不会干预SVM的训练过程,模型的损失函数依然保持原来的设置。代码示例直观说明
from sklearn.svm import SVC from sklearn.model_selection import GridSearchCV from sklearn.metrics import make_scorer, recall_score # 自定义加权召回率评分器 custom_scorer = make_scorer(recall_score, average='weighted') # SVM模型默认使用铰链损失 svm_model = SVC() # 待调优的超参数网格 param_grid = {'C': [0.1, 1, 10], 'gamma': [0.001, 0.01, 0.1]} # 传入自定义scoring执行网格搜索 grid_search = GridSearchCV(svm_model, param_grid, scoring=custom_scorer) grid_search.fit(X_train, y_train)这段代码里,SVM训练全程用铰链损失优化,GridSearchCV只是用自定义的加权召回率来挑选最优的
C和gamma,最终得到的最优模型,其训练损失函数还是铰链损失。
内容的提问来源于stack exchange,提问作者footycrazy
相关产品推荐
相关产品推荐

