使用 MultivariateStats 在 Julia 上进行 LDA
LDA on Julia using MultivariateStats
我正在使用 Brunton & Kutz 的书“数据驱动科学与工程”学习分类方法,但我并没有只使用 MATLAB 和 Python 代码资源,而是使用 Julia 重写了教科书示例, 因为是我的主要编程语言。
我无法找到为什么将 MulticlassLDA 模型拟合到数据不起作用,它 returns 一个 DimensionMismatch("Inconsistent array sizes.")
,但据我所知,我的数组已分派到拟合功能如文档中所示。
这是我的代码:
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,2:2:4],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中的评论:
All methods implemented in this package adopt the column-major convention of JuliaStats: in a data matrix, each column corresponds to a sample/observation, while each row corresponds to a feature (variable or attribute).
以及关于 y
参数的解释以适应 https://multivariatestatsjl.readthedocs.io/en/stable/mclda.html#data-analysis:
y
– the vector of class labels, of length n
. Each element of y
must be an integer between 1
and nc
.
希望对您有所帮助。
我正在使用 Brunton & Kutz 的书“数据驱动科学与工程”学习分类方法,但我并没有只使用 MATLAB 和 Python 代码资源,而是使用 Julia 重写了教科书示例, 因为是我的主要编程语言。
我无法找到为什么将 MulticlassLDA 模型拟合到数据不起作用,它 returns 一个 DimensionMismatch("Inconsistent array sizes.")
,但据我所知,我的数组已分派到拟合功能如文档中所示。
这是我的代码:
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,2:2:4],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中的评论:
All methods implemented in this package adopt the column-major convention of JuliaStats: in a data matrix, each column corresponds to a sample/observation, while each row corresponds to a feature (variable or attribute).
以及关于 y
参数的解释以适应 https://multivariatestatsjl.readthedocs.io/en/stable/mclda.html#data-analysis:
y
– the vector of class labels, of lengthn
. Each element ofy
must be an integer between1
andnc
.
希望对您有所帮助。