在比赛和工作中,我们经常会遇到数据量太大而导致内存不够的问题。这里可以细分为两种情况:

  • 情况1:数据太大,无法加载到内存;

  • 情况2:加载数据但训练时内存不够;

针对情况1可以考虑使用Spark或者Dask来逐步完成计算。对于情况2,则需要考虑从模型的角度入手。

本文将介绍在sklearn中支持迭代训练的模型,然后展示相关的代码案例。喜欢本文记得收藏、点赞。

文章目录

  • 模块划分
  • 分类案例
  • 聚类案例
  • 预处理案例
  • 降维案例
  • 使用总结

模块划分

sklearn中的多个模块都支持迭代进行训练 & 拟合,如果按照模块进行划分汇总如下:

# 线性模型
sklearn.linear_model.LogisticRegression
sklearn.linear_model.LogisticRegressionCV
sklearn.linear_model.PassiveAggressiveClassifier
sklearn.linear_model.PassiveAggressiveRegressor
sklearn.linear_model.Perceptron
sklearn.linear_model.SGDClassifier
sklearn.linear_model.SGDOneClassSVM
sklearn.linear_model.SGDRegressor# 贝叶斯模型
sklearn.naive_bayes.BernoulliNB
sklearn.naive_bayes.CategoricalNB
sklearn.naive_bayes.ComplementNB
sklearn.naive_bayes.GaussianNB
sklearn.naive_bayes.MultinomialNB# SVM模型
sklearn.svm.LinearSVC# 神经网络
sklearn.neural_network.BernoulliRBM
sklearn.neural_network.MLPClassifier
sklearn.neural_network.MLPRegressor# 多分类 & 多输出模型
sklearn.multiclass.OneVsOneClassifier
sklearn.multiclass.OneVsRestClassifier
sklearn.multioutput.MultiOutputClassifier
sklearn.multioutput.MultiOutputRegressor# 特征提取 & 特征筛选
sklearn.feature_extraction.text.HashingVectorizer
sklearn.feature_selection.SelectFromModel# 数据预处理
sklearn.preprocessing.MaxAbsScaler
sklearn.preprocessing.MinMaxScaler
sklearn.preprocessing.StandardScaler

这里支持的模块有什么共同点呢?主要是他们都支持partial_fit方法,也就是多次训练的过程。

更多的介绍可以参考:https://scikit-learn.org/stable/search.html?q=partial_fit

分类案例

首先我们构建一个样例数据集,并将数据转换为多批量的形式,这里批量可以自定义,可以写在循环内部,也可以提前对数据维度进行转换。

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDClassifier# 产生数据集
X, Y = datasets.make_classification(n_samples=32000, n_features=30, n_informative=20, n_classes=2)
# 划分测试集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, train_size=0.9, random_state=123)# 将数据集组织成批量的形式
X_train, X_test = X_train.reshape(-1,32,30), X_test.reshape(-1,32,30)
Y_train, Y_test = Y_train.reshape(-1,32), Y_test.reshape(-1,32)# 加载模型
classifier = SGDClassifier(random_state=123)
# 迭代训练,epoch维度
epochs = 10
for k in range(epochs):# 迭代训练,batch维度for i in range(X_train.shape[0]):X_batch, Y_batch = X_train[i], Y_train[i]classifier.partial_fit(X_batch, Y_batch, classes=list(range(2)))

聚类案例

与分类案例类似,我们首先需要构建一个聚类数据集,然后转换维度。

from sklearn.cluster import MiniBatchKMeans# 加载模型
clustering_algo = MiniBatchKMeans(n_clusters=5, random_state=123)
# 迭代训练,epoch维度
epochs = 10
for k in range(epochs):# 迭代训练,batch维度for i in range(X_train.shape[0]):X_batch, Y_batch = X_train[i], Y_train[i]clustering_algo.partial_fit(X_batch, Y_batch)

预处理案例

与分类案例类似,我们首先需要构建一个预处理数据集,然后转换维度。

from sklearn.preprocessing import StandardScaler# 加载预处理方法
scaler = StandardScaler()
# 迭代,epoch维度
for i in range(X_train.shape[0]):# 迭代,batch维度X_batch, Y_batch = X_train[i], Y_train[i]scaler.partial_fit(X_batch, Y_batch)

降维案例

与分类案例类似,我们首先需要构建一个待降维数据集,然后转换维度。

from sklearn.decomposition import IncrementalPCA# 加载降维方法
pca = IncrementalPCA(n_components=20)
# 迭代,epoch维度
for i in range(X_train.shape[0]):# 迭代,batch维度X_batch, Y_batch = X_train[i], Y_train[i]pca.partial_fit(X_batch, Y_batch) ## Partially fitting data in batches

使用总结

sklearn中不少模块支持迭代训练和处理,特点是这些模块包含partial_fit方法。

