Julia SVM支持向量机

关注微信公共号:小程在线

关注CSDN博客:程志伟的博客

 

1.加载包

(@v1.4) pkg> add LIBSVM
   Updating registry at `C:\Users\cheng\.julia\registries\General`
   Updating git-repo `https://github.com/JuliaRegistries/General.git`
  Resolving package versions...
  Installed MbedTLS_jll ──── v2.16.6+1
  Installed LIBSVM ───────── v0.4.0
  Installed OpenBLAS_jll ─── v0.3.9+5
  Installed Fontconfig_jll ─ v2.13.1+12
  Installed LIBLINEAR ────── v0.5.1
   Updating `C:\Users\cheng\.julia\environments\v1.4\Project.toml`
  [b1bec4e5] + LIBSVM v0.4.0
   Updating `C:\Users\cheng\.julia\environments\v1.4\Manifest.toml`
  [a3f928ae] ↑ Fontconfig_jll v2.13.1+11 ⇒ v2.13.1+12
  [2d691ee1] + LIBLINEAR v0.5.1
  [b1bec4e5] + LIBSVM v0.4.0
  [c8ffd9c3] ↑ MbedTLS_jll v2.16.6+0 ⇒ v2.16.6+1
  [4536629a] ↑ OpenBLAS_jll v0.3.9+4 ⇒ v0.3.9+5
   Building LIBLINEAR → `C:\Users\cheng\.julia\packages\LIBLINEAR\yTdp5\deps\build.log`
   Building LIBSVM ───→ `C:\Users\cheng\.julia\packages\LIBSVM\5Z99T\deps\build.log`

(@v1.4) pkg> ^C

 

2.加载数据集

julia> using RDatasets

julia> iris = dataset("datasets","iris")
150×5 DataFrame
│ Row │ SepalLength │ SepalWidth │ PetalLength │ PetalWidth │ Species   │
│     │ Float64     │ Float64    │ Float64     │ Float64    │ Cat…      │
├─────┼─────────────┼────────────┼─────────────┼────────────┼───────────┤
│ 1   │ 5.1         │ 3.5        │ 1.4         │ 0.2        │ setosa    │
│ 2   │ 4.9         │ 3.0        │ 1.4         │ 0.2        │ setosa    │
│ 3   │ 4.7         │ 3.2        │ 1.3         │ 0.2        │ setosa    │
│ 4   │ 4.6         │ 3.1        │ 1.5         │ 0.2        │ setosa    │
│ 5   │ 5.0         │ 3.6        │ 1.4         │ 0.2        │ setosa    │
│ 6   │ 5.4         │ 3.9        │ 1.7         │ 0.4        │ setosa    │
│ 7   │ 4.6         │ 3.4        │ 1.4         │ 0.3        │ setosa    │
│ 8   │ 5.0         │ 3.4        │ 1.5         │ 0.2        │ setosa    │
│ 9   │ 4.4         │ 2.9        │ 1.4         │ 0.2        │ setosa    │
│ 10  │ 4.9         │ 3.1        │ 1.5         │ 0.1        │ setosa    │

│ 140 │ 6.9         │ 3.1        │ 5.4         │ 2.1        │ virginica │
│ 141 │ 6.7         │ 3.1        │ 5.6         │ 2.4        │ virginica │
│ 142 │ 6.9         │ 3.1        │ 5.1         │ 2.3        │ virginica │
│ 143 │ 5.8         │ 2.7        │ 5.1         │ 1.9        │ virginica │
│ 144 │ 6.8         │ 3.2        │ 5.9         │ 2.3        │ virginica │
│ 145 │ 6.7         │ 3.3        │ 5.7         │ 2.5        │ virginica │
│ 146 │ 6.7         │ 3.0        │ 5.2         │ 2.3        │ virginica │
│ 147 │ 6.3         │ 2.5        │ 5.0         │ 1.9        │ virginica │
│ 148 │ 6.5         │ 3.0        │ 5.2         │ 2.0        │ virginica │
│ 149 │ 6.2         │ 3.4        │ 5.4         │ 2.3        │ virginica │
│ 150 │ 5.9         │ 3.0        │ 5.1         │ 1.8        │ virginica │

 

3.将数据与标签分开

