同一批样本数据,利用sklearn中二项逻辑回归预测同一批预测数据的概率,每次预测结果有很大不同

  统计/机器学习 回归分析 监督式学习 Python    浏览次数:3505        分享
0

各位大佬好,本人目前在用sklearn中LogisticRegression针对同一批样本数据(包括训练样本和测试样本,sklearn默认两个样本的比例为4:1)来训练一个回归模型,模型训练完后,应用于一批预测数据,计算各个预测数据的概率,最终进行分类,为什么针对同一批样本数据和同一批预测数据,没运行一次程序计算的概率和前几次计算的概率有很大出入?(例如,样本数据集A,利用sklearn从A训练一个模型M,预测数据集为C,第一次运行程序训练出模型M1,应用M1于C得到C中各个纪录的预测概率,但第二次再运行程序训练模型M2,因为样本数据没变,那么M2应该和M1的一样,应用M2于C来预测C中各个纪录的预测概率,但第二次预测的概率和第一次预测的概率有很大不同)因为是同一批样本数据,不是应该每次训练的模型的参数应该是相同,那么每次计算的预测数据的概率应该也是相同,为什么会出现每次计算的概率会不同的情况?求大佬解惑,万分感谢!

 

alanjiang   2019-11-27 09:29



   1个回答 
2

sklearn.linear_model.LogisticRegression里有随机种子,每次运行前会随机打乱数据,你训练时要固定这个随机种子才能得到一样的模型,random_state自己随便用一个整数代替就好

from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(penalty=’l2’, C=1.0, random_state=0)

逻辑回归本身并没有特别复杂的设定,在LogisticRegression中只有penalty和C两个超参可以调整。具体数值可以通过交叉验证进行选择确定。

SofaSofa数据科学社区DS面试题库 DS面经

我小宋   2019-11-27 09:59

非常感谢大佬,那我固定了这个随机种子后,会影响准确率等一些评估指标么?针对同一批样本数据,怎样才能得到最大的准确率?(因为没有固定随机种子的话,针对同一批样本数据,每次运行得到的准确率都不一样) - alanjiang   2019-11-27 19:13
不同的随机种子会影响精度的,但是你不应该去调这个随机种子,它本身不是模型的超参。正确的思路是应该调整你的模型的超参和特征去最优化模型表现。 - 我小宋   2019-11-28 06:59
好的,谢谢,目前经过特征工程已经对模型的特征进行了降维处理,得到了比较理想的特征,但sklearn.linear_model.LogisticRegression实现的逻辑回归的超参不是已经调整到最优的状态了么?或者没有调整好,有推荐的关于sklearn中逻辑回顾函数的调参方法么?多谢大佬! - alanjiang   2019-11-29 15:07
我更新了我的回答,你可以看下。sklearn里的逻辑回归有默认的正则项,正则项的设定是你自己可以调优的。 - 我小宋   2019-12-02 13:49
好的,多谢大佬;还需要请教个问题,我现在有一份固定的正类样本,还有一份随机的负类样本(负类样本数据量和正类的数据量相近),由于负类样本的随机性,那么训练样本不是固定的,即使将逻辑回归的两个超参调到最优,也会导致了每次训练的模型分类的结果会不同,比如,第一次训练好的回归模型分类的结果是A,第二次训练好的回归模型分类的结果是B,A和B的相差较大,交集很小,如何在负类样本随机采样的情况下,尽量让A和B的交集的数据量够大,最好A和B尽量一致?多谢大佬! - alanjiang   2019-12-02 22:19


  相关讨论

提取sklearn逻辑回归的模型系数

当训练集只有一个特征的时候,sklearn的LinearRegression报错

sklearn里怎么做多项式回归?

sklearn回归的入门级问题

怎么获取sklearn.linear_model.SGDRegressor的回归系数、截距?

sklearn分类模型中预测结果怎么调整概率的阈值

CatBoostClassifier里的rsm参量是什么意思?

sklearn SGDClassifier的partial_fit是什么意思?

sklearn中的predict_proba方法的返回值的意义

sklearn predict的默认阈值

  随便看看

sklearn分类模型中预测结果怎么调整概率的阈值

wide-deep模型里的wide和deep分别是指什么意思?

plt.show()之后matplotlib图像依然不展示

dropout rate一般设置多大?

python里怎么计算曼哈顿距离?