对于分类,我在MATLAB中为分类器构建了许多模型。我为此使用了类ClassificationKNN
。
我非常希望在矩阵中存储多个模型(或此类的对象)。
通常,您可以使用花括号({})在矩阵内访问和创建矩阵。
我的循环看起来像这样:
models = []
for i = 1:length(x)
models = [models, {ClassificationKNN.fit(x,y)}]
end
不幸的是,这会返回一个大小为(1,3)的矩阵模型,但所有单元格都是空的,这意味着模型丢失了......
如何确保每个模型都存储在矩阵中?我需要这样做,因为我在计算后期需要所有模型,矩阵中的位置很重要...
有什么想法吗?
答案 0 :(得分:0)
你想要一个模型的单元格数组,对吗?它看起来确实如此,如果可以的话试试这个:
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
但是,无论哪种方式都可能没问题。
答案 1 :(得分:0)
感谢macduffs帖子,我终于弄清楚发生了什么。在阅读他的命题的同时,我意识到如果获得一个对象的单元格数组,那确实应该是正确的方法。
尝试之后,在变量编辑器中打开数组时,数组似乎再次显示为空。我试着调用数组中的第一个单元格来查看它是否确实是空的而事实并非如此。它返回了我存储在其中的对象。这意味着问题得到了解答。
然后我回到我自己的方法,看看它是否运作良好,它做到了。在调用单元格时,它还返回了一个对象。
底线: 不要相信变量编辑器^^。