================训练语料==================
1 1:190 2:70
1 1:180 2:80
-1 1:161 2:80
-1 1:161 2:47
训练语料含义,两个分类(1:男生 -1:女生)
1 1:190 2:70 代表的含义是
1 男生
1 190第一维特征值 男生的身高为190厘米
2 70 第二维特征值 男生的体重为70kg
1 1:180 2:80
1 男生
1 180第一维特征值 男生的身高为180厘米
2 80 第二维特征值 男生的体重为80kg
-1 1:161 2:80
-1 女生
1 161第一维特征值 男生的身高为161厘米
2 80 第二维特征值 男生的体重为80kg
-1 1:161 2:47
-1 女生
1 161第一维特征值 男生的身高为161厘米
2 47 第二维特征值 男生的体重为47kg
===================判断分类===================
给定语句,判断类别,一个人身高是185cm,体重是85kg,问这个人是男生还是女生? ----> 1:185 2:85
给定语句,判断类别,一个人身高是161cm,体重是50kg,问这个人是男生还是女生? ----> -1 1:161 2:50
===代码-====
package cn.liip.dh.svm.根据语料判别;
import libsvm.svm;
import libsvm.svm_model;
import libsvm.svm_node;
import libsvm.svm_parameter;
import libsvm.svm_problem;
public class SVMForClassic{
public static void main(String[] args) {
svm_node t1_1 = new svm_node(); t1_1.index = 1; t1_1.value = 190;
svm_node t1_2 = new svm_node(); t1_2.index = 2; t1_2.value = 70;
svm_node[] t1 = {t1_1, t1_1}; //这个人的身高是190cm,体重是70kg
double t1_lable=1.0;//1.0对应的分类是男生,-1.0对应的是女生
svm_node t2_1 = new svm_node(); t2_1.index = 1; t2_1.value = 180;
svm_node t2_2 = new svm_node(); t2_2.index = 2; t2_2.value = 80;
svm_node[] t2 = {t2_1, t2_2}; //这个人的身高是180cm,体重是80kg
double t2_lable=1.0;//1.0对应的分类是男生,-1.0对应的是女生
svm_node t3_1 = new svm_node(); t3_1.index = 1; t3_1.value = 161;
svm_node t3_2 = new svm_node(); t3_2.index = 2; t3_2.value = 80;
svm_node[] t3 = {t3_1,t3_2}; //这个人的身高是161cm,体重是80kg
double t3_lable=-1.0;//1.0对应的分类是男生,-1.0对应的是女生
svm_node t4_1 = new svm_node(); t4_1.index = 1; t4_1.value = 161;
svm_node t4_2 = new svm_node(); t4_2.index = 2; t4_2.value = 47;
svm_node[] t4 = {t4_1,t4_2}; //这个人的身高是161cm,体重是47kg
double t4_lable=-1.0;//1.0对应的分类是男生,-1.0对应的是女生
//将上面的数据整合到一面对象里面形成训练语料的描述
svm_node[][] datas = {t1, t2,t3,t4}; //训练集的向量表
double[] lables = {t1_lable,t2_lable,t3_lable,t4_lable}; //对应的lable
svm_problem problem = new svm_problem();
problem.l = 4; //向量的个数
problem.x = datas; //训练集向量表
problem.y = lables; //对应的lable数组
//定义svm_parameter对象
svm_parameter param = new svm_parameter();
param.svm_type = svm_parameter.C_SVC;
param.kernel_type = svm_parameter.LINEAR;
param.cache_size = 100;
param.eps = 0.00001;
param.C = 1;
//训练SVM分类模型
System.out.println(svm.svm_check_parameter(problem, param)); //如果参数没有问题,则svm.svm_check_parameter()函数返回null,否则返回error描述。
svm_model model = svm.svm_train(problem, param); //svm.svm_train()训练出SVM分类模型
//定义测试数据点c
svm_node test1_1 = new svm_node(); test1_1.index = 1; test1_1.value = 165;
svm_node test1_2 = new svm_node(); test1_2.index = 2; test1_2.value = 45;
svm_node[] test1 = {test1_1,test1_2}; //这个人的身高是185cm,体重是85kg,判断这个人的是男生,还是女生?
//预测测试数据的lable
double r1=svm.svm_predict(model, test1);
String sex=r1==1.0?"男生":"女生";
System.out.println("这人身高是"+test1_1.value+"cm,体重是"+test1_2.value+"kg,判断是"+sex+"!");
}
}
===结果
null
*
optimization finished, #iter = 1
nu = 0.002770083102493075
obj = -0.005540166204986145, rho = 17.94736842105263
nSV = 2, nBSV = 0
Total nSV = 2
这人身高是165.0cm,体重是45.0kg,判断是女生!