julia> features = convert(Array,iris[:,1:4])
150×4 Array{Float64,2}:
 5.1  3.5  1.4  0.2
 4.9  3.0  1.4  0.2
 4.7  3.2  1.3  0.2
 4.6  3.1  1.5  0.2
 5.0  3.6  1.4  0.2
 5.4  3.9  1.7  0.4
 4.6  3.4  1.4  0.3
 5.0  3.4  1.5  0.2
 4.4  2.9  1.4  0.2
 4.9  3.1  1.5  0.1
 5.4  3.7  1.5  0.2
 4.8  3.4  1.6  0.2
 4.8  3.0  1.4  0.1
 ⋮
 6.0  3.0  4.8  1.8
 6.9  3.1  5.4  2.1
 6.7  3.1  5.6  2.4
 6.9  3.1  5.1  2.3
 5.8  2.7  5.1  1.9
 6.8  3.2  5.9  2.3
 6.7  3.3  5.7  2.5
 6.7  3.0  5.2  2.3
 6.3  2.5  5.0  1.9
 6.5  3.0  5.2  2.0
 6.2  3.4  5.4  2.3
 5.9  3.0  5.1  1.8

julia> labels = convert(Array,iris[:,5])
150-element Array{String,1}:
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 "setosa"
 ⋮
 "virginica"
 "virginica"
 "virginica"
 "virginica"
 "virginica"
 "virginica"
 "virginica"
 "virginica"
 "virginica"
 "virginica"
 "virginica"
 "virginica"

 

4.创建训练集与测试集

julia> features_train,features_test = features[1:2:end,:],features[2:2:end,:]
([5.1 3.5 1.4 0.2; 4.7 3.2 1.3 0.2; … ; 6.3 2.5 5.0 1.9; 6.2 3.4 5.4 2.3], [4.9 3.0 1.4 0.2; 4.6 3.1 1.5 0.2; … ; 6.5 3.0 5.2 2.0; 5.9 3.0 5.1 1.8])

julia> labels_train,lables_test = labels[1:2:end],labels[2:2:end]
(["setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa"  …  "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica"], ["setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa"  …  "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica"])

 

5.建立模型

julia> using LIBSVM
[ Info: Precompiling LIBSVM [b1bec4e5-fd48-53fe-b0cb-9723c09d164b]

julia> model = svmtrain(features_train',labels_train)
LIBSVM.SVM{String}(SVC, LIBSVM.Kernel.RadialBasis, nothing, 4, 3, ["setosa", "versicolor", "virginica"], Int32[1, 2, 3], Float64[], Int32[], LIBSVM.SupportVectors{String,Float64}(30, Int32[5, 13, 12], ["setosa", "setosa", "setosa", "setosa", "setosa", "versicolor", "versicolor", "versicolor", "versicolor", "versicolor"  …  "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica"], [4.4 5.8 … 5.8 6.3; 2.9 4.0 … 2.7 2.5; 1.4 1.2 … 5.1 5.0; 0.2 0.2 … 1.9 1.9], Int32[5, 8, 10, 13, 23, 26, 27, 28, 29, 31  …  56, 57, 58, 59, 60, 64, 68, 70, 72, 74], LIBSVM.SVMNode[LIBSVM.SVMNode(1, 4.4), LIBSVM.SVMNode(1, 5.8), LIBSVM.SVMNode(1, 5.7), LIBSVM.SVMNode(1, 4.8), LIBSVM.SVMNode(1, 5.1), LIBSVM.SVMNode(1, 7.0), LIBSVM.SVMNode(1, 6.9), LIBSVM.SVMNode(1, 6.5), LIBSVM.SVMNode(1, 6.3), LIBSVM.SVMNode(1, 5.0)  …  LIBSVM.SVMNode(1, 6.5), LIBSVM.SVMNode(1, 6.8), LIBSVM.SVMNode(1, 5.8), LIBSVM.SVMNode(1, 6.5), LIBSVM.SVMNode(1, 7.7), LIBSVM.SVMNode(1, 6.2), LIBSVM.SVMNode(1, 6.1), LIBSVM.SVMNode(1, 6.0), LIBSVM.SVMNode(1, 5.8), LIBSVM.SVMNode(1, 6.3)]), 0.0, [0.8070380364343522 0.8047780005392675; 0.0 0.741676866696239; … ; -0.0 -1.0; -0.0 -1.0], Float64[], Float64[], [0.12550506116227908, 0.21415319269230185, -0.07664844428517169], 3, 0.25, 200.0, 0.001, 1.0, 0.5, 0.1, true, false)

 

6.对测试集进行预测

julia> (predicted_labels,decision_values) = svmpredict(model,features_test')
(["setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa", "setosa"  …  "virginica", "versicolor", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica", "virginica"], [1.0795373127217927 1.076285347307982 … -0.8977486201494332 -0.9364766069276098; 1.1004210525961036 1.0767138900115194 … -1.0382989966396097 -1.0734485152396267; 0.26369235850072076 0.2543044167727957 … -0.5718494685608961 -0.31568093085243765])

 

7.统计准确度

julia> using Statistics

julia> mean(predicted_labels .==lables_test)*1.0
0.9333333333333333

julia> predicted_labels .==lables_test
75-element BitArray{1}:
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 ⋮
 0
 1
 1
 0
 1
 1
 1
 1
 1
 1
 1
 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值