scikit-learn - 在 svm.scv() 中同时使用“class_weight”和“c”参数会发生什么?
问题描述
我正在尝试构建一个分类器。在玩超参数时,我碰巧同时使用了参数class_weights
,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_weight。它是 {class_label : value} 形式的字典,其中 value 是一个浮点数 > 0,它将 class_label 的参数 C 设置为 C * 值。
换句话说:
在您的第一个示例中,您将拥有
C = 1*5 = 5
0 类和C = 1*10 = 10
1 类(因为默认值为 1.0)在您的第二个示例中,您将拥有
C = 5*5 = 25
0C = 5*10 = 50
类和 1 类
推荐阅读
- php - How to extend Shopware 6 controller action
- javascript - 使用钩子为 React 中的元素列表动态创建 Refs
- azure-iot-central - Azure IoT Central - 枚举值在仪表板中显示空白值
- ios - 如何使用 alamofire 和数组形式的参数上传图像
- c# - 如何处理特定的 HttpClient 错误
- vb.net - 当我从 MDI 表单显示它时,我的子表单不可见
- c# - C#如何根据ID自动显示PDF
- c# - 将标志枚举转换为二进制字符串表示
- jmeter - 如何使用(正文数据-xml/cxml)值在jmeter post请求中参数化/关联?
- mysql - 使用mysql中的存储过程执行sql