Matlab中的Logistic回归,对结果感到困惑

时间:2013-09-20 12:36:21

标签: matlab machine-learning classification logistic-regression

我正在使用Matlab测试从音频文件创建的2个数据集中的逻辑回归:

  • 第一组是通过wavread通过提取每个文件的向量创建的:该组是834×48116矩阵。每个训练示例都是wav频率的48116向量。

  • 通过提取元音的3个共振峰的频率来创建第二组,其中每个共振峰(特征)具有其'频率范围(例如,F1范围是500-1500Hz,F2是1500-2000Hz等等)上)。每个训练样例都是wav的共振峰的3矢量。

我正在实现这样的算法:

成本函数和梯度:

h = sigmoid(X*theta);
J = sum(y'*log(h) + (1-y)'*log(1-h)) * -1/m;
grad = ((h-y)'*X)/m;

theta_partial =  theta;
theta_partial(1) = 0;

J = J + ((lambda/(2*m)) * (theta_partial'*theta_partial));
grad = grad + (lambda/m * theta_partial');

其中X是数据集,y是8个类的输出矩阵。

分类器:

 initial_theta = zeros(n + 1, 1);
    options = optimset('GradObj', 'on', 'MaxIter', 50);
    for c = 1:num_labels,
      [theta] = fmincg(@(t)(lrCostFunction(t, X, (y==c), lambda)), initial_theta, options);
      all_theta(c, :) = theta';
    end

其中num_labels = 8,lambda(正则化)为0.1

使用第一组,MaxIter = 50,我得到~99.8%的分类准确度。

第二组和MaxIter = 50时,准确性差 - 62.589928

我考虑过将MaxIter增加到更大的值以提高性能,但是,即使在非常多的迭代次数下,结果也不会高于66.546763。改变正则化值(lambda)似乎不会以任何更好的方式影响结果。

可能是什么问题?我是机器学习的新手,我似乎无法理解究竟是什么导致这种巨大的差异。显而易见的唯一原因是第一组的例子是非常长的向量,因此,更多的特征,第二组的例子用短的3向量表示。这些数据不足以对第二组进行分类吗?如果是这样,可以采取哪些措施来实现第二组更好的分类结果?

0 个答案:

没有答案