模型训练遇到数据量太大而导致内存不够问题?今天教你一招
在比赛和工作中,我们经常会遇到数据量太大而导致内存不够的问题。这里可以细分为两种情况:
情况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
方法。
在使用过程中需要考虑处理数据集为多批次的过程,需要考虑批大小和批个数,同时也需要考虑对最终精度的影响。
与使用全量数据的处理相比,使用迭代训练和处理在效果和精度上可能会稍差,但可以在内存有限的情况下使用。
模型训练遇到数据量太大而导致内存不够问题?今天教你一招相关推荐
- 接口数据量太大,导致内存溢出,解决办法
通常我们使用接口调用数据总是返回一段我们需要的信息,或者是json 格式信息,通过接收将数据保存到程序当中,再对接收到的数据进行转换成对应的模型格式 .目前遇到的问题是接收的数据量过于巨大,导致完整接 ...
- vue el-select数据量太大,导致浏览器崩溃解决办法
下拉数据量太大,浏览器单线程渲染时间较长,会导致浏览器崩溃.为了解决这一问题,可以采用懒加载形式,完美解决 <el-col :span="24"><el-form ...
- for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题
问题描述: 笔者在文本分类场景中使用了roberta+pool+dense的三分类模型.采用预训练模型做项目的时候经常苦于数据太少,模型泛化性差,因此收集了1300W数据.在我尝试暴力出奇迹的时候,遇 ...
- R语言使用hexbin包的hexbin函数可视化散点图、应对数据量太大、且有数据重叠的情况、普通散点图可视化效果变差的情况、提供了对六边形单元格的二元绑定、通过图例颜色标定每一个区域数据点的数量
R语言使用hexbin包的hexbin函数可视化散点图.应对数据量太大.且有数据重叠的情况.普通散点图可视化效果变差的情况.hexbin函数提供了对六边形单元格的二元绑定.通过图例颜色标定每一个区域数 ...
- 如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法?
如何判断你的数据集是否适合使用深度学习模型?如果数据量太小有什么解决办法? deep learning is a data hungry problem 数据集太小,数据样本不足时,深度学习相对其它机 ...
- Matlab曲线图导出eps数据量太大占用很多存储空间
Matlab曲线图导出eps数据量太大占用很多存储空间 我的Figure是从simulink里的scope里导出的,因为是采样率很高的时域波形,所以数据量很大.从Figure里导出eps向量格式的话, ...
- 当txt文件或者sql文件数据量太大,无法打开时,可以通过Emeditor这个编辑器打开
当txt文件或者sql文件数据量太大,无法打开时,可以通过Emeditor这个编辑器打开,进行处理和编辑. Emeditor 这个软件,可以在占用小部分内存的情况下,快速打开,数据量大的txt或者sq ...
- vue+cesium cesium数据量太大导致浏览器卡顿解决办法
vue+cesium cesium数据量太大 导致浏览器卡顿 解决办法 解决方案 : 不要把任何的cesium对象 放在data中监听,因为在data中的变量 , vue会劫持数据 , 导致迟缓. 解 ...
- python not defined怎么解决_数据量太大?散点图装不下怎么办?用Python解决数据密度过大难题
当我们需要观察比较2个变量间的关系时,散点图是我们首选图表. 可当数据量非常大,数据点又比较集中在某个区间中,图表没法看,密密麻麻的怎么看? 怎么办?这时候就得看密度图了 什么是密度图? 所谓的密度图 ...
最新文章
- Java教程分享:JVM垃圾回收机制之对象回收算法
- MySQL 和 Oracle 主键自增长
- 利用WiFi Pineapple Nano渗透客户端获取SHELL
- 优集品 php,从细节处着眼 优集品打造成人世界的儿童节
- linux系统中变量,Linux系统中的环境变量知识详解
- android接口类命名规范_超全面的UI基础设计规范来啦,还不收藏 ~
- java scjp 试题_JAVA认证历年真题:SCJP考试真题和解析
- Restore IP Address-深度优先遍历DFS
- C语言(郝斌)内容整理
- 用ajax实现图片上传 帮你简单快速学会使用
- Linux系统管理---linux用户管理
- 1、mysql创建事件
- 美食app的UI设计
- java远控_基于java的远程控制 示例源码
- NETDMIS5.0对有CAD模型的工件运用“3-2-1”法建立零件坐标2023
- JAVA获取字符串首字拼音和全拼
- 获取客户端真实IP方法
- cad批量选择相同块_[转载]CAD-快速选择相同或类似的物体、图元、块
- ntpdate离线安装
- Spring入门(二):自动化装配bean