日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

机器学习知识点(八)感知机模型Java实现

發布時間:2025/4/16 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习知识点(八)感知机模型Java实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?感知機模型

假設輸入數據集為表示是n個訓練數據樣本。輸出y只有兩個值(-1,+1)兩個分類。那么感知機模型可以表示為以下函數:

其中sign是符號函數,意義如下。w表示權值,b表示偏置。我們就是需要通過一定的策略和算法求出其w和b,就可以得到相關的感知機模型。

援引網上參考代碼如下:

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实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。