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

基因分类模型在随机数据集上多次准确率一致的原因问询

解答:LR/SVM在随机数据上多次运行准确率不变的原因

首先,这完全是正常现象,并不是模型达到了性能瓶颈,而是由你的代码设置和模型本身的特性共同导致的,我来一步步拆解:

1. 为什么LR和SVM的结果会完全固定?

你的代码里有几个关键的固定随机源,导致模型训练和评估的流程完全可重复:

  • 训练/测试集拆分固定:你用了train_test_split(..., random_state=0),这个参数固定后,每次运行都会生成完全相同的训练集和测试集,不会有任何变化。
  • 网格搜索的交叉验证拆分固定:你的inner_cv = KFold(n_splits=10, shuffle=True, random_state=seed),如果seed是一个固定值(比如你之前定义过seed=0之类的),那么GridSearchCV在调参时的交叉验证拆分也是完全固定的。

而LR(逻辑回归)和SVM(默认参数下)属于确定性模型——只要训练数据、调参流程完全一致,最终训练出的模型参数就是完全相同的,自然在同一个测试集上的准确率也会完全一致。

2. 为什么首次运行有差异,后续却不变?

如果是在Jupyter Notebook中多次运行同一个代码单元格:

  • 首次运行时,numpy的随机状态是初始状态,生成的随机数据(np.random.permutation和np.random.randint)是第一次的结果;
  • 后续运行时,numpy的随机状态是延续之前的,但因为你用了固定的random_state=0拆分训练测试集,且GridSearchCV的交叉验证拆分也固定,所以模型训练的输入和流程没有变化,最终准确率就固定了。

另外,你看到的26.67%准确率其实非常接近随机猜测的水平(4个类,随机准确率是25%),这说明LR和SVM在完全无模式的随机数据上根本学不到任何有效特征,只能输出接近随机的结果,所以即使随机数据有变化,它们的准确率也会稳定在25%左右的区间,看起来像是“不变”。

3. 为什么RFC和Keras的结果会有波动?

这两个模型本身带有内部随机性:

  • 随机森林(RFC)在构建每棵树时会随机采样训练样本和特征,即使训练数据相同,每次训练的树也会有差异;
  • Keras模型的权重初始化是随机的,每次训练的初始权重不同,最终模型也会有细微差异。

所以即使你的拆分固定,它们的结果也会有波动,但因为是随机数据,波动也会围绕随机水平(25%)。

验证和建议

  • 验证随机数据的无模式性:可以计算特征和标签之间的相关性(比如用np.corrcoef),你会发现所有特征和标签的相关性都接近0,证明确实没有任何可学习的模式;
  • 让LR/SVM产生变化:如果想看到它们的结果波动,可以去掉train_test_split的random_state=0参数,或者把inner_cv的random_state改为不固定的值(比如每次运行生成一个随机seed);
  • 回到真实实验:这种随机数据测试只是验证模型的“基线”表现,你的真实基因分类实验准确率65-80%是合理的,嵌套交叉验证也有效避免了过拟合,不用因为随机数据的表现担心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:41:59