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

调整train_test_split的random_state参数为何影响线性回归模型准确率?

嘿,这事儿太正常了!我来给你掰扯清楚为啥会这样,还有怎么解决:

为啥改random_state会影响模型准确率?

首先得明白train_test_split里的random_state是干啥的——它就是个随机种子,用来控制数据集拆分的随机性。你换个种子,就相当于把原始数据集按不同的方式切成了训练集和测试集:

  • 你的Lasso模型是靠训练集里的数据来拟合参数的,训练数据变了,模型学到的特征权重肯定不一样;
  • 测试数据也变了,用来评估准确率的样本不同,结果自然会波动。
    尤其是波士顿房价数据集本身只有506条样本,33%的测试集也就160多条,这种小规模数据集的拆分差异对模型表现的影响会更明显。
怎么得到稳定的模型评估结果?

如果想让评估结果更可信,试试这几个办法:

  1. 用交叉验证替代单次拆分
    别只做一次train-test拆分,而是把数据集分成好几份,轮流用不同的子集当测试集,最后取平均准确率。比如用sklearn的交叉验证工具:
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.linear_model import Lasso

steps = [('regr', Lasso())]
pipeline = Pipeline(steps)
# 5折交叉验证,把数据集分成5份,每次用1份测试,4份训练
scores = cross_val_score(pipeline, X, y, cv=5)
print(f"平均准确率: {scores.mean():.4f}, 准确率波动: {scores.std():.4f}")

这样就能消除单次随机拆分带来的运气成分,得到更靠谱的模型性能。

  1. 固定random_state做模型对比
    如果你只是在调试模型、对比不同参数(比如调整Lasso的alpha),固定一个random_state(比如你用的42)是个好习惯——这样每次拆分的数据集都一样,不同模型的对比结果才公平,不会因为数据拆分干扰结论。

  2. 调优Lasso的超参数
    对了,Lasso的alpha参数(正则化强度)对模型性能影响很大,你可以结合交叉验证来找到最优的alpha:

from sklearn.model_selection import GridSearchCV

# 定义要尝试的alpha值范围
param_grid = {'regr__alpha': [0.01, 0.1, 1, 10, 100]}
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(X, y)

print(f"最佳alpha值: {grid_search.best_params_['regr__alpha']}")
print(f"最优模型的平均准确率: {grid_search.best_score_:.4f}")

这样既解决了拆分随机性的问题,又能让模型性能达到最优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:35:23