> 技术文档 > 【SVM】支持向量机实例合集

【SVM】支持向量机实例合集


基于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进行回归预测: