Java开发人员的机器学习

自驾车,人脸检测软件和语音控制扬声器都建立在机器学习技术和框架之上,而这些只是第一波。在接下来的十年中,新一代产品将改变我们的世界,开创新的软件开发方法以及我们创造和使用的应用和产品。

作为Java开发人员,您希望在现在开始高科技公司开始对机器学习进行投资之前,先获得这个曲线。你今天学到了什么,你可以在未来五年内建立起来,但你必须从某个地方开始。

本文将让您开始。您将首先了解机器学习的工作原理,然后是实施和训练机器学习算法的简短指南。学习内部学习算法和功能后,您可以使用它来训练,评分和选择最适合的预测功能,您将了解如何使用JVM框架Weka来构建机器学习解决方案。本文着重于监督机器学习,这是开发智能应用程序的最常用方法。

机器学习和人工智能

机器学习从人工智能领域演变而来,它寻求生产能够模仿人类智力的机器。虽然机器学习是计算机科学的新兴趋势,人工智能不是一个新的科学领域。20世纪50年代初由Alan Turing开发的图灵测试是为确定计算机是否具有真实智能而开发的首个测试之一。根据图灵测试,一台电脑可以通过欺骗人类相信它也是人类来证明人的智慧。

许多最先进的机器学习方法是基于几十年的概念。在过去十年中发生了什么变化,计算机(和分布式计算平台)现在具有机器学习算法所需的处理能力。大多数机器学习算法需要大量的矩阵乘法和其他数学运算来处理。管理这些计算的计算技术甚至在二十年前就不存在,但今天却没有。

机器学习使程序能够执行质量改进过程并扩展其功能,而无需人为参与。通过机器学习构建的程序能够更新或扩展自己的代码。

监督学习与无监督学习

监督学习和无监督学习是机器学习最流行的方法。两者都需要给机器提供大量的数据记录来关联和学习。这种收集的数据记录通常被称为特征向量。在个别房屋的情况下,特征向量可能包括房屋总面积,房间数量和房屋年龄等特征。

在监督学习中,训练机器学习算法以正确地回应与特征向量有关的问题。为了训练算法,机器被馈送一组特征向量和相关联的标签。标签通常由人类注释器提供,并且表示给定问题的正确“答案”。学习算法分析特征向量及其正确的标签,以找到它们之间的内部结构和关系。因此,机器学习正确地响应查询。

例如,智能房地产应用程序可能会使用特征向量进行训练,其中包括房屋的大小,房间数量以及各种房屋的年龄。根据这些因素,人类标签商将按照正确的房价对每个房屋进行标签。通过分析数据,房地产应用将受到培训,以回答“ 我可以得到这个房子多少钱 ”的问题。

培训过程结束后,新的输入数据将不会被标记。该机器将能够正确响应查询,即使对于未看到的未标记的特征向量也是如此。

在无人值守学习中,该算法被编程为预测没有人标签的答案,甚至是问题。无监督学习不是预先确定标签或结果,而是利用大量数据集和处理能力来发现以前未知的相关性。例如,在消费者产品营销中,无监督学习可用于识别隐藏的关系或消费者分组,最终导致新的或改进的营销策略。

本文着重于监督机器学习,这是当今最常见的机器学习方法。

监督机器学习

所有机器学习都是基于数据。对于受监督的机器学习项目,您将需要以有意义的方式为您寻求的结果标注数据。在表1中,请注意,房屋记录的每一行都包含“房价”标签。通过将行数据与房价标签相关联,该算法最终将能够预测不在其数据集中的房屋的市场价格(注意,房屋面积基于平方米,房价基于欧元)。

在早期阶段,您可能会手动标注数据记录,但最终可能会对您的程序进行自动化处理。你可能已经看到这样的电子邮件应用程序,其中移动电子邮件到您的垃圾邮件文件夹导致查询“这是垃圾邮件?” 当您回复时,您正在对该程序进行培训,以识别您不想看到的邮件。应用程序的垃圾邮件过滤器可以学习将来自同一来源的邮件或具有类似内容的未来邮件标签,并将其处理。

标记的数据集仅用于培训和测试目的。在此阶段结束之后,机器学习算法用于未标记的数据实例。例如,您可以为预测算法提供新的未标记的房屋记录,并根据培训数据自动预测预期房价。

机器如何学习预测

监督机器学习的挑战是为特定问题找到适当的预测功能。在数学上,挑战是找到输入输出函数,其输入变量x并返回预测值y。该假设函数(hθ)是训练过程的输出。假设函数通常也称为目标或预测函数。

在大多数情况下,x表示多数据点。在我们的示例中,这可以是由房屋大小值和房间数值定义的单独房屋的二维数据点。这些值的数组被称为特征向量。给定具体的目标函数,该函数可用于对每个特征向量x进行预测。要预测个别房屋的价格,您可以使用包含房屋面积和房间数量的特征向量{101.0,3.0}来调用目标函数:

//目标函数h(它是学习过程的输出) 函数< Double [],Double > h = ...;//设置与房子的大小= 101数的室和= 3的特征向量双 [] X = 新 双 [] { 101.0,3.0 };//并预测房价(标签)double y = h.apply(x);

