python - 当我将惩罚更改为 L1 时,为什么我的 linearSVC 会失败?
问题描述
我正在尝试按照 Hyun 等人的论文中提出的方法从 scikit-learn 构建线性 SVC 模型。(来源:https ://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1007608#sec010 )。在论文中它指出:
支持向量机在 scikit-learn 中实现,使用按类频率加权的平方铰链损失来解决类不平衡问题。包括 L1 正则化以强制特征选择的稀疏性
我尝试使用以下代码自己实现这一点:
import numpy as np
from sklearn.model_selection import RepeatedStratifiedKFold, cross_val_score
from sklearn.metrics import accuracy_score
import pandas as pd
from sklearn.svm import LinearSVC
from numpy import mean, std
model = LinearSVC(penalty="l1", class_weight='balanced', loss='squared_hinge')
cv = RepeatedStratifiedKFold(n_splits=5, n_repeats=5, random_state=127)
n_scores = cross_val_score(model, X_data, Y_data, scoring="accuracy", cv=cv, n_jobs=-1)
其中所涉及的 X 数据是基因存在/不存在的二进制矩阵;y 数据是二元表型分类器(抗性 = 1,易感 = 0)。不幸的是,我无法访问数据集。
但是,在返回我的结果(n_scores)后,所有值都是“nan”。当我再次执行相同的任务但将惩罚设置为 l2 时,我得到了准确度分数。
怎么了?为什么它不起作用?
解决方案
Dual 必须设置为 False。示例:https ://scikit-learn.org/stable/auto_examples/svm/plot_svm_scale_c.html
推荐阅读
- javascript - 为什么 TypeScript 不强制执行 async/await 承诺?
- php - Amazon Athena“打开 Hive 拆分时出错”访问被拒绝错误
- flutter - Flutter 学习路线图
- excel - 使用 VBA 宏在 Excel 中查找替换希腊字符
- python - 定义 Glop Solver 约束时出现“TypeError:'int' object is not subscriptable”?
- python - Python中有用户提供的键功能的字典吗?
- salesforce - 将自定义设置元数据部署到“企业”组织时出错 - Salesforce
- r - 积分和数值优化 (nlminb) R
- python - 当 Debug = False 时,Django 站点找不到管理样式或媒体文件
- .net - 使用 SQLQuery 在 .NET 应用程序中执行存储过程返回不正确的值