微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Julia 上的 LDA 使用 MultivariateStats

如何解决Julia 上的 LDA 使用 MultivariateStats

我正在使用 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-analysisy 参数的解释:

y – 类别标签向量,长度为 ny 的每个元素都必须是 1nc 之间的整数。

我希望这会有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。