Java OpenCV 人工智能01.0 机器学习 支持向量机 SVM

Java OpenCV 人工智能01.0 机器学习 支持向量机 SVM

OpenCV 中的机器学习(Machine Learning,ML)算法。

序号中文名称英文名称
01决策树Decision Tree
02EM算法Expectation - Maximization
03贝叶斯分类Normal Bayes Classifier
04K-邻近算法K-Nearest Neighbour Classifier
05支持向量机Support Vector Machine
06Boost树算法Boosted Tree Classifier
07随机森林算法Random Trees Classifier
08人工神经网络Artificial Neural Networks
09梯度Boost树算法Gradient Boosted Trees
10绝对随机森林算法Extremely Randomized Trees Classifier
11SGD支持向量机Stochastic Gradient Descent Support Vector Machine

Support Vector Machine SVM 介绍

package com.xu.opencv;

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.TermCriteria;
import org.opencv.ml.Ml;
import org.opencv.ml.SVM;
import org.opencv.ml.TrainData;

/**  
 * 
 * @Author: hyacinth
 * @Title: ML.java   
 * @Package com.xu.opencv   
 * @Description:
 * @Date: 2019年11月22日20:23:23 
 * @Version V-1.0 
 * @Copyright: 2019 hyacinth
 * 
 */
public class ML {

	static {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
	}

	public static void main(String[] args) {
		// 训练数据 体重,身高
		float[] train_data = { 186, 80, 185, 81, 165, 60, 168, 61, 160, 50, 161, 48 };
		// 测试数据 身高,体重
		float[] test = { 184, 79, 160, 62, 159, 50 };
		// 训练数据 0=男 ,1=女
		int[] label = { 0, 0, 0, 0, 1, 1 };     
		
		Mat train_mat = new Mat(6, 2, CvType.CV_32FC1);  
		train_mat.put(0, 0, train_data);  

		Mat train_lable = new Mat(6, 1, CvType.CV_32SC1);  
		train_lable.put(0, 0, label);   

		Mat test_lable = new Mat(3, 2, CvType.CV_32FC1);  
		test_lable.put(0, 0, test);  

		SVM(train_mat,train_lable,test_lable);
	}

	/**
	 * OpenCV-4.1.0 SVM 支持向量机
	 * @Author: hyacinth
	 * @Title: SVM
	 * @param : tarin 训练数据
	 * @param : lable 训练标签
	 * @param : test  测试数据
	 * @Description: TODO       
	 * @return void  
	 * @date: 2019年11月22日20:23:23
	 */
	public static void SVM(Mat tarin,Mat lable,Mat test) {
		SVM svm = SVM.create();
		svm.setC(1);
		svm.setP(0);
		svm.setNu(0);
		svm.setCoef0(0);
		svm.setGamma(1);
		svm.setDegree(0);
		svm.setType(SVM.C_SVC);
		svm.setKernel(SVM.LINEAR);
		TermCriteria criteria=new TermCriteria(TermCriteria.EPS + TermCriteria.MAX_ITER,1000,0);
		svm.setTermCriteria(criteria);

		TrainData trainData = TrainData.create(tarin,Ml.ROW_SAMPLE,lable);
		svm.train(trainData.getSamples(), Ml.ROW_SAMPLE,trainData.getResponses());
		svm.save("C:\\Users\\Administrator\\Desktop\\number.xml");

		Mat response = new Mat();
		svm.predict(test, response, 0);

		System.out.println(response.dump());

		for (int i = 0; i < response.height(); i++) {
			if (response.get(i, 0)[0] == 0)
				System.out.println("男");
			if (response.get(i, 0)[0] == 1)
				System.out.println("女");
		}

	}

}

支持向量机

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值