本书通过一系列有趣的实例,由浅入深地介绍了机器学习这一炙手可热的新领域,并且详细介绍了适合机器学习开发的 Microsoft F#语言和函数式编程,引领读者深入了解机器学习的基本概念、核心思想和常用算法。书中的例子既通俗易懂,同时又十分实用,可以作为许多开发问题的起点。通过对本书的阅读,读者无须接触枯燥的数学知识,便可快速上手,为日后的开发工作打下坚实的基础。本书适合对机器学习感兴趣的.NET开发人员阅读,也适合其他读者作为机器学习的入门参考书。
如果你手里拿着这本书,我就可以认定你是对机器学习感兴趣的,NET 开发人员了。你可能对编写 C#应用程序很熟悉,开发的很有可能是业务线应用程序。以前你可能遇到过 F#,也可能没有。而且,你很有可能对机器学习感到好奇。这一主题每天都见诸报端,因为它和软件工程有着很紧密的联系,但是使用的是不熟悉、看似有些抽象的数学概念。简而言之,机器学习看上去是有趣的主题、值得学习的实用技能,但是从哪里入手难以说清
。
本书的意图是作为开发人员的机器学习入门书。我的主要目标是使熟悉代码编写的读者(而不是数学家)容易理解书中的主题。对数学的喜爱当然没有坏处,但是本书通过实用的示例学习核心概念,说明其中的工作原理。
什么是机器学习?机器学习是一种编程艺术,所编写的计算机程序随着可用数据越来越多而更好地执行任务,无须开发人员更改代码。
上述定义相当宽泛,反映了机器学习广泛适用于各个领域这一事实。但是,该定义中的一些具体特征值得更详细说明。机器学习是关于程序编写的学科,这些代码运行于生产环境并执行某项任务,这使它不同于统计学。机器学习是—一个跨学科的领域,这个主题既和倾向于数学的研究人员相关,也和软件工程师相关。
定义中另一个有趣的部分是数据。机器学习是关于利用可用数据解决实际问题的学科。使用数据是机器学习的关键部分,理解数据、研究如何从中提取有用信息,往往比使用的特定算法更重要。因此,我们将从数据开始了解机器学习。每章都从一个真实的数据集和所要解决的特定问题开始,数据中包含了现实世界中的所有不完善和意外。由此,我们将在这一背景下从头开始构建问题解决方案,在需要的时候介绍思路。在此过程中,我们将创建一个基础,帮助你理解不同思路的组合使用,使你在以后需要的B候甲不效率t使用库或者框架。
我们的探索从熟悉的 C#和 Visual Studio 开始,但是在取得进展之后将介绍 F#,这是一种特别适合于机器学习问题的,NET语言。正如机器学习,函数式编程一开始令人生畏。然而,一旦掌握了诀窍,F#就会变得很简单且极具效率。如果你完全是 F#的初学者,本书将告诉你该语言所需了解的一切,你将在现实、有趣的问题中学习如何高效地使用该语言。
学习过程中,我们将探索各种各样的问题,帮助你理解机器学习能使应用程序变得更好的领域,有些方法可能出人意料。我们将探索图像识别、垃圾邮件过滤器和自我学习游戏以及其他一些问题。而且,在我们共同的旅途上,你将发现机器学习并没有那么复杂,相当简单的模型就能产生令人惊讶的出色结果。最后,你将会发现,机器学习非常有趣!好了,不多啰唆了,让我们一起对付第一个机器学习问题吧!
构建自动识别数字图像的程序
如果你打算建立一个当前技术热点的列表,机器学习当然会名列前茅。然而,虽然这个术语到处出现,但是它的真实含义往往含混不清。它是和"大数据"或者"数据科学"一样的东西吗?它和统计学有何不同之处?表面上,机器学习似乎是一种奇特、令人畏惧的专业,使用令人眼花缭乱的数学知识和算法,和软件工程师的日常活动没有多少共同之处。
在本章以及本书余下的部分中,我的目标是和大家一起完成实际项目,以此阐明机器学习的原理。我们将循序渐进地解决问题,主要是从头;开始编写代码。通过讲述这种方法,我们可以理解工作原理的细节,逐步说明广泛适用的核心思路和方法,并帮助你为以后构建专用程序库打下坚实的基础。在第1章中,我们将深入探讨一个经典问题——手写数字识别,同时完成以下几件工作∶
● 建立适用于大部分机器学习问题的方法论。机器学习模型的开发与标准业务线应用程序有微妙的不同,将带来特殊的挑战。学到本章的最后,你将会理解交叉验证的概念、重要性以及使用方法。
● 帮助你理解如何"考虑机器学习",以及如何看待机器学习问题。我们将讨论相似性和距离之类的思路,这些思路是大部分算法的核心。我们还将说明,虽然数学是机器学习的重要组成部分,但是这个方面可能被过分强调了,有些核心思路实际上相当简单。我们将从比较简单的算法开始,你会看到,这些算法实际上工作得很好!
● 了解如何用C#和 F#解决问题。我们将从实现 C#解决方案开始,然后提供 F#的等价解决方案。F#是一种特别适合于机器学习和数据科学的,NET 语言。
在第1章就碰上这样的问题,似平会令人畏缩-—但是不要被吓住!从表面上看这个问题很难,但是你将会发现,我们仅用相当简单的方法,就能修创建相当有效的解决方案。再说,解决小儿科的问题有什么意思?
什么是机器学习?机器学习的核心是编写能够学习如何根据经验执行任务的程序,而不需要明确地编程说明如何解决问题。这仍然是一个模糊的定义,产生了这样的问题∶如何精确地定义"学习"?下面是一个有些乏味的定义。
如果一个程序得到更多的数据点,它就自然能够更好地执行指定的任务,那么我们就称它是"学习"。也可以反过来看这个定义∶如果你不顾观察到的结果,一次又一次地重复进行相同的工作,那当然就没有"学习"。
上述定义很好地总结了"进行机器学习"的含义。你的目标是编写一个自动执行某些任务的程序。这个程序应该能够从经验中学习,经验的形式可能是预先存在的过往观测数据集,也可能是程序本身执行任务时积累的数据(称作"在线学习")。随着可用数据越来越多,无须更改程序代码本身,程序就应该变得更加擅长此项任务。
编写这样一个程序时,你的任务包括两个方面。首先,你的程序需要可从中学习的数据。机器学习的一个重要组成部分是收集数据,并准备数据使其形式可供程序使用。将原始数据重新组织为更好地表现问题域、程序可理解格式的过程称作特征抽取。此后,程序必须能够理解自己执行任务的质量,以便根据经验调整和学习。因此,定义一个指标,准确地计量任务完成质量,是至关重要的。
最后,机器学习需要一些耐心、好奇心和许多创意!你需要选择一种算法,为它提供数据以训练某种预测模型,验证模型的表现,还需要改进和迭代——可能是定义新功能,也可能是选择新的算法。
这一周期——从训练数据中学习,评估验证数据并改进——是机器学习过程的核心。这也是真正起作用的科学方法;你努力地找出一种模型,通过公式化各种假设,进行一系列验证试验确定如何推进,准确地预测世界的发展。
在进入我们的第一个问题之前,必须简要地说明两点。首先,这只是对机器学习的宽泛描述。机器学习适用于多个领域的问题,从检测垃圾邮件和自动驾驶汽车,到推荐你可能喜欢的电影,自动翻译或者使用医疗数据帮助诊断。虽然只有深入理解各个领域的专业知识及需求才能成功地应用机器学习技术,但是原理和方法大体相同。
其次,请注意我们的机器学习定义中明确地提到了 "编写程序",和主要考虑验证模型是否正确的统计学不同,机器学习的最终目标是创建一个在生产环境中运行的程序。这本身就使之成为一个有趣的领域,因为本质上机器学习是跨学科的(在统计方法和软件工程上都成为专家是很难的),它也为软件工程师开创了一个非常激动人心的新领域。
现在我们已经有了基本的定义,下面进入第一个问题。
1.2.1 挑战∶构建一个数字识别程序
我们所要解决的问题是"数字识别程序",这个问题是直接从 Kaggle.com 机器学习竞赛中借用的。
下面就是这道难题∶我们有 50000 幅图像的数据集。每个图像是由一个人写下的单个数字,以 28×28 像素分辨率扫描,编码为灰度图像,每个像素使用 256个可能的灰度中的一个(从全白到全黑)。我们知道每次扫描的正确答案,也就是那个人写下的数字。这一数据集被称作"训练集"。现在,我们的目标是编写—个程序,从训练集中学习,并使用该信息预测之前从未见过的图像;该图像是0,还是1,还是…
从技术上说,这是所谓的"分类"问题; 目标是将图像分到已知的"类别"中,这就是"分类"的由来。在本例中,我们有10个类别,代表0~9 的数字。机器学习的不同风格取决于所要解决的问题类型,分类只是其中之一,但可能是最有代表性的问题。我们将在本书介绍更多此类问题!
那么,如何解决这个问题?我们先从一个不同的问题开始,想象一下我们只有两个图像∶ 0和1(见图1-2)。
假定现在我为你提供图 1-3 中的图像,并提出下列问题;图 1-2 中显示的两个图像中,哪个与图 1-3最为相像?
作为人,我想你一定觉得这个问题太简单了∶"很明显,是第一个。"就这一点而言,我想两岁大的孩子都会觉得很简单。真正的问题是,如何将大脑所变的"魔术"翻译成代码?
解决这个问题的方法之一是调换一下问题的措辞∶最相似的图像是差别最小的图像。在这个框架下,可以开始"找出差异",逐个像素比较两个图像。图1-4 中的图像显示了差异的"热图"∶两个像素差别越大,颜色就越深。
在我们的例子中,这种方法似乎很有效。第二个图像"大不相同",中间有一个很大的黑色区域,而第一个图像(画出了两个"0"之间的差异)大部分是白色,只有稀少的深色区域。
1.2.2 机器学习中的距离函数
现在我们可以加总各个像素的差异,用单一数字总结两个图像的差异。这样,对于相似的图像可以得到一个较小的数,对于不相似的图像则得到较大的数。在此,我们可以定义两个图像的"距离",以描述其接近的程度。绝对完全相同的两个图像距离为 0,不同的像素越多,距离就越大。另一方面,我们知道距离为 0 的含义是完全匹配,也知道这是我们所希望出现的最佳状况。但是,我们的相似度计量是有局限性的。例如,如果你简单地复制一个图像,但是向左移动一个像素,逐个像素的距离可能会变得相当大,甚至是在图像本质上完全相同的情况下。
距离的概念在机器学习中很重要,以某种形式出现在大部分模型中。距离函数是将你所要实现的功能翻译为机器能够使用的形式的手段。通过减小事物(如两个图像)的复杂度,形成单一数字,算法就可能产生作用——在本例中,算法可以决定两个图像是否相似。与此同时,将复杂度减小为单一数字也会带来某些细节在"翻译中手失"的风险,就像上述的图像移动的情况。
距离函数还常常以另一个名称出现在机器学习中;代价函数。两者本质上相同,只是从不同的角度看待问题。例如,如果我们试图预测一个数字,预测的误差——也就是预测值与实际值的差别——就是距离。但是,同样可以用代价描述这一情况;较大误差的"代价很高",对模型的改进能够降低其代价。
1.2.3 从简单的方法入手
现在,我们暂时忽略上述问题,遵循一种在编写软件和开发预测模型中都很奇妙的方法,继续解决问题——最简单的方法能不能生效?先从简单的方法入手,看看会发生什么情况。如果这种方法有效,就没有必要采用复杂的方法,从而更快地解决问题。如果无效,你可以花费少量时间建立简单的概念验证模型,在此过程中通常可以学到很多关于问题空间的知识。无论如何,这都是一次胜利。
因此,现在我们要克制住过度思考和设计的欲望,我们的目标是采用自己认为可能成功的最简单方法,并在以后改进。我们可以做这样一件事∶ 当必须确定图像所代表的的数字时,可以在包含 50000 个训练示例的已知库中搜索最类似(差异最小)的图像,并预测图像所代表的数字。
如果看上去像"5",当然就肯定是"5"!
算法的轮廓如下;给定试图识别的 28×28 像素图像("未知图像")和 50000 个训练示例(28×28 像素图像和一个标签),我们将;
●计算未知图像和每个训练示例的总差值。
●找出差值最小的训练示例("最接近者")。
●预测"未知"与"最接近者"相同。
【下载地址】
链接:https://pan.baidu.com/s/1UqHP8RyvQaXJHzIRQtUVbA
提取码:yjdf
相关文章
本书主要介绍了深度学习的基础原理和 TensorFlow系统基本使用方法。
本书通过一系列有趣的实例,由浅入深地介绍了机器学习这一炙手可热的新领域,并且详细介绍了适合机器学习开发的 Microsoft F#语言和函数
本书通过一系列有趣的实例,由浅入深地介绍了机器学习这一炙手可热的新领域,并且详细介绍了适合机器学习开发的 Microsoft F#语言和函数
FlashFXP绿色版网盘下载,附激活教程 1840
FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具
Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1608
firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ
navicat for mysql中文绿色版网盘下载 1653
Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq
火车头采集器(旗舰版)绿色版网盘下载 1739
火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA
Photoshop(CS-2015-2023)绿色中文版软件下载 1859
安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64