【问题标题】:Matlab: Matrix of ClassificationKNN class objectsMatlab:分类KNN类对象的矩阵
【发布时间】:2012-09-13 00:33:05
【问题描述】:

对于分类,我正在为 MATLAB 中的分类器构建多个模型。我为此使用ClassificationKNN 类。 我非常想在一个矩阵中存储多个模型(或此类的对象)。 通常,您可以使用花括号 ({}) 在矩阵内访问和创建矩阵。 我的循环如下所示:

models = []
for i = 1:length(x)
    models = [models, {ClassificationKNN.fit(x,y)}]
end

不幸的是,这会返回一个大小为 (1,3) 的矩阵模型,但所有单元格都是空的,这意味着模型丢失了...... 如何确保每个模型都存储在矩阵中?我需要这样做,因为我需要稍后在计算中使用所有模型,并且矩阵中的位置很重要...
有什么想法吗?

【问题讨论】:

  • 自从我使用 MATLAB 已经有一段时间了,所以我可能是错的,但是 [a,{b}] 语法让我很困扰。我可以稍后用谷歌搜索它,但我会先盯着它看。另外,如果你知道长度(x),总是预先分配你的矩阵,在循环中增长一个太慢了
  • 是的,预先分配矩阵是个好主意。我会再调查一下!

标签: class matlab object vector matrix


【解决方案1】:

感谢 macduffs 的帖子,我终于弄清楚发生了什么。在阅读他的提议时,我意识到如果获得对象的单元格数组,那确实应该是正确的方法。
尝试后,在变量编辑器中打开数组时再次显示为空。我尝试调用数组中的第一个单元格以查看它是否确实为空,而实际上不是。它返回了我存储在其中的对象。这意味着问题得到了回答。
然后我恢复到我自己的方法,看看它是否也有效并且确实有效。当调用一个单元格时,它也会返回一个对象。

底线: 不要相信变量编辑器^^。

【讨论】:

    【解决方案2】:

    您想要一个模型元胞数组,对吗?看起来确实是这样,如果可行,试试这个:

    models = {}
    for ii = 1:length(x)
        models = [models, {ClassificationKNN.fit(x,y)}]
    end
    

    此外,您每次都使用相同的参数循环调用ClassificationKNN.fit(x,y),这只是一个测试,还是示例的伪代码。正如评论所说,最好预先分配如下:

    models = cell(length(x),1);
    for ii = 1:length(x)
        models{ii} = ClassificationKNN.fit(x,y);
    end
    

    但是,无论哪种方式都可能没问题。

    【讨论】:

    • 我使用虚拟代码来进一步澄清我的问题,在实际代码中我每次使用不同的参数。
    猜你喜欢
    • 2015-07-13
    • 2015-04-13
    • 2014-11-14
    • 2012-01-15
    • 2016-02-05
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多