【发布时间】:2022-01-11 09:52:42
【问题描述】:
通常人们使用scikit-learn这样训练模型:
from sklearn.ensemble import GradientBoostingClassifier as gbc
clf = gbc()
clf.fit(X_train, y_train)
predicted = clf.predict(X_test)
只要用户的内存足够大以容纳整个数据集,它就可以正常工作。我的困境正是这个——数据集对我的记忆来说太大了。我目前的解决方案是扩大我机器的虚拟内存,而我已经因为拥有太多虚拟内存而使系统变得非常慢 - 所以我开始考虑是否可以在fit() 方法中输入样本像这样的批次(答案是否定的,请继续阅读并停止提醒我答案是否定的):
clf = gbc()
for i in range(X_train.shape[0]):
clf.fit(X_train[i], y_train[i])
这样我可以仅在需要时从硬盘读取训练集。我读了sklearn's manual,在我看来它不支持这个:
Calling fit() more than once will overwrite what was learned by any previous fit()
那么,这可能吗?
【问题讨论】:
-
我认为您需要为循环的每次迭代创建一个单独的 LinearRegression 类实例。
-
@njp emmm?我的理解是,假设我创建了多个 LinearRegression 实例,我将只使用一个样本来训练几个单独的模型......这不是我想要的......
-
您的建议不起作用。它只是在每次迭代时拟合一个新模型(具有不同的系数)
-
您是否在将完整数据集加载到内存时遇到问题,或者在拟合期间卡住了?
-
@StupidWolf 你是对的——正如官方手册和我的报价所示,我提出的代码行不通。所以问题是我是否有可能让它发挥作用。
标签: python scikit-learn