问题描述
我正在使用 Brunton & Kutz 的“数据驱动科学与工程”一书学习分类方法,但我没有仅使用 MATLAB 和 Python 代码资源,而是使用 Julia 重写教科书示例,因为这是我的主要编程语言。
我不知道为什么将 MulticlassLDA 模型拟合到数据不起作用,它返回一个 DimensionMismatch("Inconsistent array sizes.")
,但据我所知,我的数组被分派到了文档中指示的 fit 函数.
这是我的代码:
using MAT,Linearalgebra,Statistics,MultivariateStats
# Load data in MATLAB format. Abailible in http://www.databookuw.com/
dogs = read(matopen("../DATA/dogData_w.mat"),"dog_wave")
cats = read(matopen("../DATA/catData_w.mat"),"cat_wave")
CD = hcat(dogs,cats)
u,s,v = svd(CD .- mean(CD)) #SVD decomposition
xtrain = vcat(v[1:60,2:2:4],v[81:140,2:2:4]) #training data array,dims 120x2
label = Int.(vcat(ones(60),-ones(60))) #label's vector,length 120
xtest = vcat(v[61:80,v[141:160,2:2:4])
classf= fit(MulticlassLDA,2,xtrain,label)
解决方法
您有两个问题可以通过这种方式解决:
label = [fill(1,60); fill(2,60)] # labels must range from 1 to n
fit(MulticlassLDA,2,permutedims(xtrain),label) # observations in xtrain must be stored in columns (not rows)
查看https://multivariatestatsjl.readthedocs.io/en/stable/index.html中的评论:
此包中实现的所有方法都采用 JuliaStats 的列优先约定:在数据矩阵中,每一列对应一个样本/观察,而每一行对应一个特征(变量或属性)。
以及关于适合 https://multivariatestatsjl.readthedocs.io/en/stable/mclda.html#data-analysis 的 y
参数的解释:
y
– 类别标签向量,长度为 n
。 y
的每个元素都必须是 1
和 nc
之间的整数。
我希望这会有所帮助。