gpt4 book ai didi

python - 使用 RandomForestClassifier 的 Scikit-learn MemoryError

转载 作者:行者123 更新时间:2023-11-30 09:43:02 26 4
gpt4 key购买 nike

我正在按照这里的教程进行操作: https://blog.hyperiondev.com/index.php/2019/02/18/machine-learning/

我有与作者使用的完全相同的代码,但我仍然会在下面分享它......

train_data = scipy.io.loadmat('train_32x32.mat')
X = train_data['X']
y = train_data['y']

img_index = 24

X = X.reshape(X.shape[0]*X.shape[1]*X.shape[2],X.shape[3]).T
y = y.reshape(y.shape[0],)
X, y = shuffle(X, y, random_state=42)

clf = RandomForestClassifier(n_estimators=10, n_jobs=1)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
clf.fit(X_train, y_train) <-----------(MEMORY ERROR)

preds = clf.predict(X_test)
print("Accuracy:", accuracy_score(y_test,preds))

我使用的数据集基本上是数字和数字图片的字典。每次我到达上面指出的行时,我都会收到一个MemoryError。完整的错误回溯如下:

Traceback (most recent call last):
File "C:/Users/jack.walsh/Projects/img_recog/main.py", line 22, in <module>
clf.fit(X_train, y_train)
File "C:\Users\jack.walsh\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sklearn\ensemble\forest.py", line 249, in fit
X = check_array(X, accept_sparse="csc", dtype=DTYPE)
File "C:\Users\jack.walsh\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sklearn\utils\validation.py", line 496, in check_array
array = np.asarray(array, dtype=dtype, order=order)
File "C:\Users\jack.walsh\AppData\Local\Programs\Python\Python37-32\lib\site-packages\numpy\core\numeric.py", line 538, in asarray
return array(a, dtype, copy=False, order=order)
MemoryError

我同时运行了资源监视器,并意识到我的已用内存从未超过 30%。让我知道如何在不改变结果的情况下解决这个问题!

X.shape = (73257, 3072)

X_train.shape = (51279, 3072)

我的这台机器有 16GB RAM。

最佳答案

鉴于您的数据集有 3072 列(对于图像来说是合理的),我只是认为它对于随机森林来说太过载了,特别是当您没有对分类器应用正则化时。机器根本没有足够的内存来分配如此巨大的模型。

在这种情况下我会做的事情:

  1. 在训练之前减少特征数量,这很难做到,因为您的数据是图像,每列只是一个像素值,也许您可​​以将图像大小调整得更小。

  2. 为您的随机森林分类器添加正则化,例如,将 max_depth 设置得更小或设置 max_features 以便每次分割时,不是所有 3072 个特征被考虑。以下是您可以调整的参数的完整列表:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

  3. 根据Scikit Learn RandomForest Memory Error ,设置 n_jobs=1 也可能有帮助。

  4. 最后,我个人不会使用随机森林进行图像分类。我会选择 SVM 等分类器,或者深入研究深度学习模型。

关于python - 使用 RandomForestClassifier 的 Scikit-learn MemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56484351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com