الاستخدام الأساسي لحزمة خوارزمية آلة ناقل الدعم libsvm ما تم توضيحه هنا هو آلة انحدار ناقل الدعم.
انسخ رمز الكود كما يلي:
import java.io.BufferedReader;
استيراد java.io.File؛
استيراد java.io.FileReader؛
import java.util.ArrayList;
import java.util.List;
استيراد libsvm.svm؛
استيراد libsvm.svm_model؛
استيراد libsvm.svm_node؛
استيراد libsvm.svm_parameter؛
import libsvm.svm_problem;
الطبقة العامة SVM {
public static void main(String[] args) {
// حدد نقطة ضبط التدريب a{10.0, 10.0} والنقطة b{-10.0, -10.0}، والتسمية المقابلة هي {1.0, -1.0}
List<Double> label = new ArrayList<Double>();
List<svm_node[]>NodeSet = new ArrayList<svm_node[]>();
getData(nodeSet, label, "file/train.txt");
int dataRange=nodeSet.get(0).length;
svm_node[][] datas = new svm_node[nodeSet.size()][dataRange]; // جدول المتجهات لمجموعة التدريب
لـ (int i = 0; i < datas.length; i++) {
for (int j = 0; j < dataRange; j++) {
datas[i][j] =nodeSet.get(i)[j];
}
}
double[] labels = new double[label.size()]; // الملصقات المقابلة لـ a,b
لـ (int i = 0; i < labels.length; i++) {
التسميات[i] = label.get(i);
}
// تحديد كائن svm_problem
مشكلة svm_problem = جديد svm_problem();
مشكلة.l =nodeSet.size(); // عدد المتجهات
المشكلة.x = datas; // جدول متجهات مجموعة التدريب
المشكلة.y = lables؛ // مصفوفة التسمية المقابلة
// تحديد كائن svm_parameter
svm_parameter param = new svm_parameter();
param.svm_type = svm_parameter.EPSILON_SVR;
param.kernel_type = svm_parameter.LINEAR;
param.cache_size = 100;
param.eps = 0.00001;
بارام.C = 1.9؛
// تدريب نموذج تصنيف SVM
System.out.println(svm.svm_check_parameter(problem, param));
// إذا لم تكن هناك مشكلة في المعلمات، فإن الدالة svm.svm_check_parameter() ترجع فارغة، وإلا فإنها ترجع وصف خطأ.
svm_model model = svm.svm_train(problem, param);
// svm.svm_train () يدرب نموذج تصنيف SVM
// الحصول على بيانات الاختبار
List<Double> testlabel = new ArrayList<Double>();
List<svm_node[]> testnodeSet = new ArrayList<svm_node[]>();
getData(testnodeSet, testlabel, "file/test.txt");
svm_node[][] testdatas = new svm_node[testnodeSet.size()][dataRange]; // جدول المتجهات لمجموعة التدريب
لـ (int i = 0; i < testdatas.length; i++) {
for (int j = 0; j < dataRange; j++) {
testdatas[i][j] = testnodeSet.get(i)[j];
}
}
double[] testlables = new double[testlabel.size()]; // التسميات المطابقة لـ a,b
لـ (int i = 0; i < testlables.length; i++) {
testlabels[i] = testlabel.get(i);
}
// تسمية للتنبؤ ببيانات الاختبار
خطأ مزدوج = 0.0؛
لـ (int i = 0; i < testdatas.length; i++) {
القيمة الحقيقية المزدوجة = testlables[i];
System.out.print(truevalue + "");
قيمة توقع مزدوجة = svm.svm_predict(model, testdatas[i]);
System.out.println(predictValue);
err += Math.abs(predictValue - truevalue);
}
System.out.println("err=" + err / datas.length);
}
getData العامة الثابتة (List<svm_node[]>NodeSet، List<Double> label،
اسم ملف السلسلة) {
يحاول {
FileReader fr = new FileReader(new File(filename));
BufferedReader br = new BufferedReader(fr);
خط السلسلة = فارغ؛
بينما ((line = br.readLine()) != null) {
String[] datas = line.split("،");
svm_node[] Vector = new svm_node[datas.length - 1];
لـ (int i = 0; i < datas.length - 1; i++) {
svm_node node = new svm_node();
Node.index = i + 1;
قيمة العقدة = Double.parseDouble(datas[i]);
المتجه[i] = العقدة;
}
nodeSet.add(vector);
قيمة لابل مزدوجة = Double.parseDouble(datas[datas.length - 1]);
label.add(lablevalue);
}
} قبض (الاستثناء ه) {
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