我使用fminunc()来解决逻辑回归方法中相对较大的(30k X 16k作为训练数据)机器学习问题,但每次运行fminunc()时,它都会立即吃掉我的RAM并占用99%的CPU几个小时,我的笔记本电脑完全冻结了。 (我实际安装了8 G RAM)
可能存在类似的问题:MATLAB fminunc() not completing for large datasets,但它与我的情况有很大不同,分别如下:
我遵循他的决定性想法,将'LargeScale'设置为'Off',但是 不幸的是,这对我的案子不起作用。将'LargeScale'设置为 “开启”或“关闭”将导致相同的情况 - 正在运行 fminunc()导致我的机器瘫痪
我的数据集包含的功能多于功能(32k X 16k)
我的成本函数如下:
function [J, grad] = costFunction(theta, X, y)
[m, n] = size(X);
J = 1/m*sum( (-y).*log(sigmoid(X*theta)) - (1-y).*log(1-sigmoid(X*theta)) );
grad = 1/m*( X' * (sigmoid(X*theta)- y) );
end
我的预处理步骤和fminunc()函数如下:
...
% some script to preprocess data and create sparse matrix X as input ( X is 32769 * 16601 and
% containing only 0s or 1s); and y is the target column vector, containing only 0s or 1s; and initial_theta is a column
% vector of 0s
...
options = optimset('GradObj', 'on', 'MaxIter', 400);
[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
和sigmoid功能:
function g = sigmoid(z)
g = zeros(size(z));
g = exp(-z) + 1;
g = 1./g;
end
该数据集来自kaggle: Amazon.com - Employee Access Challenge的一个数据科学竞赛,我通过使用One Hot Encoding(功能是分类的)预处理了原始训练数据,并且功能从8扩展到16600,所以训练数据X是维度为32769 * 16601的稀疏矩阵(添加了一个1s的列向量)
我是机器学习的新手,也是Coursera用户。我接受了Andrew Ng教授的机器学习课程,所以我基于他的教学方法实施。我只是想知道是否有人可以告诉我为什么我的fminunc()在这种情况下如此慢并且非常耗费CPU。
8G RAM, 2.5GHz, Matlab R2014a
我还使用相同的数据集X,y和initial_theta分别测试了我的成本函数本身,并且成本函数本身的一个执行时间在0.002到0.02秒之间:
tic
[cost, grad] = costFunction(initial_theta, X, y)
Toc
我使用相同的训练数据(稀疏矩阵X)到python的Logistic回归分类器:model = linear_model.LogisticRegression,处理时间只用了一秒!
所以,
感谢任何建议!
谢谢,
Weimin