Python Scikit使用RandomForestClassifier学习记忆错误

Python Scikit使用RandomForestClassifier学习记忆错误,python,machine-learning,scikit-learn,scipy,random-forest,Python,Machine Learning,Scikit Learn,Scipy,Random Forest,我将在这里随教程一起介绍以下内容: 我有完全相同的代码,作者使用,但我仍将分享它下面 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 = shuff

我将在这里随教程一起介绍以下内容:

我有完全相同的代码,作者使用,但我仍将分享它下面

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))
我将资源监视器与之并行运行,并意识到我的已用内存从未超过30%。让我知道如何在不改变结果的情况下解决这个问题

X.shape=(732573072)

X_train.shape=(512793072)


我在这台机器上有16GB的RAM。

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

在这种情况下,我会做一些事情:

  • 在训练前减少功能的数量,因为数据是图像,每个列都只是像素值,也许你可以调整图像的大小

  • 将正则化添加到随机森林分类器中,例如,将
    max_depth
    设置为更小,或将
    max_特征设置为
    ,以便每次分割时,不考虑所有3072特征。以下是您可以调整的参数的完整列表:

  • 根据研究,设置
    n_jobs=1
    也可能有帮助

  • 最后,我个人不会使用随机森林进行图像分类。我会选择SVM之类的分类器,或者深入学习模型


  • X
    的大小/形状是多少?X.shape=(732573072)X_train.shape=(512793072)您还可以在补丁中进行增量训练。我可能需要更多地了解不同类型的分类器。调整图像的大小最终会降低模型的准确性,因为它们已经是相当低质量的图像。即使使用
    n_jobs=1
    max_depth=1
    ,以及
    max_features=10
    ,我也会得到错误。不同的分类器可能会更好地处理内存问题吗?@JackWalsh如果你在做任何与图像相关的事情,这实际上不是关于不同的分类器,而是关于图像功能本身,因为每个像素计数和图像都有这么多像素。最流行的数据集MNIST甚至有784个特征(28*28),而且它是一个非常小的图像。在我看来,用神经网络以外的任何方法进行图像分类都没有多大意义,除非你用传统的方法从图像中提取重要特征,例如HOG或其他。
    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