我必须使用MATLAB编写一个脚本,它将对我的数据进行分类。
我的数据包含1051个网页(行)和11000多个单词(列)。我在每个页面的矩阵中都有“出现”一词。前230行是关于计算机科学课程(用+1标记),剩下的821不是(用-1标记)。我将自己标记这些行的一部分(比如30行)。然后SVM将标记剩余的未标记行。
我发现我可以使用MATLAB的svmtrain()
和svmclassify()
方法来解决我的问题。首先,我需要创建SVMStruct
。
SVMStruct = svmtrain(Training,Group)
然后我需要使用
Group = svmclassify(SVMStruct,Sample)
但我不知道Training
和Group
是什么。对于Group
Mathworks说:
分组变量,可以是分类,数字或逻辑 向量,字符串的单元格向量,或每行的字符矩阵 代表一个类标签。 Group的每个元素都指定了该组 相应的训练行。小组应该分开培训 分成两组。组具有相同数量的元素 训练中的行。 svmtrain处理每个NaN,空字符串或 '未定义'在Group中作为缺失值,并忽略相应的 一排训练。
对于Training
,据说:
训练数据矩阵,其中每行对应一个观察 或复制,每列对应一个特征或变量。 svmtrain将训练中的NaN或空字符串视为缺失值 并忽略Group的相应行。
我想知道如何将我的数据用于Training
和Group
?我需要(至少)一些代码示例。
修改
我不明白的是,为了SVMStruct
,我必须运行
SVMStruct = svmtrain(Training, Group);
并且为了让第一组必须运行
Group = svmclassify(SVMStruct,Sample);
此外,我仍然没有得到Sample
应该是什么样的?
我很困惑。
答案 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