Java OpenCV-4.x 人工智能01 機器學習 支持向量機 SVM

Java OpenCV-4.x 人工智能01 機器學習 支持向量機 SVM

OpenCV 中的機器學習(Machine Learning,ML)算法。

序號 中文名稱 英文名稱
01 決策樹 Decision Tree
02 EM算法 Expectation - Maximization
03 貝葉斯分類 Normal Bayes Classifier
04 K-鄰近算法 K-Nearest Neighbour Classifier
05 支持向量機 Support Vector Machine
06 Boost樹算法 Boosted Tree Classifier
07 隨機森林算法 Random Trees Classifier
08 人工神經網絡 Artificial Neural Networks
09 梯度Boost樹算法 Gradient Boosted Trees
10 絕對隨機森林算法 Extremely Randomized Trees Classifier
11 SGD支持向量機 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("女");
		}

	}

}

支持向量機

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章