You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LinearRegression与线性核SVC得分差异大及交叉验证警告问题咨询

问题解答

1 线性回归与SVC得分差异巨大的核心原因

你混淆了回归模型和分类模型的适用场景:

  • LinearRegression是回归模型,专门处理y为连续值的预测任务(比如月度销售额),其score方法返回的是R²指标,衡量模型对连续值的拟合程度,0.98说明你的线性回归模型拟合效果很好。
  • SVC全称为Support Vector Classifier,是分类模型,只能处理y为离散类别的预测任务(比如判断用户是否购买、商品属于哪个品类)。你传入连续的y值时,SVC会把每一个不同的y值都识别为一个独立的分类标签,大部分标签的样本量只有1条,模型根本无法学习分类规律,且其score方法返回的是分类准确率(要求预测值和真实值完全一致才算正确),连续值几乎不可能完全匹配,所以得分接近0是必然结果。

2 交叉验证警告/报错的原因

你调用cross_val_score时传入的是分类模型SVC,scikit-learn会默认使用分层K折拆分策略(StratifiedKFold),该策略要求每个分类标签在所有拆分的折里都有样本,而你的连续y值对应的分类标签最少只有1个样本,连2折拆分的要求都满足不了,自然会触发警告;当你把cv调大到5时,要求每个标签最少有5个样本,完全不满足,因此直接报错。
本质还是使用分类工具处理回归任务导致的不兼容问题。

3 回归场景的正确处理方案

  • 替换分类模型为回归模型:如果要使用支持向量机做回归任务,需调用SVR而不是SVC,示例引入代码:from sklearn.svm import SVR,模型初始化代码:svr_reg = SVR(kernel='linear', C=1, random_state=42)
  • 交叉验证适配回归场景:回归任务不需要分层拆分,直接使用普通K折即可,也可以开启shuffle打乱数据顺序避免时序等规律影响,示例代码:
from sklearn.model_selection import KFold, cross_val_score
# 定义5折交叉验证,先打乱数据再拆分
kf = KFold(n_splits=5, shuffle=True, random_state=42)
# 传入回归模型做交叉验证,默认返回R²得分,也可通过scoring参数指定MSE、MAE等指标
scores = cross_val_score(svr_reg, X, y, cv=kf)
  • 模型对比时统一使用回归类模型:你可以分别对线性回归、SVR等回归模型做拟合和交叉验证,不要混用分类模型。

内容的提问来源于stack exchange,提问作者IRK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:54:03