如何实现数据我必须在MATLAB中使用svmtrain()函数?

时间:2014-06-27 21:58:04

标签: matlab svm

我必须使用MATLAB编写一个脚本,它将对我的数据进行分类。

我的数据包含1051个网页(行)和11000多个单词(列)。我在每个页面的矩阵中都有“出现”一词。前230行是关于计算机科学课程(用+1标记),剩下的821不是(用-1标记)。我将自己标记这些行的一部分(比如30行)。然后SVM将标记剩余的未标记行。

我发现我可以使用MATLAB的svmtrain()svmclassify()方法来解决我的问题。首先,我需要创建SVMStruct

SVMStruct = svmtrain(Training,Group)

然后我需要使用

Group = svmclassify(SVMStruct,Sample)

但我不知道TrainingGroup是什么。对于Group Mathworks说:

  

分组变量,可以是分类,数字或逻辑   向量,字符串的单元格向量,或每行的字符矩阵   代表一个类标签。 Group的每个元素都指定了该组   相应的训练行。小组应该分开培训   分成两组。组具有相同数量的元素   训练中的行。 svmtrain处理每个NaN,空字符串或   '未定义'在Group中作为缺失值,并忽略相应的   一排训练。

对于Training,据说:

  

训练数据矩阵,其中每行对应一个观察   或复制,每列对应一个特征或变量。   svmtrain将训练中的NaN或空字符串视为缺失值   并忽略Group的相应行。

我想知道如何将我的数据用于TrainingGroup?我需要(至少)一些代码示例。

修改

我不明白的是,为了SVMStruct,我必须运行

SVMStruct = svmtrain(Training, Group);

并且为了让第一组必须运行

Group = svmclassify(SVMStruct,Sample);

此外,我仍然没有得到Sample应该是什么样的?

我很困惑。

1 个答案:

答案 0 :(得分:2)

Training将是一个包含1051行(网页/培训实例)和11000列(特征/单词)的矩阵。我假设你想测试网页上每个单词的存在?在这种情况下,如果对于给定网页存在单词,则可以将矩阵条目1输入,如果不存在,则可以0

您可以使用Training = zeros(1051,11000);初始化矩阵,但填写条目将取决于您,可能是您编写的其他代码。

Group是一维列向量,每个训练实例(网页)都有一个条目,而不是告诉您网页属于哪两个类。在您的情况下,您将使前230个条目成为计算机科学的“+1”,其余821个条目为“-1”表示不是。

Group = zeros(1051,1);  % gives you a matrix of zeros with 1051 rows and 1 column
Group(1:230) = 1;       % set first 230 entries to +1
Group(231:end) = -1;    % set the rest to -1