【问题标题】:How to implement data I have to svmtrain() function in MATLAB?如何在 MATLAB 中实现我必须使用 svmtrain() 函数的数据?
【发布时间】:2014-08-19 03:02:39
【问题描述】:

我必须使用 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 中的 'undefined' 作为缺失值,并忽略相应的 训练行。

对于Training,据说:

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

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

编辑

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

SVMStruct = svmtrain(Training, Group);

为了拥有组我必须运行

Group = svmclassify(SVMStruct,Sample);

另外我还是没明白Sample应该是什么样子?

我很困惑。

【问题讨论】:

    标签: matlab svm


    【解决方案1】:

    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
    

    【讨论】:

    • svmtrain() 是算法中的学习步骤。 Training 是您的训练数据,Group 是该训练数据的标签。生成的SVMstruct 是您学习的所有参数的集合,它们都存储在一个名称下(您可以通过在工作区窗口中双击它来查看它包含的内容)。 SVMclassify() 是您放入名为 Sample未标记 数据的位置,供您的算法进行分类。 svmclassify()Sample 放入您的模型并输出(希望是正确的)标签 Group,这与第一个 不同 Group
    • 你能帮我吗?非常感谢stackoverflow.com/questions/65449934/…
    猜你喜欢
    • 2014-10-24
    • 2012-11-28
    • 1970-01-01
    • 2015-07-31
    • 2010-12-02
    • 2011-12-22
    • 2014-06-21
    • 2013-03-15
    相关资源
    最近更新 更多