基于Java的SVM(支持向量機)實例合集
以下是一個基于Java的SVM(支持向量機)實例合集,包含核心代碼示例和應用場景說明。這些例子基于流行的機器學習庫(如LIBSVM、Weka、JSAT)實現。
數據準備與加載
使用LIBSVM格式加載數據集:
// 加載LIBSVM格式數據
svm_problem prob = new svm_problem();
prob.l = dataSize; // 樣本數量
prob.x = new svm_node[dataSize][]; // 特征向量
prob.y = new double[dataSize]; // 標簽// 示例數據填充(實際應從文件讀取)
for(int i=0; i<dataSize; i++){prob.x[i] = new svm_node[featureSize];for(int j=0; j<featureSize; j++){prob.x[i][j] = new svm_node();prob.x[i][j].index = j+1;prob.x[i][j].value = Math.random(); // 示例隨機值}prob.y[i] = i%2; // 二分類標簽
}
模型訓練
使用LIBSVM訓練二分類模型:
svm_parameter param = new svm_parameter();
param.svm_type = svm_parameter.C_SVC; // C-SVM分類器
param.kernel_type = svm_parameter.RBF; // RBF核
param.gamma = 0.5; // 核函數參數
param.C = 1; // 懲罰系數
param.eps = 0.01; // 停止標準svm_model model = svm.svm_train(prob, param);
交叉驗證
執行k折交叉驗證:
double[] target = new double[prob.l];
svm.svm_cross_validation(prob, param, 5, target); // 5折交叉驗證// 計算準確率
int correct = 0;
for(int i=0; i<prob.l; i++)if(target[i] == prob.y[i]) correct++;
System.out.println("Accuracy: "+(100.0*correct/prob.l)+"%");
文本分類
使用Weka實現文本分類:
// 加載ARFF格式文本數據
DataSource source = new DataSource("text_data.arff");
Instances data = source.getDataSet();
data.setClassIndex(data.numAttributes()-1);// 配置SVM分類器
LibSVM svm = new LibSVM();
svm.setKernelType(new SelectedTag(LibSVM.KERNELTYPE_RBF, LibSVM.TAGS_KERNELTYPE));// 訓練與評估
Evaluation eval = new Evaluation(data);
eval.crossValidateModel(svm, data, 10, new Random(1));
System.out.println(eval.toSummaryString());
回歸問題
使用SVR進行回歸預測: