做拍卖网站多少钱,管理手机网站模板,龙岩百度推广,地产政策最新消息葡萄酒数据集经常被用于机器学习、模式识别和统计分类算法的测试中。由于其特征维度较高#xff0c;非常适合于验证特征选择和降维方法#xff0c;例如主成分分析#xff08;PCA#xff09;或线性判别分析#xff08;LDA#xff09;的效果。同时#xff0c;由于数据集包…葡萄酒数据集经常被用于机器学习、模式识别和统计分类算法的测试中。由于其特征维度较高非常适合于验证特征选择和降维方法例如主成分分析PCA或线性判别分析LDA的效果。同时由于数据集包含多个分类它也经常被用作分类算法如决策树、随机森林、支持向量机等的标准测试集。
前篇我们讲述了用SVM做鸢尾花二分类识别器本篇我们用前篇相似的代码更换一个维度更高的数据进行测试。 葡萄酒分类葡萄酒数据集是另一个分类问题但特征数量增至13个。任务是根据化学组份将葡萄酒分为两个不同的类别。
数据示例用SVM做葡萄酒二分类识别器
问题和数据说明
这里数据截取自wine数据根据13维的描述数值识别葡萄酒的类别。由于本文讲述二分类我们在3种类别中选取两种类别标签变更为1和-1整理得到数据data/wine_data.csv。 部分数据如下
labelf1f2f3f4f5f6f7f8f9f10f11f12f13114.231.712.4315.61272.83.060.282.295.641.043.921065113.21.782.1411.21002.652.760.261.284.381.053.41050113.162.362.6718.61012.83.240.32.815.681.033.171185……………………………………-113.274.282.26201201.590.690.431.3510.20.591.56835-113.172.592.37201201.650.680.531.469.30.61.62840-114.134.12.7424.5962.050.760.561.359.20.611.6560
源码
MindOpt团队开发的代数建模语言MAPL(MindOpt Algebra Programming Language, MindOptAPL简称为MAPL)可以用来编码上面的问题并且调用求解器进行求解。 MAPL的V2.4版本上新了向量化建模的语法可以方便地实现矩阵的转置、矩阵乘法等功能详情。 完整代码如下:
clear model;####################################################
#
# Vectorization Modeling Example
# Linear SVM
#
####################################################option modelname svm_03; #定义存储文件名# ----------建模--------Start----
# svm_02.mapl# 1.读取iris的用于构建SVM模型的训练数据
param data_dir ./data/wine_data-train.csv;
param X read_csv( data_dir, use_col1,2,3,4,5,6,7,8,9,10,11,12,13,skip1);
param y read_csv( data_dir, use_col0,skip1);
param dataNum X.row;
param dataDim X.col;
print 总共有{}个数据每个数据有{}维%dataNum,dataDim;# 2.LinearSVM问题建模
param C_rho 0.2;
print Param C is :{}%C_rho;print Start modeling-------;var w(dataDim) -1 1; # Bounded Model Parameter
var b; #
var eps(dataNum) 0;minimize 1/2 * w * w C_rho * sum(eps); #是转置目标函数subto constraint:eps 1 - (X*w b).*y; #注意是向量化建模因此相当于多条维度的约束# 3.调用求解器求解
print Start solving-------;
option solver mindopt;
solve;# 4. 超平面的w取值
print - Optimal w is:;
print w;
print - Optimal b is:;
print b;
print - eps is:;
forall { i in 0..dataNum-1 with eps[i] 0.001}print - eps[{}] {} %i,eps[i];param obj_total_loss 1/2 * w * w C_rho * sum(eps); #是转置
print - obj of total loss is : {}%obj_total_loss;# 5.验证并分析结果print ;
print 验证结果-----;param correctNum sum{i in 0..dataNum-1} if((sum{j in 0..dataDim-1}w[j]*X[i, j]) b )* y[i] 0 then 1 else 0 end;
param precision correctNum / dataNum;
print - Precision for train data is : {:.2f} % precision;#
print ;
print 导入测试数据验证效果-----;param data_dir_test ./data/wine_data-test.csv;
param X_test read_csv( data_dir_test, use_col1,2,3,4,5,6,7,8,9,10,11,12,13,skip1);
param y_test read_csv( data_dir_test, use_col0,skip1);
param dataNum_test X_test.row;
param dataDim_test X_test.col;
print - 总共有{}个数据每个数据有{}维%dataNum_test,dataDim_test;print |测试数据ID|实际标签|SVM预测标签是|;
print |--|--|--|;
forall {i in 0..dataNum_test-1}
print |{}|{}|{}|%i,y_test[i], if((sum{j in 0..dataDim_test-1}w[j]*X_test[i, j]) b ) 0 then 1 else -1 end;运行上述代码结果如下
总共有87个数据每个数据有13维
Param C is :0.2
Start modeling-------
Start solving-------
Running mindoptampl
wantsol1
MindOpt Version 1.2.1 (Build date: 20240428)
Copyright (c) 2020-2024 Alibaba Cloud.Start license validation (current time : 29-APR-2024 17:51:15).
License validation terminated. Time : 0.007sModel summary.- Num. variables : 101- Num. constraints : 87- Num. nonzeros : 1305- Bound range : [1.0e00,1.0e00]- Quad. bound range : [1.0e00,1.0e00]- Objective range : [2.0e-01,2.0e-01]- Quad. obj. range : [1.0e00,1.0e00]- Matrix range : [1.7e-01,1.7e03]Presolver started.
Presolver terminated. Time : 0.001sInterior point method started.Iter PrimObj DualObj PrimFea DualFea GapFea Mu Time0 3.80399778e-01 -7.55707692e-01 1.9e-02 1.1e-02 1.1e00 4.6e-03 0.02s1 1.79640739e-01 -2.13996063e-01 8.2e-03 5.0e-03 3.9e-01 1.5e-03 0.03s2 1.17952681e-01 -1.13914883e-01 5.2e-03 2.0e-02 2.3e-01 7.1e-04 0.03s3 3.61389193e-02 -2.62084850e-02 1.5e-03 5.8e-03 6.2e-02 2.0e-04 0.04s4 3.41691834e-02 -2.09031242e-02 1.4e-03 5.1e-03 5.5e-02 1.9e-04 0.04s5 3.40036247e-02 5.83432924e-02 1.3e-03 2.2e-02 4.6e-02 2.3e-04 0.04s6 8.36408587e-02 -4.76077416e-01 8.4e-04 7.9e-02 5.6e-01 2.1e-04 0.04s7 1.25803855e-01 1.83665783e-01 5.0e-04 1.8e-02 5.8e-02 2.9e-04 0.05s8 2.08232448e-01 3.51342692e-01 1.1e-04 1.7e-02 1.4e-01 9.2e-05 0.05s9 2.24640702e-01 3.15349667e-01 5.2e-05 1.6e-02 9.1e-02 5.4e-05 0.05s10 2.38702568e-01 2.37176375e-01 1.4e-07 3.5e-04 2.6e-03 1.3e-05 0.05s11 2.36599665e-01 2.36546454e-01 4.5e-10 2.0e-06 6.0e-05 3.0e-07 0.05s12 2.36550609e-01 2.36550442e-01 1.2e-12 5.5e-09 1.8e-07 9.2e-10 0.06s13 2.36550464e-01 2.36550464e-01 1.5e-16 1.3e-11 4.3e-11 3.5e-14 0.06s
Terminated.- Method : Interior point method.- Primal objective : 2.3655046415330E-01- Dual objective : 2.3655046419623E-01- Num. threads : 4- Num. iterations : 13- Solver details : Solver terminated with a primal/dual optimal status.Interior point method terminated. Time : 0.046sOPTIMAL; objective 0.24
0 simplex iterationsCompleted.
- Optimal w is:
[[ 0.04857],[ 0.01247],[ 0.05512],[-0.13231],[ 0.02318],[ 0.27035],[ 0.46883],[-0.01722],[ 0.13966],[-0.17157],[ 0.06461],[ 0.32124],[ 0.00143]]
- Optimal b is:
-3.307435311971387
- eps is:
- obj of total loss is : 0.23655046415329972验证结果-----
- Precision for train data is : 1.00导入测试数据验证效果-----
- 总共有20个数据每个数据有13维
|测试数据ID|实际标签|SVM预测标签是|
|--|--|--|
|0|1|1|
|1|1|1|
|2|1|1|
|3|1|1|
|4|1|1|
|5|1|1|
|6|1|1|
|7|1|1|
|8|1|1|
|9|1|1|
|10|-1|-1|
|11|-1|-1|
|12|-1|-1|
|13|-1|-1|
|14|-1|-1|
|15|-1|-1|
|16|-1|-1|
|17|-1|-1|
|18|-1|-1|
|19|-1|-1|结果解析
运行结果如下 总共有87个数据每个数据有13维 Param C is :0.2 ……
Optimal w is: [[ 0.04857], [ 0.01247], [ 0.05512], [-0.13231], [ 0.02318], [ 0.27035], [ 0.46883], [-0.01722], [ 0.13966], [-0.17157], [ 0.06461], [ 0.32124], [ 0.00143]]Optimal b is: -3.3074353121126eps is:obj of total loss is : 0.23655046414945333
验证结果-----
Precision for train data is : 1.00
导入测试数据验证效果-----
总共有20个数据每个数据有13维
测试数据ID实际标签SVM预测标签是01111121131141151161171181191110-1-111-1-112-1-113-1-114-1-115-1-116-1-117-1-118-1-119-1-1 可以看到我们使用通用MindOpt求解器也能实现SVM“训练”葡萄酒的分类器。