Penggunaan dasar paket algoritma mesin vektor dukungan libsvm. Yang ditunjukkan di sini adalah mesin regresi vektor dukungan.
Copy kode kodenya sebagai berikut:
impor java.io.BufferedReader;
impor java.io.File;
impor java.io.FileReader;
impor java.util.ArrayList;
impor java.util.List;
impor libsvm.svm;
impor libsvm.svm_model;
impor libsvm.svm_node;
impor libsvm.svm_parameter;
impor libsvm.svm_problem;
SVM kelas publik {
public static void main(String[] args) {
// Tentukan titik set pelatihan a{10.0, 10.0} dan titik b{-10.0, -10.0}, dan label yang sesuai adalah {1.0, -1.0}
Daftar<Double> label = Daftar Array baru<Double>();
Daftar<svm_node[]> nodeSet = Daftar Array baru<svm_node[]>();
getData(nodeSet, label, "file/train.txt");
int dataRange=nodeSet.get(0).panjang;
svm_node[][] datas = new svm_node[nodeSet.size()][dataRange]; // Tabel vektor set pelatihan
for (int i = 0; i < datas.length; i++) {
untuk (int j = 0; j < rentang data; j++) {
data[i][j] = nodeSet.get(i)[j];
}
}
double[] labels = new double[label.size()]; // label yang sesuai dengan a,b
for (int i = 0; i < label.panjang; i++) {
label[i] = label.get(i);
}
//Definisikan objek svm_problem
svm_problem masalah = svm_problem();
problem.l = nodeSet.size(); // Jumlah vektor
problem.x = datas; //Tabel vektor set pelatihan
problem.y = label; // Array label yang sesuai
//Definisikan objek svm_parameter
svm_parameter param = svm_parameter();
param.svm_type = svm_parameter.EPSILON_SVR;
param.kernel_type = svm_parameter.LINEAR;
param.cache_size = 100;
param.eps = 0,00001;
param.C = 1.9;
//Latih model klasifikasi SVM
System.out.println(svm.svm_check_parameter(masalah, param));
// Jika tidak ada masalah dengan parameter, fungsi svm.svm_check_parameter() akan mengembalikan null, jika tidak maka akan mengembalikan deskripsi kesalahan.
svm_model model = svm.svm_train(masalah, param);
// svm.svm_train() melatih model klasifikasi SVM
// Dapatkan data pengujian
Daftar<Double> testlabel = Daftar Array baru<Double>();
Daftar<svm_node[]> testnodeSet = Daftar Array baru<svm_node[]>();
getData(testnodeSet, testlabel, "file/test.txt");
svm_node[][] testdatas = new svm_node[testnodeSet.size()][dataRange]; // Tabel vektor set pelatihan
for (int i = 0; i < testdatas.length; i++) {
untuk (int j = 0; j < rentang data; j++) {
data uji[i][j] = testnodeSet.get(i)[j];
}
}
double[] testlabes = new double[testlabel.size()]; // label yang sesuai dengan a,b
for (int i = 0; i < testlables.length; i++) {
label uji[i] = label uji.get(i);
}
// Label untuk memprediksi data pengujian
kesalahan ganda = 0,0;
for (int i = 0; i < testdatas.length; i++) {
nilai benar ganda = tabel yang dapat diuji[i];
System.out.print(nilai sebenarnya + " ");
nilai prediksi ganda = svm.svm_predict(model, data uji[i]);
Sistem.keluar.println(predictValue);
err += Math.abs(predictValue - nilai sebenarnya);
}
System.out.println("err=" + err / datas.length);
}
public static void getData(Daftar<svm_node[]> nodeSet, Daftar<Double> label,
Nama file string) {
mencoba {
FileReader fr = FileReader baru(File baru(nama file));
BufferedReader br = BufferedReader baru(fr);
Garis string = null;
while ((baris = br.readLine()) != null) {
String[] data = baris.split(",");
svm_node[] vektor = svm_node[datas.length - 1] baru;
for (int i = 0; i < datas.length - 1; i++) {
simpul svm_node = svm_node() baru;
simpul.indeks = i + 1;
node.nilai = Double.parseDouble(data[i]);
vektor[i] = simpul;
}
nodeSet.add(vektor);
nilai label ganda = Double.parseDouble(data[datas.panjang - 1]);
label.tambahkan(nilai label);
}
} tangkapan (Pengecualian e) {
e.printStackTrace();
}
}
}
Data pelatihan, kolom terakhir adalah nilai target
Copy kode kodenya sebagai berikut:
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
data uji
Copy kode kodenya sebagai berikut:
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