搜索

首页  >  问答  >  正文

python - sklearn如何训练大规模数据集

问题一:

现在我有40多万条的数据,需要对该数据使用某种机器学习分类算法建立模型,遇到的问题是因为数据过于庞大不能一次性的进行数据的读取,所以想问一下该如何处理数据?

问题二:

关于sklearn交叉验证有个疑问:假如我有10000个训练数据,由交叉验证原理可以将这一万个训练数据集使用KFold方法分成n组训练(train数据占0.7),现在搞不明白的就是我对第一组的训练集进行fit(),然后对测试集进行预测验证得到预测的准确率,但是得到预测准确率有什么用呢?会对下一次的训练有影响吗?还有就是上一次的训练模型会被用到下一次的fit()函数吗?

typechotypecho2707 天前1102

全部回复(3)我来回复

  • 三叔

    三叔2017-06-28 09:24:17

    我最近在学大数据的数据挖掘与分析这一块,对于问题一,我有个思路你参考一下:既然无法一次性读取,可以建立分布式数据模型,分次读取数据,确定地址datanode(可以是某个变量名),建立一个namenode(名字与该地址对应的表),然后获取数据的时候,先在namenode中确认地址(需要的是哪一个变量对应的数据),再访问该地址获取数据进行处理。由于初学,我只是提供下我个人的思路,答案不唯一,仅供参考,各路大牛不喜勿喷。

    回复
    0
  • 仅有的幸福

    仅有的幸福2017-06-28 09:24:17

    40万没多少啊,顶多几G吧......
    如果真的是内存小到8G也没有,那还是得看你具体场景啊,举个列子,单纯算tf-idf,一个generator,内存中只有最后的tf-idf字典。

    交叉验证只是为了选取误差最小的一个,你提到的前面的影响后面,是boosting的概念。

    回复
    0
  • 仅有的幸福

    仅有的幸福2017-06-28 09:24:17

    这种问答网站最好是一个问题一个坑,必要时两个分开的问题给连结连相关性,避免 Double-barreled question

    (1) 见How to optimize for speed,你会发现有很多可以调控试验的方式,包括(a)尽量使用简单的演算法计巧(b)针对现实状况做记忆体使用及速度的侧写( c)试着用Numpy阵列取代所有nested loops (d)必要时使用Cython Wrapper 去调更有效率的C/C++函数库。这些只是基本原则和方向,实际上还是要看你要操作问题的瓶颈分析,是速度还是空间,把代码最佳化后再考虑是否要用平行计算等手段

    (2) 你这问题得区分数学和实证上要求的差异,希望你对过拟合(overfitting)及underfitting的实证及数学意义有所掌握,这里的问答还蛮不错的,读一下有帮助的。

    回复
    0
  • 取消回复