我正在 Matlab 中测试从音频文件创建的 2 个数据集的逻辑回归:
第一个集合是通过 wavread 通过提取每个文件的向量来创建的:该集合是 834 x 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 向量表示。这些数据还不足以对第二组进行分类吗?如果是这样,可以做些什么来为第二组获得更好的分类结果?