机器学习知识点(八)感知机模型Java实现
生活随笔
收集整理的這篇文章主要介紹了
机器学习知识点(八)感知机模型Java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?感知機模型
package sk.ann;import java.util.ArrayList; import java.util.Arrays;public class PerceptronClassifier {/* 分類器參數*/private double[] w;//權值向量組private double b = 0;//閾值private double eta = 1;ArrayList<Point> arrayList;/*** 初始化分類器,傳入需要分組的數據* @param arrayList 需要分類的點*/public PerceptronClassifier(ArrayList<Point> arrayList, double eta) {// 分類器初始化this.arrayList = arrayList;w = new double[arrayList.get(0).x.length];this.eta = eta;}public PerceptronClassifier(ArrayList<Point> arrayList) {// 分類器初始化this.arrayList = arrayList;w = new double[arrayList.get(0).x.length];this.eta = 1;}/*** 進行分類計算* @return 是否分類成功*/public boolean Classify() {boolean flag = false;while (!flag) {for (int i = 0; i < arrayList.size(); i++) {//所有訓練集if (LearnAnswer(arrayList.get(i)) <= 0) {UpdateWAndB(arrayList.get(i));break;}if (i == (arrayList.size() - 1)) {flag = true;}}}System.out.println(Arrays.toString(w));System.out.println(b);return true;}/*** 進行學習得到的結果* @param point 需要進行學習的點,訓練樣本* @return*/private double LearnAnswer(Point point) {System.out.println(Arrays.toString(w));System.out.println(b);return point.y * (DotProduct(w, point.x) + b);}/*** 進行w更新* @param point 需要根據樣本來隨機梯度下降來進行w和b更新* @return 不需要返回值*/private void UpdateWAndB(Point point) {for (int i = 0; i < w.length; i++) {w[i] += eta * point.y * point.x[i];}b += eta * point.y;return;}/*** 進行點乘* @param x1 乘數* @param x2 乘數* @return 點乘的積*/private double DotProduct(double[] x1, double[] x2) {int len = x1.length;double sum = 0;for (int i = 0; i < len; i++) {sum += x1[i] * x2[i];}return sum;}/*** 主程序進行檢測* @param args*/public static void main(String[] args) {Point p1 = new Point(new double[] { 0,0,0,1 }, -1);Point p2 = new Point(new double[] { 1,0,0,0 }, 1);Point p3 = new Point(new double[] { 2,1,0,0 }, 1);Point p4 = new Point(new double[] { 2,1,0,1 }, -1);ArrayList<Point> list = new ArrayList<Point>();list.add(p1);list.add(p2);list.add(p3);list.add(p4);PerceptronClassifier classifier = new PerceptronClassifier(list);classifier.Classify();} }/*** 定義一個Point,里面包含兩個部分,用來分類。x表示輸入R維空間向量,y表示分類值,只有-1和+1兩類*/class Point {double[] x = new double[2];double y = 0;Point(double[] x, double y) {this.x = x;this.y = y;}public Point() {}} 執行結果如下: [0.0, 0.0, 0.0, 0.0] 0.0 [0.0, 0.0, 0.0, -1.0] -1.0 [0.0, 0.0, 0.0, -1.0] -1.0 [1.0, 0.0, 0.0, -1.0] 0.0 [1.0, 0.0, 0.0, -1.0] 0.0 [1.0, 0.0, 0.0, -1.0] 0.0 [1.0, 0.0, 0.0, -1.0] 0.0 [-1.0, -1.0, 0.0, -2.0] -1.0 [-1.0, -1.0, 0.0, -2.0] -1.0 [0.0, -1.0, 0.0, -2.0] 0.0 [0.0, -1.0, 0.0, -2.0] 0.0 [1.0, -1.0, 0.0, -2.0] 1.0 [1.0, -1.0, 0.0, -2.0] 1.0 [1.0, -1.0, 0.0, -2.0] 1.0 [1.0, -1.0, 0.0, -2.0] 1.0 [-1.0, -2.0, 0.0, -3.0] 0.0 [-1.0, -2.0, 0.0, -3.0] 0.0 [0.0, -2.0, 0.0, -3.0] 1.0 [0.0, -2.0, 0.0, -3.0] 1.0 [0.0, -2.0, 0.0, -3.0] 1.0 [2.0, -1.0, 0.0, -3.0] 2.0 [2.0, -1.0, 0.0, -3.0] 2.0 [2.0, -1.0, 0.0, -3.0] 2.0 [2.0, -1.0, 0.0, -3.0] 2.0 [0.0, -2.0, 0.0, -4.0] 1.0 [0.0, -2.0, 0.0, -4.0] 1.0 [0.0, -2.0, 0.0, -4.0] 1.0 [2.0, -1.0, 0.0, -4.0] 2.0 [2.0, -1.0, 0.0, -4.0] 2.0 [2.0, -1.0, 0.0, -4.0] 2.0 [2.0, -1.0, 0.0, -4.0] 2.0 [0.0, -2.0, 0.0, -5.0] 1.0 [0.0, -2.0, 0.0, -5.0] 1.0 [0.0, -2.0, 0.0, -5.0] 1.0 [2.0, -1.0, 0.0, -5.0] 2.0 [2.0, -1.0, 0.0, -5.0] 2.0 [2.0, -1.0, 0.0, -5.0] 2.0 [2.0, -1.0, 0.0, -5.0] 2.0 [0.0, -2.0, 0.0, -6.0] 1.0 [0.0, -2.0, 0.0, -6.0] 1.0 [0.0, -2.0, 0.0, -6.0] 1.0 [2.0, -1.0, 0.0, -6.0] 2.0 [2.0, -1.0, 0.0, -6.0] 2.0 [2.0, -1.0, 0.0, -6.0] 2.0 [2.0, -1.0, 0.0, -6.0] 2.0 [2.0, -1.0, 0.0, -6.0] 2.0這個代碼實現具有特定分類標記,如1和-1。《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的机器学习知识点(八)感知机模型Java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习知识点(七)决策树学习算法Jav
- 下一篇: 机器学习笔记(五)神经网络