在使用过程中需要考虑处理数据集为多批次的过程,需要考虑批大小和批个数,同时也需要考虑对最终精度的影响。

与使用全量数据的处理相比,使用迭代训练和处理在效果和精度上可能会稍差,但可以在内存有限的情况下使用。

模型训练遇到数据量太大而导致内存不够问题?今天教你一招相关推荐

  1. 接口数据量太大,导致内存溢出,解决办法

    通常我们使用接口调用数据总是返回一段我们需要的信息,或者是json 格式信息,通过接收将数据保存到程序当中,再对接收到的数据进行转换成对应的模型格式 .目前遇到的问题是接收的数据量过于巨大,导致完整接 ...

  2. vue el-select数据量太大,导致浏览器崩溃解决办法

    下拉数据量太大,浏览器单线程渲染时间较长,会导致浏览器崩溃.为了解决这一问题,可以采用懒加载形式,完美解决 <el-col :span="24"><el-form ...

  3. for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题

    问题描述: 笔者在文本分类场景中使用了roberta+pool+dense的三分类模型.采用预训练模型做项目的时候经常苦于数据太少,模型泛化性差,因此收集了1300W数据.在我尝试暴力出奇迹的时候,遇 ...

  4. R语言使用hexbin包的hexbin函数可视化散点图、应对数据量太大、且有数据重叠的情况、普通散点图可视化效果变差的情况、提供了对六边形单元格的二元绑定、通过图例颜色标定每一个区域数据点的数量

    R语言使用hexbin包的hexbin函数可视化散点图.应对数据量太大.且有数据重叠的情况.普通散点图可视化效果变差的情况.hexbin函数提供了对六边形单元格的二元绑定.通过图例颜色标定每一个区域数 ...

  5. 如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法?

    如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法? deep learning is a data hungry problem 数据集太小,数据样本不足时,深度学习相对其它机 ...

  6. Matlab曲线图导出eps数据量太大占用很多存储空间

    Matlab曲线图导出eps数据量太大占用很多存储空间 我的Figure是从simulink里的scope里导出的,因为是采样率很高的时域波形,所以数据量很大.从Figure里导出eps向量格式的话, ...

  7. 当txt文件或者sql文件数据量太大,无法打开时,可以通过Emeditor这个编辑器打开

    当txt文件或者sql文件数据量太大,无法打开时,可以通过Emeditor这个编辑器打开,进行处理和编辑. Emeditor 这个软件,可以在占用小部分内存的情况下,快速打开,数据量大的txt或者sq ...

  8. vue+cesium cesium数据量太大导致浏览器卡顿解决办法

    vue+cesium cesium数据量太大 导致浏览器卡顿 解决办法 解决方案 : 不要把任何的cesium对象 放在data中监听,因为在data中的变量 , vue会劫持数据 , 导致迟缓. 解 ...

  9. python not defined怎么解决_数据量太大?散点图装不下怎么办?用Python解决数据密度过大难题

    当我们需要观察比较2个变量间的关系时,散点图是我们首选图表. 可当数据量非常大,数据点又比较集中在某个区间中,图表没法看,密密麻麻的怎么看? 怎么办?这时候就得看密度图了 什么是密度图? 所谓的密度图 ...

最新文章

  1. Java教程分享:JVM垃圾回收机制之对象回收算法
  2. MySQL 和 Oracle 主键自增长
  3. 利用WiFi Pineapple Nano渗透客户端获取SHELL
  4. 优集品 php,从细节处着眼 优集品打造成人世界的儿童节
  5. linux系统中变量,Linux系统中的环境变量知识详解
  6. android接口类命名规范_超全面的UI基础设计规范来啦,还不收藏 ~
  7. java scjp 试题_JAVA认证历年真题:SCJP考试真题和解析
  8. Restore IP Address-深度优先遍历DFS
  9. C语言(郝斌)内容整理
  10. 用ajax实现图片上传 帮你简单快速学会使用
  11. Linux系统管理---linux用户管理
  12. 1、mysql创建事件
  13. 美食app的UI设计
  14. java远控_基于java的远程控制 示例源码
  15. NETDMIS5.0对有CAD模型的工件运用“3-2-1”法建立零件坐标2023
  16. JAVA获取字符串首字拼音和全拼
  17. 获取客户端真实IP方法
  18. cad批量选择相同块_[转载]CAD-快速选择相同或类似的物体、图元、块
  19. ntpdate离线安装
  20. Spring入门(二):自动化装配bean

热门文章

  1. 树莓派人工智能小车基本操作流程展示
  2. 如何用互联网的模式在钢材传统行业中找到突破点
  3. 升级电脑再战10年!
  4. php ci csrf,CI的CSRF的改造
  5. Android 桌面角标的适配
  6. StarForce学习1-流程
  7. Microsoft Windows 恶意软件删除工具
  8. 武汉游戏公司android面试
  9. 网页设计(三)——DIV+CSS布局2
  10. dosbox上安装borlandc