JAVA 人工神经网络实现,机器学习,人工智能

article/2025/9/22 17:38:11

人工智能(AI) 、机器学习(ML)、深度学习(DL)、神经网络(CNN)

IT技术圈的人怼这些词汇大家都一定耳熟能详了,可能圈外的也不陌生,但是作为一个作为一个“攻城狮”,还是JAVA系的攻城狮。我感觉实在不从下手,搜索的资料大都是PYTHON,GO,C++。为此深感觉遗憾,于是只能去用python 完成一些工作和个人需求。在工作过程中总于发现了一些可以支持java的框架了,下面就以 IgniteML举例:

IgniteML(机器学习)是一组简单的、可扩展以及高效的工具,在不需要成本高昂的数据转换的前提下,就可以构建可预测的机器学习模型。

将机器和深度学习加入Ignite的原理是很简单的,当前,如果要想让机器学习成为主流,数据科学家要解决两个主要的问题:

  • 首先,模型是在不同的系统中训练和部署(训练结束之后)的,数据科学家需要等待ETL或者其它的数据传输过程,来将数据移至比如Apache Mahout或者Apache Spark这样的系统进行训练,然后还要等待这个过程结束并且将模型部署到生产环境。在系统间移动TB级的数据可能花费数小时的时间,此外,训练部分通常发生在旧的数据集上;
  • 第二个问题和扩展性有关。机器学习和深度学习需要处理的数据量不断增长,已经无法放在单一的服务器上。这促使数据科学家要么提出更复杂的解决方案,要么切换到比如Spark或者TensorFlow这样的分布式计算平台上。但是这些平台通常只能解决模型训练的一部分问题,这给开发者之后的生产部署带来了很多的困难。

无ETL和大规模可扩展性

IgniteML依赖于Ignite基于内存的存储,这给机器学习和深度学习任务带来了大规模的扩展性,并且取消了在不同系统间进行ETL产生的等待。比如,在Ignite集群的内存和磁盘中存储的数据上,开发者可以直接进行深度学习和机器学习的训练和推理,然后,Ignite提供了一系列的机器学习和深度学习算法,对Ignite的分布式并置处理进行优化,这样在处理大规模的数据集或者不断增长的输入数据流时,这样的实现提供了内存级的速度和近乎无限的扩展性,而不需要将数据移到另外的存储。通过消除数据的移动以及长时间的处理等待,IgniteML可以持续地进行学习,可以在最新数据到来之时实时地对决策进行改进。

容错和持续学习

IgniteML能够对节点的故障容错。这意味着如果在学习期间节点出现故障,所有的恢复过程对用户是透明的,学习过程不会被中断,就像所有节点都正常那样获得结果。

官网地址: 传送门

下面举例一个ANN的实现需要的jar包:

        <!-- ignite内存数据库start --><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-core</artifactId><version>${ignite.version}</version></dependency><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-spring</artifactId><version>${ignite.version}</version></dependency><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-indexing</artifactId><version>${ignite.version}</version></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>${h2.version}</version></dependency><!-- ignite内存数据库end --><!-- ignite机器学习start --><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-ml</artifactId><version>${ignite.version}</version></dependency>

实例代码:

