Scikit learn 使用“时会发生什么?”;“U级重量”;及;";svm.scv()中同时存在的参数?

Scikit learn 使用“时会发生什么?”;“U级重量”;及;";svm.scv()中同时存在的参数?,scikit-learn,Scikit Learn,我正在尝试建立一个分类器。在玩hyperparameters时,我碰巧同时使用了参数class_权重和C,并且看到了我不理解的结果 这个代码给了我一个不同的f1分数 clf = svm.SVC(kernel="linear",class_weight={1:10,0:5}) clf.fit(X_train_tfidf, y_train) predicted=clf.predict(X_test_tfidf) f1_score(y_test, predicted) 从这个代码 clf = svm

我正在尝试建立一个分类器。在玩hyperparameters时,我碰巧同时使用了参数
class_权重
C
,并且看到了我不理解的结果

这个代码给了我一个不同的f1分数

clf = svm.SVC(kernel="linear",class_weight={1:10,0:5})
clf.fit(X_train_tfidf, y_train)
predicted=clf.predict(X_test_tfidf)
f1_score(y_test, predicted)
从这个代码

clf = svm.SVC(kernel="linear",class_weight={1:10,0:5},c=5)
clf.fit(X_train_tfidf, y_train)
predicted=clf.predict(X_test_tfidf)
f1_score(y_test, predicted)
我的理解是,在设置类权重时,您正在根据此等式设置
C

在这种情况下,我希望忽略
C
参数。但事实似乎并非如此。sklearn在用它做什么?我理解错了什么吗


谢谢

设置类权重和设置
C
参数是两件独立的事情,您不应该期望结果是相同的

文件说明了以下内容:

在需要对某些类或某些单个样本给予更多重视的问题中,可以使用关键词class_-weight和sample_-weight

SVC在fit方法中实现关键字class_权重。它是一个{class_label:value}形式的字典,其中value是一个浮点数>0,它将class_label的参数C设置为C*value

换言之:

  • 在第一个示例中,类0的
    C=1*5=5
    ,类1的
    C=1*10=10
    (因为默认值为1.0)

  • 在第二个示例中,类0的
    C=5*5=25
    ,类1的
    C=5*10=50


我用这些信息进行了一些测试,可以确认这就是我所看到的。非常感谢。我不知道它会用C乘以类的权重。