请问Matlab的libsvm工具箱如何进行多元回归?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问Matlab的libsvm工具箱如何进行多元回归?相关的知识,希望对你有一定的参考价值。

如题,不太会用这个工具箱,网上查的例子都是简单的一元回归,这个工具箱进行多元回归要怎么操作?
0.5 2 12 26 2 0.0476890000000000
0.5 3 14 28 4 0.0792965000000000
0.5 4 16 30 6 0.106723000000000
0.5 5 18 32 8 0.112500000000000
1 2 14 30 8 0.487650000000000
1 3 12 32 6 0.0955300000000000
1 4 18 26 4 0.336150000000000
1 5 16 28 2 0.202830000000000
1.5 2 16 32 4 1.18260000000000
1.5 3 12 30 2 0.273390000000000
1.5 4 18 28 8 0.784670200000000
1.5 5 14 26 6 0.487695000000000
2 2 18 28 6 1.41230000000000
2 3 16 26 8 0.934150000000000
2 4 14 32 2 0.181100000000000
2 5 12 30 4 1.08280000000000
前5列对应5个x,最后一列对应y,应该怎么怎么用libsvm工具箱进行回归得到回归函数?可以有偿加Q

参考技术A 这个问题其实非常地简单。
1、在Matlab里面先做这样一小段处理:

data = [
0.5 2 12 26 2 0.0476890000000000
0.5 3 14 28 4 0.0792965000000000
0.5 4 16 30 6 0.106723000000000
0.5 5 18 32 8 0.112500000000000
1 2 14 30 8 0.487650000000000
1 3 12 32 6 0.0955300000000000
1 4 18 26 4 0.336150000000000
1 5 16 28 2 0.202830000000000
1.5 2 16 32 4 1.18260000000000
1.5 3 12 30 2 0.273390000000000
1.5 4 18 28 8 0.784670200000000
1.5 5 14 26 6 0.487695000000000
2 2 18 28 6 1.41230000000000
2 3 16 26 8 0.934150000000000
2 4 14 32 2 0.181100000000000
2 5 12 30 4 1.08280000000000
];

x = data(:,1:end-1);
y = data(:,end);
% 上述处理即是将最后一列作为输出,前n-1列全部作为输入

2. 将 x, y 分别作为输入和输出放入svmtrain函数中训练
3. 再在svmpredict函数中输入x即可得出各个x对应的预测值y
注:这里的原理其实十分简单,在libsvm中其实也是将所有变量都默认为了向量(或矩阵),所以你只管输入的数据结构即可。追问

您好,可以留一下其他联系方式吗,有一些问题想问您,可以吗?

参考技术B 什么叫 多元回归

我的模型在 libsvm 工具箱 matlab 中预测所有正类到负类

【中文标题】我的模型在 libsvm 工具箱 matlab 中预测所有正类到负类【英文标题】:my model is predicting all positive class to negative class in libsvm toolbox matlab 【发布时间】:2013-02-19 05:26:40 【问题描述】:

我在 Matlab 中使用 libsvm 工具箱创建了一个分类器。它将所有正类数据分类为负类,反之亦然。我在进行交叉验证时得到了很好的结果,但是在测试一些数据时,我发现分类器的工作方式错误。我似乎无法弄清楚问题出在哪里。

谁能帮我解决这个问题。

【问题讨论】:

分类器的预测是否完全相反?如果是,那么这将是一个评估问题。 感谢您的回复。是的,它预测完全相反。请告诉我如何解决它。 这意味着训练中的类别0变成了类别1(错误地)。它只是一个评估问题。检查您是否在训练和测试中遵循了完全相同的协议。你会在某个地方发现错误。 非常感谢。我没有明白你所说的“协议”是什么意思。我检查了我的输入文件,它们没问题,我正在使用 matlab libsvm。在那里我只需要提供数据,剩下的就交给他们了。我只使用命令来训练数据集、创建模型、在该模型上测试数据集。在这里我应该提到,我使用相同的数据集进行训练和测试。例如,如果我使用 1-900 个实例进行训练,则使用其余 400 个实例进行测试。如果您能再帮我一些忙,我将不胜感激。我真的被困住了。 @syeda-firdaus:我理解正确吗:你的准确率正好是 0%? 【参考方案1】:

当第一个训练示例的(二进制)标签为 -1 时,这是 libsvm 先前版本的“功能”。最简单的解决方案是获取最新版本 (> 3.17)。

更多详情请看这里:http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f430

【讨论】:

这就是答案。谢谢【参考方案2】:

假设您有 500 个训练实例。 250 将是正数,其他为负数。现在在测试集中,与正例具有相同特征的实例将被预测为正例。但是,当您向 LIBSVM 提供测试标签(您必须提供测试标签以便 LIBSVM 可以计算准确性,它们显然不会用于预测算法)时,您已经提供了完全相反的标签(错误地)。所以你有一种感觉,你预测的标签已经完全相反了。因为对于二元分类问题,即使是随机分类器也有 50% 的准确率。

【讨论】:

非常感谢您的回复。我总共有 1600 个实例,443 个带有正面标签,其余的带有负面标签。从我使用 300 个阳性作为训练集和其余 143 个数据集进行测试的那些中。我保留了用于测试标签的数据。我使用 400 个负例进行训练,使用 200 个数据集进行测试。最后,当我使用所有 343 dbataset 进行测试时。所有正面和负面都已正确标记。经过测试,我得到了完全相反的结果。 like poisities 被预测为负数,反之亦然。请您进一步帮助我。

以上是关于请问Matlab的libsvm工具箱如何进行多元回归?的主要内容,如果未能解决你的问题,请参考以下文章

libsvm工具箱和lssvm工具箱有啥区别

如何在matlab里安装libsvm包

matlab 基于 libsvm工具箱的svm分类遇到的问题与解决

我的模型在 libsvm 工具箱 matlab 中预测所有正类到负类

解密SVM系列:matlab下libsvm的简单使用:分类与回归

如何在 Matlab 中使用 libsvm?