我有一个包含 13 个属性的数据集,其中有些是分类的,有些是连续的(可以转换为分类的)。我需要使用逻辑回归来创建一个模型来预测一行的响应并找到预测的准确性、敏感性和特异性。
- 我可以/应该使用交叉验证来划分我的数据集并获得结果吗?
- 是否有关于如何执行此操作的代码示例?(我对这一切都很陌生)
- 我应该使用 mnrfit/mnrval 还是 glmfit/glmval?有什么区别,我该如何选择?
谢谢!
我有一个包含 13 个属性的数据集,其中有些是分类的,有些是连续的(可以转换为分类的)。我需要使用逻辑回归来创建一个模型来预测一行的响应并找到预测的准确性、敏感性和特异性。
谢谢!
如果您想确定模型预测未知数据的能力,您可以使用交叉验证。在 Matlab 中,您可以使用 glmfit 来拟合逻辑回归模型并使用 glmval 对其进行测试。
这是一个说明如何执行此操作的 Matlab 代码示例,其中 X 是特征矩阵,Labels 是每种情况的类标签,num_shuffles 是交叉验证的重复次数,而 num_folds 是折叠次数:
for j = 1:num_shuffles
indices = crossvalind('Kfold',Labels,num_folds);
for i = 1:num_folds
test = (indices == i); train = ~test;
[b,dev,stats] = glmfit(X(train,:),Labels(train),'binomial','logit'); % Logistic regression
Fit(j,i) = glmval(b,X(test,:),'logit')';
end
end
拟合然后是每个测试折叠的拟合逻辑回归估计。对此进行阈值化将产生对每个测试用例的预测类别的估计。然后通过将预测的类标签与实际类标签进行比较来计算性能度量。对所有折叠和重复的性能度量进行平均,可以估计模型在看不见的数据上的性能。