การใช้งานพื้นฐานของแพ็คเกจอัลกอริทึมเครื่องเวกเตอร์ที่รองรับ libsvm สิ่งที่แสดงให้เห็นที่นี่คือเครื่องสนับสนุนการถดถอยเวกเตอร์
คัดลอกรหัสรหัสดังต่อไปนี้:
นำเข้า java.io.BufferedReader;
นำเข้า java.io.File;
นำเข้า java.io.FileReader;
นำเข้า java.util.ArrayList;
นำเข้า java.util.List;
นำเข้า libsvm.svm;
นำเข้า libsvm.svm_model;
นำเข้า libsvm.svm_node;
นำเข้า libsvm.svm_parameter;
นำเข้า libsvm.svm_problem;
SVM คลาสสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
// กำหนดชุดการฝึกจุด a{10.0, 10.0} และจุด b{-10.0, -10.0} และฉลากที่สอดคล้องกันคือ {1.0, -1.0}
รายการ <Double> label = new ArrayList<Double>();
รายการ <svm_node[]> nodeSet = ใหม่ ArrayList<svm_node[]>();
getData(nodeSet, ป้ายกำกับ, "file/train.txt");
int dataRange=nodeSet.get(0).ความยาว;
svm_node[] [] datas = new svm_node [nodeSet.size()] [dataRange]; // ตารางเวกเตอร์ของชุดการฝึกอบรม
สำหรับ (int i = 0; i < datas.length; i++) {
สำหรับ (int j = 0; j < dataRange; j ++) {
ข้อมูล [i] [j] = nodeSet.get (i) [j];
-
-
double[] label = new double[label.size()]; // ป้ายกำกับที่สอดคล้องกับ a,b
สำหรับ (int i = 0; i < label.length; i++) {
ป้ายกำกับ [i] = label.get(i);
-
//กำหนดวัตถุ svm_problem
ปัญหา svm_problem = ใหม่ svm_problem();
problems.l = nodeSet.size(); // จำนวนเวกเตอร์
problems.x = datas; //ตารางเวกเตอร์ชุดการฝึกอบรม
problems.y = lables; // อาร์เรย์ lable ที่สอดคล้องกัน
//กำหนดวัตถุ svm_parameter
svm_parameter พารามิเตอร์ = ใหม่ svm_parameter();
param.svm_type = svm_parameter.EPSILON_SVR;
param.kernel_type = svm_parameter.LINEAR;
param.cache_size = 100;
พารามิเตอร์.eps = 0.00001;
พารามิเตอร์ C = 1.9;
//ฝึกโมเดลการจำแนกประเภท SVM
System.out.println(svm.svm_check_parameter (ปัญหา, พารามิเตอร์));
// หากไม่มีปัญหากับพารามิเตอร์ ฟังก์ชัน svm.svm_check_parameter() จะส่งคืนค่าว่าง มิฉะนั้นจะส่งคืนคำอธิบายข้อผิดพลาด
svm_model model = svm.svm_train (ปัญหา, พารามิเตอร์);
// svm.svm_train() ฝึกโมเดลการจัดหมวดหมู่ SVM
// รับข้อมูลการทดสอบ
รายการ <Double> testlabel = new ArrayList<Double>();
รายการ <svm_node[]> testnodeSet = new ArrayList<svm_node[]>();
getData(testnodeSet, testlabel, "file/test.txt");
svm_node[] [] testdatas = ใหม่ svm_node [testnodeSet.size ()] [dataRange]; // ตารางเวกเตอร์ของชุดการฝึกอบรม
สำหรับ (int i = 0; i < testdatas.length; i++) {
สำหรับ (int j = 0; j < dataRange; j ++) {
ข้อมูลการทดสอบ [i] [j] = testnodeSet.get (i) [j];
-
-
double[] testlabs = new double[testlabel.size()]; // ป้ายกำกับที่สอดคล้องกับ a,b
สำหรับ (int i = 0; i < testlables.length; i++) {
ฉลากทดสอบ [i] = testlabel.get (i);
-
// ป้ายกำกับสำหรับการทำนายข้อมูลการทดสอบ
ข้อผิดพลาดสองครั้ง = 0.0;
สำหรับ (int i = 0; i < testdatas.length; i++) {
ค่าจริงสองเท่า = testlables [i];
System.out.print(มูลค่าจริง + " ");
double PredictValue = svm.svm_predict (โมเดล, ข้อมูลการทดสอบ [i]);
System.out.println(ค่าคาดการณ์);
ผิดพลาด += Math.abs (predictValue - ค่าจริง);
-
System.out.println("err=" + err / datas.length);
-
โมฆะสาธารณะคงที่ getData (รายการ <svm_node []> nodeSet, รายการ <Double> ป้ายกำกับ,
ชื่อไฟล์สตริง) {
พยายาม {
FileReader fr = new FileReader (ไฟล์ใหม่ (ชื่อไฟล์));
BufferedReader br = BufferedReader ใหม่ (fr);
เส้นสตริง = null;
ในขณะที่ ((line = br.readLine()) != null) {
ข้อมูลสตริง [] = line.split (",");
svm_node[] vector = ใหม่ svm_node[datas.length - 1];
สำหรับ (int i = 0; i < datas.length - 1; i++) {
โหนด svm_node = svm_node ใหม่ ();
node.index = ฉัน + 1;
node.value = Double.parseDouble (ข้อมูล [i]);
เวกเตอร์ [i] = โหนด;
-
nodeSet.add(เวกเตอร์);
double lablevalue = Double.parseDouble (ข้อมูล [datas.length - 1]);
label.add(ค่าฉลาก);
-
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
-
-
ข้อมูลการฝึกอบรม คอลัมน์สุดท้ายคือค่าเป้าหมาย
คัดลอกรหัสรหัสดังต่อไปนี้:
17.6,17.7,17.7,17.7,17.8
17.7,17.7,17.7,17.8,17.8
17.7,17.7,17.8,17.8,17.9
17.7,17.8,17.8,17.9,18
17.8,17.8,17.9,18,18.1
17.8,17.9,18,18.1,18.2
17.9,18,18.1,18.2,18.4
18,18.1,18.2,18.4,18.6
18.1,18.2,18.4,18.6,18.7
18.2,18.4,18.6,18.7,18.9
18.4,18.6,18.7,18.9,19.1
18.6,18.7,18.9,19.1,19.3
ข้อมูลการทดสอบ
คัดลอกรหัสรหัสดังต่อไปนี้:
18.7,18.9,19.1,19.3,19.6
18.9,19.1,19.3,19.6,19.9
19.1,19.3,19.6,19.9,20.2
19.3,19.6,19.9,20.2,20.6
19.6,19.9,20.2,20.6,21
19.9,20.2,20.6,21,21.5
20.2,20.6,21,21.5,22