import java.util.Arrays;
import java.util.UUID;import javax.cache.Cache;import org.apache.commons.math3.util.Precision;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DoubleArrayVectorizer;
import org.apache.ignite.ml.knn.NNClassificationModel;
import org.apache.ignite.ml.knn.ann.ANNClassificationTrainer;
import org.apache.ignite.ml.math.distances.EuclideanDistance;
import org.apache.ignite.ml.math.distances.ManhattanDistance;
import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;import com.gitee.kinbug.flying.plugin.ignite.igniteConfig;public class ANNClassificationExample {public static void main(String[] args) {System.out.println();System.out.println(">>> 基于缓存数据集的ANN多类分类算法使用实例启动。");// Start ignite grid.try (Ignite ignite = igniteConfig.igniteStart()) {System.out.println(">>> Ignite grid started.");IgniteCache<Integer, double[]> dataCache = null;try {dataCache = getTestCache(ignite);ANNClassificationTrainer trainer = new ANNClassificationTrainer().withDistance(new ManhattanDistance()).withK(50).withMaxIterations(1000).withEpsilon(1e-2);long startTrainingTime = System.currentTimeMillis();NNClassificationModel knnMdl = trainer.fit(ignite,dataCache,new DoubleArrayVectorizer<Integer>().labeled(Vectorizer.LabelCoordinate.FIRST)).withK(5).withDistanceMeasure(new EuclideanDistance()).withWeighted(true);long endTrainingTime = System.currentTimeMillis();System.err.println(">>> ---------------------------------");System.err.println(">>> | 预测\t| 实际数据\t|");System.err.println(">>> ---------------------------------");int amountOfErrors = 0;int totalAmount = 0;long totalPredictionTime = 0L;try (QueryCursor<Cache.Entry<Integer, double[]>> observations = dataCache.query(new ScanQuery<>())) {for (Cache.Entry<Integer, double[]> observation : observations) {double[] val = observation.getValue();double[] inputs = Arrays.copyOfRange(val, 1, val.length);double groundTruth = val[0];long startPredictionTime = System.currentTimeMillis();double prediction = knnMdl.predict(new DenseVector(inputs));long endPredictionTime = System.currentTimeMillis();totalPredictionTime += (endPredictionTime - startPredictionTime);totalAmount++;if (!Precision.equals(groundTruth, prediction, Precision.EPSILON))amountOfErrors++;System.err.printf(">>> | %.4f\t\t| %.4f\t\t|\n", prediction, groundTruth);}System.err.println(">>> ---------------------------------");System.err.println("样本数量 = "+totalAmount);System.err.println("训练时间成本 = " + (endTrainingTime - startTrainingTime));System.err.println("预测时间成本 = " + totalPredictionTime);System.err.println("\n>>> 绝对误差量 " + amountOfErrors);System.err.println("\n>>> 准确性 " + (1 - amountOfErrors / (double)totalAmount));System.err.println(">>> ANN多类分类算法在缓存数据集上的使用实例完成。");}}finally {dataCache.destroy();}}finally {System.out.flush();}}/*** 用数据填充缓存并返回数据。** @param ignite Ignite 实例.* @return Filled Ignite 缓存.*/private static IgniteCache<Integer, double[]> getTestCache(Ignite ignite) {CacheConfiguration<Integer, double[]> cacheConfiguration = new CacheConfiguration<>();cacheConfiguration.setName("TEST_" + UUID.randomUUID());cacheConfiguration.setAffinity(new RendezvousAffinityFunction(false, 10));IgniteCache<Integer, double[]> cache = ignite.createCache(cacheConfiguration);for (int k = 0; k < 10; k++) { // multiplies the Iris dataset k times.for (int i = 0; i < data.length; i++)cache.put(k * 10000 + i, data[i]);}return cache;}/*** Iris数据集。*/private static final double[][] data = {{1, 5.1, 3.5, 1.4, 0.3},{1, 4.9, 3, 1.4, 0.2},{1, 4.7, 3.2, 1.3, 0.2},{1, 4.6, 3.1, 1.5, 0.2},{1, 5, 3.6, 1.4, 0.2},{1, 5.4, 3.9, 1.7, 0.4},{1, 4.6, 3.4, 1.4, 0.3},{1, 5, 3.4, 1.5, 0.2},{1, 4.4, 2.9, 1.4, 0.2},{1, 4.9, 3.1, 1.5, 0.1},{1, 5.4, 3.7, 1.5, 0.2},{1, 4.8, 3.4, 1.6, 0.2},{1, 4.8, 3, 1.4, 0.1},{1, 4.3, 3, 1.1, 0.1},{1, 5.8, 4, 1.2, 0.2},{1, 5.7, 4.4, 1.5, 0.4},{1, 5.4, 3.9, 1.3, 0.4},{1, 5.1, 3.5, 1.4, 0.3},{1, 5.7, 3.8, 1.7, 0.3},{1, 5.1, 3.8, 1.5, 0.3},{1, 5.4, 3.4, 1.7, 0.2},{1, 5.1, 3.7, 1.5, 0.4},{1, 4.6, 3.6, 1, 0.2},{1, 5.1, 3.3, 1.7, 0.5},{1, 4.8, 3.4, 1.9, 0.2},{1, 5, 3, 1.6, 0.2},{1, 5, 3.4, 1.6, 0.4},{1, 5.2, 3.5, 1.5, 0.2},{1, 5.2, 3.4, 1.4, 0.2},{1, 4.7, 3.2, 1.6, 0.2},{1, 4.8, 3.1, 1.6, 0.2},{1, 5.4, 3.4, 1.5, 0.4},{1, 5.2, 4.1, 1.5, 0.1},{1, 5.5, 4.2, 1.4, 0.2},{1, 4.9, 3.1, 1.5, 0.1},{1, 5, 3.2, 1.2, 0.2},{1, 5.5, 3.5, 1.3, 0.2},{1, 4.9, 3.1, 1.5, 0.1},{1, 4.4, 3, 1.3, 0.2},{1, 5.1, 3.4, 1.5, 0.2},{1, 5, 3.5, 1.3, 0.3},{1, 4.5, 2.3, 1.3, 0.3},{1, 4.4, 3.2, 1.3, 0.2},{1, 5, 3.5, 1.6, 0.6},{1, 5.1, 3.8, 1.9, 0.4},{1, 4.8, 3, 1.4, 0.3},{1, 5.1, 3.8, 1.6, 0.2},{1, 4.6, 3.2, 1.4, 0.2},{1, 5.3, 3.7, 1.5, 0.2},{1, 5, 3.3, 1.4, 0.2},{2, 7, 3.2, 4.7, 1.4},{2, 6.4, 3.2, 4.5, 1.5},{2, 6.9, 3.1, 4.9, 1.5},{2, 5.5, 2.3, 4, 1.3},{2, 6.5, 2.8, 4.6, 1.5},{2, 5.7, 2.8, 4.5, 1.3},{2, 6.3, 3.3, 4.7, 1.6},{2, 4.9, 2.4, 3.3, 1},{2, 6.6, 2.9, 4.6, 1.3},{2, 5.2, 2.7, 3.9, 1.4},{2, 5, 2, 3.5, 1},{2, 5.9, 3, 4.2, 1.5},{2, 6, 2.2, 4, 1},{2, 6.1, 2.9, 4.7, 1.4},{2, 5.6, 2.9, 3.6, 1.3},{2, 6.7, 3.1, 4.4, 1.4},{2, 5.6, 3, 4.5, 1.5},{2, 5.8, 2.7, 4.1, 1},{2, 6.2, 2.2, 4.5, 1.5},{2, 5.6, 2.5, 3.9, 1.1},{2, 5.9, 3.2, 4.8, 1.8},{2, 6.1, 2.8, 4, 1.3},{2, 6.3, 2.5, 4.9, 1.5},{2, 6.1, 2.8, 4.7, 1.2},{2, 6.4, 2.9, 4.3, 1.3},{2, 6.6, 3, 4.4, 1.4},{2, 6.8, 2.8, 4.8, 1.4},{2, 6.7, 3, 5, 1.7},{2, 6, 2.9, 4.5, 1.5},{2, 5.7, 2.6, 3.5, 1},{2, 5.5, 2.4, 3.8, 1.1},{2, 5.5, 2.4, 3.7, 1},{2, 5.8, 2.7, 3.9, 1.2},{2, 6, 2.7, 5.1, 1.6},{2, 5.4, 3, 4.5, 1.5},{2, 6, 3.4, 4.5, 1.6},{2, 6.7, 3.1, 4.7, 1.5},{2, 6.3, 2.3, 4.4, 1.3},{2, 5.6, 3, 4.1, 1.3},{2, 5.5, 2.5, 4, 1.3},{2, 5.5, 2.6, 4.4, 1.2},{2, 6.1, 3, 4.6, 1.4},{2, 5.8, 2.6, 4, 1.2},{2, 5, 2.3, 3.3, 1},{2, 5.6, 2.7, 4.2, 1.3},{2, 5.7, 3, 4.2, 1.2},{2, 5.7, 2.9, 4.2, 1.3},{2, 6.2, 2.9, 4.3, 1.3},{2, 5.1, 2.5, 3, 1.1},{2, 5.7, 2.8, 4.1, 1.3},{3, 6.3, 3.3, 6, 2.5},{3, 5.8, 2.7, 5.1, 1.9},{3, 7.1, 3, 5.9, 2.1},{3, 6.3, 2.9, 5.6, 1.8},{3, 6.5, 3, 5.8, 2.2},{3, 7.6, 3, 6.6, 2.1},{3, 4.9, 2.5, 4.5, 1.7},{3, 7.3, 2.9, 6.3, 1.8},{3, 6.7, 2.5, 5.8, 1.8},{3, 7.2, 3.6, 6.1, 2.5},{3, 6.5, 3.2, 5.1, 2},{3, 6.4, 2.7, 5.3, 1.9},{3, 6.8, 3, 5.5, 2.1},{3, 5.7, 2.5, 5, 2},{3, 5.8, 2.8, 5.1, 2.4},{3, 6.4, 3.2, 5.3, 2.3},{3, 6.5, 3, 5.5, 1.8},{3, 7.7, 3.8, 6.7, 2.2},{3, 7.7, 2.6, 6.9, 2.3},{3, 6, 2.2, 5, 1.5},{3, 6.9, 3.2, 5.7, 2.3},{3, 5.6, 2.8, 4.9, 2},{3, 7.7, 2.8, 6.7, 2},{3, 6.3, 2.7, 4.9, 1.8},{3, 6.7, 3.3, 5.7, 2.1},{3, 7.2, 3.2, 6, 1.8},{3, 6.2, 2.8, 4.8, 1.8},{3, 6.1, 3, 4.9, 1.8},{3, 6.4, 2.8, 5.6, 2.1},{3, 7.2, 3, 5.8, 1.6},{3, 7.4, 2.8, 6.1, 1.9},{3, 7.9, 3.8, 6.4, 2},{3, 6.4, 2.8, 5.6, 2.2},{3, 6.3, 2.8, 5.1, 1.5},{3, 6.1, 2.6, 5.6, 1.4},{3, 7.7, 3, 6.1, 2.3},{3, 6.3, 3.4, 5.6, 2.4},{3, 6.4, 3.1, 5.5, 1.8},{3, 6, 3, 4.8, 1.8},{3, 6.9, 3.1, 5.4, 2.1},{3, 6.7, 3.1, 5.6, 2.4},{3, 6.9, 3.1, 5.1, 2.3},{3, 5.8, 2.7, 5.1, 1.9},{3, 6.8, 3.2, 5.9, 2.3},{3, 6.7, 3.3, 5.7, 2.5},{3, 6.7, 3, 5.2, 2.3},{3, 6.3, 2.5, 5, 1.9},{3, 6.5, 3, 5.2, 2},{3, 6.2, 3.4, 5.4, 2.3},{3, 5.9, 3, 5.1, 1.8}};
}

测试结果:


http://chatgpt.dhexx.cn/article/CsXUydus.shtml

相关文章

机器学习java_如何开始使用Java机器学习

机器学习java 什么是开始使用Java机器学习的最佳工具&#xff1f; 他们已经存在了一段时间&#xff0c;但如今看来&#xff0c;每个人都在谈论人工智能和机器学习。 对于科学家和研究人员而言&#xff0c;它已经不再是秘密&#xff0c;几乎可以在任何新兴技术中实现。 在下面…

谁说搞Java的不能玩机器学习?

简介 机器学习在全球范围内越来越受欢迎和使用。 它已经彻底改变了某些应用程序的构建方式&#xff0c;并且可能会继续成为我们日常生活中一个巨大的&#xff08;并且正在增加的&#xff09;部分。没有什么包装且机器学习并不简单。 它对许多人来说似乎非常复杂并常常令人生畏…

基于 Java 机器学习自学笔记 (第51-53天:kNN)

注意&#xff1a;本篇为50天后的Java自学笔记扩充&#xff0c;内容不再是基础数据结构内容而是机器学习中的各种经典算法。这部分博客更侧重与笔记以方便自己的理解&#xff0c;自我知识的输出明显减少&#xff0c;若有错误欢迎指正&#xff01; 目录 一、关于数据集及其导入…

基于 Java 机器学习自学笔记 (第66至68天:主动学习之ALEC)

注意&#xff1a;本篇为50天后的Java自学笔记扩充&#xff0c;内容不再是基础数据结构内容而是机器学习中的各种经典算法。这部分博客更侧重于笔记以方便自己的理解&#xff0c;自我知识的输出明显减少&#xff0c;若有错误欢迎指正&#xff01; 目录 前言 一、关于学习的分类…

超全!基于Java的机器学习项目、环境、库...

https://yq.aliyun.com/articles/278837?utm_sourcetuicool&utm_mediumreferral 摘要&#xff1a; 你是一名希望开始或者正在学习机器学习的Java程序员吗&#xff1f; 利用机器学习编写程序是最佳的学习方式。你可以从头开始编写算法&#xff0c;但是利用现有的开源库&am…

结合Java和机器学习技术,如何驾驭大数据提升业务效率和竞争力?

随着大数据的不断增长和发展&#xff0c;越来越多的企业和组织开始关注如何利用大数据来提高业务效率和竞争力。在大数据分析领域&#xff0c;Java和机器学习技术是两个非常重要的方向。本文将介绍这两个技术的基本概念、应用场景和发展趋势&#xff0c;并重点探讨如何结合Java…

25个JAVA 机器学习工具包

本列表总结了25个Java机器学习工具&库&#xff1a; 1. Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具&#xff0c;如数据预处理、分类、回归、聚类、关联规则以及可视化。 2.Massive Onli…

7个最好的Java机器学习开发库

IT派 - {技术青年圈} 持续关注互联网、区块链、人工智能领域 摘要&#xff1a; 本文将介绍一些目前流行的、强大的基于Java的机器学习库。 图片来源: Mindfire Solutions 摘要&#xff1a;现如今&#xff0c;拥有深度学习和机器学习领域的技术是科技界的趋势之一&#xff0c;并…

基于 Java 机器学习自学笔记 (第71-73天:BP神经网络)

注意&#xff1a;本篇为50天后的Java自学笔记扩充&#xff0c;内容不再是基础数据结构内容而是机器学习中的各种经典算法。这部分博客更侧重于笔记以方便自己的理解&#xff0c;自我知识的输出明显减少&#xff0c;若有错误欢迎指正&#xff01; 前言 本文是我计划描述BP神经网…

如何开始Java机器学习

什么是开始使用Java机器学习的最佳工具&#xff1f; 他们已经存在了一段时间&#xff0c;但如今看来&#xff0c;每个人都在谈论人工智能和机器学习。 对于科学家和研究人员而言&#xff0c;它已不再是秘密&#xff0c;几乎可以在任何新兴技术中实现。 在下面的文章中&#x…

如何开始使用 Java 机器学习

开始Java机器学习的最好工具是什么&#xff1f; 这个问题已经有一段时间了&#xff0c;但最近这些日子几乎每个人都在谈论人工智能和机器学习。这已经不再是一个保留给科学家和研究者的秘密&#xff0c;而是几乎实现于每一项新兴技术中。 在下面的章节中&#xff0c;我们会做一…

6大最常用的Java机器学习库一览

导读&#xff1a;机器学习是目前盛行于世的技术之一&#xff0c;这几年一时风头无两。虽然在机器学习中&#xff0c;Python是人工智能从业者使用最多的编程语言&#xff0c;但是&#xff0c;Java 在项目开发中仍然发挥着不可替代的作用&#xff0c;而且许多流行的机器学习框架本…

基于 Java 机器学习自学笔记 (第60天:过去十日的总结)

注意&#xff1a;本篇为50天后的Java自学笔记扩充&#xff0c;内容不再是基础数据结构内容而是机器学习中的各种经典算法。这部分博客更侧重于笔记以方便自己的理解&#xff0c;自我知识的输出明显减少&#xff0c;若有错误欢迎指正&#xff01; 目录 1.尝试作为知识的输出者 …

机器学习入门-用Java实现简单感知机

一、通俗理解机器学习 1、机器学习是人工智能的一种&#xff0c;如图所示&#xff0c;它是人工智能的一个子方向。 2、机器学习有点像人类的学习过程。 1. 人类学习通过经验(事件)&#xff0c;归纳出规律。 2. 机器学习通过数据&#xff0c;训练出模型。 3、机器学习不是基于编…

机器学习算法 java_Java开发人员的机器学习,第1部分:机器学习算法

机器学习算法 java 无人驾驶汽车&#xff0c;面部检测软件和语音控制扬声器均基于机器学习技术和框架构建&#xff0c;而这些仅仅是第一波。 在接下来的十年中&#xff0c;新一代产品将改变我们的世界&#xff0c;为软件开发以及我们创建和使用的应用程序和产品启动新的方法。 …

【Java应用】使用Java实现机器学习算法:聚类、分类、预测

一、引言 1、机器学习算法概述 机器学习是一种人工智能技术&#xff0c;旨在通过使用数据和统计分析来让计算机系统自动改进性能。机器学习算法可分为三大类&#xff1a;聚类、分类和预测。聚类算法用于将数据集分成不同的群组&#xff1b;分类算法用于将数据分为不同的类别&…

KL15和KL30

一、KL15节点方式 这是最直接和简单的方法&#xff0c;将所有CAN总线上的ECU电源都接在KL15上面。(KL15是当点火开关在ON上才接通蓄电池电源&#xff09; 缺点&#xff0c;无法适应所有的ECU&#xff1a; 1.可以断电关闭&#xff0c;比如座椅控制。 2.有些ECU在汽车到OFF档时…

KL15和KL30节点网络管理概念

一、KL15节点方式 这是最直接和简单的方法&#xff0c;将所有CAN总线上的ECU电源都接在KL15上面。(KL15是当点火开关在ON上才接通蓄电池电源&#xff09; 缺点&#xff0c;无法适应所有的ECU&#xff1a; 1.可以断电关闭&#xff0c;比如座椅控制。 2.有些ECU在汽车到OFF档时…

KL15 是什么?ACC,crank,on等

KL含义 KL is the abbreviation for klemme which is the German term for connector / connection.KL是“ klemme”的缩写&#xff0c;这是德语中连接器或连接的术语。 KL30 &#xff0c;通常表示电瓶的正极。positive KL31&#xff0c;通常表示电瓶的负极。negative KL15, 通…

CANoe串口控制电源

一、工具 CANoe12.0版本&#xff0c;VN1630A 可控制电源---固纬PSW 30-36 二、CAPL编写 1、在variables变量总定义串口的一些配置信息 这里定义的port_KL30和port_KL15具体的值可以去查看设备管理器连接的串口值是多少。 2、初始化串口定义 3、串口发送函数 一切定义配置…