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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

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

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

?感知機(jī)模型

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

其中sign是符號(hào)函數(shù),意義如下。w表示權(quán)值,b表示偏置。我們就是需要通過一定的策略和算法求出其w和b,就可以得到相關(guān)的感知機(jī)模型。

援引網(wǎng)上參考代碼如下:

package sk.ann;import java.util.ArrayList; import java.util.Arrays;public class PerceptronClassifier {/* 分類器參數(shù)*/private double[] w;//權(quán)值向量組private double b = 0;//閾值private double eta = 1;ArrayList<Point> arrayList;/*** 初始化分類器,傳入需要分組的數(shù)據(jù)* @param arrayList 需要分類的點(diǎn)*/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;}/*** 進(jìn)行分類計(jì)算* @return 是否分類成功*/public boolean Classify() {boolean flag = false;while (!flag) {for (int i = 0; i < arrayList.size(); i++) {//所有訓(xùn)練集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;}/*** 進(jìn)行學(xué)習(xí)得到的結(jié)果* @param point 需要進(jìn)行學(xué)習(xí)的點(diǎn),訓(xùn)練樣本* @return*/private double LearnAnswer(Point point) {System.out.println(Arrays.toString(w));System.out.println(b);return point.y * (DotProduct(w, point.x) + b);}/*** 進(jìn)行w更新* @param point 需要根據(jù)樣本來隨機(jī)梯度下降來進(jìn)行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;}/*** 進(jìn)行點(diǎn)乘* @param x1 乘數(shù)* @param x2 乘數(shù)* @return 點(diǎn)乘的積*/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;}/*** 主程序進(jìn)行檢測(cè)* @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();} }/*** 定義一個(gè)Point,里面包含兩個(gè)部分,用來分類。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() {}} 執(zhí)行結(jié)果如下:

[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這個(gè)代碼實(shí)現(xiàn)具有特定分類標(biāo)記,如1和-1。


《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的机器学习知识点(八)感知机模型Java实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。