在清单1中,数组变量x值表示房子的特征向量。目标函数返回的y值是预测的房价。

机器学习的挑战是定义一个目标函数,尽可能准确地处理未知的,不可见的数据实例。在机器学习中,目标函数(hθ)有时被称为模型。这种模式是学习过程的结果。

基于标记的训练示例,学习算法在训练数据中寻找结构或模式。从这些,它产生一个从该数据中普遍化的模型。

通常,学习过程是探索性的。在大多数情况下,通过使用学习算法和配置的不同变体,该过程将被多次执行。

最终,所有模型将根据性能指标进行评估,最好的模型将被选中。然后,该模型将用于计算未来未标记数据实例的预测。

线性回归

要训练一台机器来思考,第一步是选择你要使用的学习算法。线性回归是最简单和最受欢迎的受监督学习算法之一。该算法假设输入特征和输出标签之间的关系是线性的。以下通用线性回归函数通过汇总乘以θ参数(θ)的特征向量的每个元素来返回预测值。在训练过程中使用θ参数以根据训练数据适应或“调整”回归函数。

在线性回归函数中,theta参数和特征参数由订阅号列举。订阅号表示矢量中θ参数(θ)和特征参数(x)的位置。注意特征x 0是为计算目的设定值为1的常数偏移项。因此,诸如房屋大小的域特定功能的索引将从x 1开始。作为示例,如果为House特征向量的第一个值设置x 1,则房屋大小,则将为下一个值,房间数量等设置x 2。

清单2显示了这种线性回归函数的Java实现,数学上显示为hθ(x)。为了简单起见,使用数据类型进行计算double。在该apply()方法中,期望数组的第一个元素的值设置为1.0以外的函数。

清单2. Java中的线性回归

public class LinearRegressionFunction implements Function < Double [],Double > { private final double [] thetaVector;
 LinearRegressionFunction(double [] thetaVector){ this .theTVector = Arrays.copyOf(thetaVector,thetaVector.length);
 }
public Double apply(Double [] featureVector){ //由于计算原因,第一个元素必须为1.0
 assert featureVector [ 0 ] == 1.0 ;
//简单,顺序实现
双重预测= 0 ; for(int j = 0 ; j <thetaVector.length; j ++){
 预测+ = thetaVector [j] * featureVector [j];
 }
回报预测;
 }
public double [] getThetas(){ return Arrays.copyOf(thetaVector,thetaVector.length);
 }}

为了创建一个新的实例LinearRegressionFunction,您必须设置theta参数。θ参数或向量用于将通用回归函数适应于底层训练数据。程序的theta参数将根据训练示例在学习过程中进行调整。训练有素的目标功能的质量只能与给定训练数据的质量一样好。

在下面的示例中,LinearRegressionFunction将根据房屋大小来实例化预测房价。考虑到x 0必须为1.0的常数值,则使用两个θ参数来实例化目标函数。θ参数是学习过程的输出。创建新实例后,预计房屋面积1330平方米的房屋价格如下:

//这里使用的θ向量是一个列车过程的输出双 [] thetaVector = 新 双 [] { 1.004579,5.286822 };LinearRegressionFunction targetFunction = new LinearRegressionFunction(thetaVector);//创建具有X0特征矢量函数= 1(用于计算的原因)和X1 =房子大小双 [] featureVector = 新 双 [] { 1.0,1330.0 };//使预测double predictionPrice = targetFunction.apply(featureVector);

目标函数的预测线在下图中以蓝线显示。该行已通过执行所有房屋大小值的目标函数来计算。图表还包括用于培训的价格尺寸对。

到目前为止,预测图似乎足够好。图形坐标(截距和斜率)由θ矢量定义{ 1.004579, 5.286822 }。但是你怎么知道这个theta矢量是最适合你的应用程序?如果您更改了第一个或第二个theta参数,函数是否更适合?要确定最适合的theta参数向量,您需要一个效用函数,它将评估目标函数的执行情况。

评分目标功能

在机器学习中,使用成本函数(J(θ))来计算给定目标函数的平均误差或“成本”。

成本函数表示该模型与训练数据的吻合度。要确定上面训练的目标函数的成本,您可以计算每个房屋示例(i)的平方误差。该误差是所计算的距离ÿ值与实际ÿ房子示例的值我。

线路图

1、具有1-5工作经验的,面对目前流行的技术不知从何下手,

需要突破技术瓶颈的。2、在公司待久了,过得很安逸,

但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的。

3、如果没有工作经验,但基础非常扎实,对java工作机制,

常用设计思想,常用java开发框架掌握熟练的。

4、觉得自己很牛B,一般需求都能搞定。

但是所学的知识点没有系统化,很难在技术领域继续突破的。

5. 群号:高级架构群 606187239备注好信息!

6.阿里Java高级大牛直播讲解知识点,分享知识,

多年工作经验的梳理和总结,带着大家全面、

科学地建立自己的技术体系和技术认知!

举报
评论 0