machine-learning - 我应该如何使用 julia 训练 SVM?

标签 machine-learning julia svm

有没有人有在 Julia (1.4.1) 中训练支持向量机 (SVM) 的经验?
我尝试了LIBSVM接口(interface),但是github页面上的示例给出了错误:

# Load Fisher's classic iris data
iris = dataset("datasets", "iris")
# LIBSVM handles multi-class data automatically using a one-against-one strategy
labels = convert(Vector, iris[:Species])
# First dimension of input data is features; second is instances
instances = convert(Array, iris[:, 1:4])'
# Train SVM on half of the data using default parameters. See documentation
# of svmtrain for options
model = svmtrain(instances[:, 1:2:end], labels[1:2:end]);```

ERROR: MethodError: no method matching LIBSVM.SupportVectors(::Int32, ::Array{Int32,1}, ::CategoricalArray{String,1,UInt8,String,CategoricalValue{String,UInt8},Union{}}, ::Array{Float64,2}, ::Array{Int32,1}, ::Array{LIBSVM.SVMNode,1})
Closest candidates are:
LIBSVM.SupportVectors(::Int32, ::Array{Int32,1}, ::Array{T,1}, ::AbstractArray{U,2}, ::Array{Int32,1}, ::Array{LIBSVM.SVMNode,1}) where {T, U} at /home/benny/.julia/packages/LIBSVM/5Z99T/src/LIBSVM.jl:18
LIBSVM.SupportVectors(::LIBSVM.SVMModel, ::Any, ::Any) at /home/benny/.julia/packages/LIBSVM/5Z99T/src/LIBSVM.jl:27 

最佳答案

看起来像 LIBSVM.jl文档相当过时,并且包没有适当更新,因此值得一个问题(或至少请求更新自述文件)。
您看到的错误与软件包本身无关,而是在当前版本的 DataFrames.jl 中有关。和 RDatasets.jl labels列不再是 Vector (就像开发 LIBSVM.jl 时一样)但是 CategoricalArray。您可以通过将 CategoricalArray 转换为通常的 Vector{String} 来避免此问题。 .完整的示例如下所示

using RDatasets, LIBSVM
using StatsBase, Printf # `mean` and `printf` are no longer in Base, and should be used explicitly

# Load Fisher's classic iris data
iris = dataset("datasets", "iris")

# LIBSVM handles multi-class data automatically using a one-against-one strategy
labels = string.(convert(Vector, iris[:Species]))

# First dimension of input data is features; second is instances
instances = convert(Array, iris[:, 1:4])'

# Train SVM on half of the data using default parameters. See documentation
# of svmtrain for options
model = svmtrain(instances[:, 1:2:end], labels[1:2:end]);

# Test model on the other half of the data.
(predicted_labels, decision_values) = svmpredict(model, instances[:, 2:2:end]);

# Compute accuracy
@printf "Accuracy: %.2f%%\n" mean((predicted_labels .== labels[2:2:end]))*100
或者,您可以使用 MLJ.jlScikitLearn.jl
它应该自己正确地包装 LIBSVM.jl。

关于machine-learning - 我应该如何使用 julia 训练 SVM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62594396/

相关文章:

arguments - 应该一个!函数返回什么?

arrays - 将 Nemo.jl 矩阵转换为普通 Julia 数组?

opencv - cv::SVM 对每个样本响应一类

machine-learning - 了解 LibSVM 中 SVM 参数的好资源

python - SVM Scikit-Learn : Why prediction time decrease with SVC when increasing parameter C?

java - 任何用于匹配名称的消歧工具/API?

android - 使用开源机器学习 Datumbox 框架

python - 处理过多的零

python - 解释 XGBoost 树的叶值以解决多类分类问题

Julia - 继续外循环