导读:本文通过“金钱能让人更快乐吗?”等实操案例带你了解基于实例的学习和基于模型的学习。

作者:Aurélien Géron

来源:大数据DT(ID:hzdashuju)

一种对机器学习系统进行分类的方法是看它们如何泛化。大多数机器学习任务是要做出预测。这意味着系统需要通过给定的训练示例,在它此前并未见过的示例上进行预测(泛化)。在训练数据上实现良好的性能指标固然重要,但是还不够充分。真正的目的是要在新的对象实例上表现出色。

泛化的主要方法有两种:基于实例的学习和基于模型的学习。

01 基于实例的学习

我们最司空见惯的学习方法就是简单地死记硬背。如果以这种方式创建一个垃圾邮件过滤器,那么它可能只会标记那些与已被用户标记为垃圾邮件完全相同的邮件—这虽然不是最差的解决方案,但肯定也不是最好的。

除了完全相同的,你还可以通过编程让系统标记与已知的垃圾邮件非常相似的邮件。这里需要两封邮件之间的相似度度量。一种(基本的)相似度度量方式是计算它们之间相同的单词数目。如果一封新邮件与一封已知的垃圾邮件有许多单词相同,系统就可以将其标记为垃圾邮件。

这被称为基于实例的学习:系统用心学习这些示例,然后通过使用相似度度量来比较新实例和已经学习的实例(或它们的子集),从而泛化新实例。例如,图1-15中的新实例会归为三角形,因为大多数最相似的实例属于那一类。

▲图1-15:基于实例的学习

02 基于模型的学习

从一组示例集中实现泛化的另一种方法是构建这些示例的模型,然后使用该模型进行预测。这称为基于模型的学习(见图1-16)。

▲图1-16:基于模型的学习

举例来说,假设你想知道金钱是否让人感到快乐,你可以从经合组织(OECD)的网站上下载“幸福指数”的数据,再从国际货币基金组织(IMF)的网站上找到人均GDP的统计数据,将数据并入表格,按照人均GDP排序,你会得到如表1-1所示的摘要。

▼表1-1:金钱能让人更快乐吗?

让我们绘制这些国家的数据(见图1-17)。

▲图1-17:趋势图

这里似乎有一个趋势!虽然数据包含噪声(即部分随机),但是仍然可以看出随着该国人均GDP的增加,生活满意度或多或少呈线性上升的趋势。所以你可以把生活满意度建模成一个关于人均GDP的线性函数。这个过程叫作模型选择。你为生活满意度选择了一个线性模型,该模型只有一个属性,就是人均GDP(见公式1-1)。

公式1-1:一个简单的线性模型

生活满意度= θ0 + θ1×人均GDP

这个模型有两个模型参数:θ0和θ1。通过调整这两个参数,可以用这个模型来代表任意线性函数,如图1-18所示。

▲图1-18:一些可能的线性模型

在使用模型之前,需要先定义参数θ0和θ1的值。怎么才能知道什么值可以使模型表现最佳呢?要回答这个问题,需要先确定怎么衡量模型的性能表现。要么定义一个效用函数(或适应度函数)来衡量模型有多好,要么定义一个成本函数来衡量模型有多差。

对于线性回归问题,通常的选择是使用成本函数来衡量线性模型的预测与训练实例之间的差距,目的在于尽量使这个差距最小化。

这正是线性回归算法的意义所在:通过你提供的训练样本,找出最符合提供数据的线性模型的参数,这称为训练模型。在这个案例中,算法找到的最优参数值为θ0 = 4.85和θ1 = 4.91×10-5

注意:令人困惑的是,同一个词“模型”可以指模型的一种类型(例如,线性回归),到一个完全特定的模型架构(例如,有一个输入和一个输出的线性回归),或者到最后可用于预测的训练模型(例如,有一个输入和一个输出的线性回归,使用参数θ0 = 4.85和θ1 = 4.91×10-5)。模型选择包括选择模型的类型和完全指定它的架构。训练一个模型意味着运行一种寻找模型参数的算法,使其最适合训练数据(希望能对新的数据做出好的预测)。

现在,(对于线性模型而言)模型基本接近训练数据,如图1-19所示。

▲图1-19:最拟合训练数据的线性模型

现在终于可以运行模型来进行预测了。例如,你想知道塞浦路斯人有多幸福,但是经合组织的数据没有提供答案。幸好你有这个模型可以做出预测:先查查塞浦路斯的人均GDP是多少,发现是22 587美元,然后应用到模型中,发现生活满意度大约是4.85 + 22 587×4.91×10-5 = 5.96。

为了激发你的兴趣,示例1-1是一段加载数据的Python代码,包括准备数据,创建一个可视化的散点图,然后训练线性模型并做出预测。

  • 示例1-1:使用Scikit-Learn训练并运行一个线性模型

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn.linear_model# Load the data
oecd_bli = pd.read_csv("oecd_bli_2015.csv", thousands=',')
gdp_per_capita = pd.read_csv("gdp_per_capita.csv",thousands=',',delimiter='\t',encoding='latin1', na_values="n/a")# Prepare the data
country_stats = prepare_country_stats(oecd_bli, gdp_per_capita)
X = np.c_[country_stats["GDP per capita"]]
y = np.c_[country_stats["Life satisfaction"]]# Visualize the data
country_stats.plot(kind='scatter', x="GDP per capita", y='Life satisfaction')
plt.show()# Select a linear model
model = sklearn.linear_model.LinearRegression()
# Train the model
model.fit(X, y)# Make a prediction for Cyprus
X_new = [[22587]]  # Cyprus's GDP per capita
print(model.predict(X_new)) # outputs [[ 5.96242338]]

如果使用基于实例的学习算法,你会发现斯洛文尼亚的人均GDP最接近塞浦路斯(20 732美元),而经合组织的数据告诉我们,斯洛文尼亚人的生活满意度是5.7,因此你很可能会预测塞浦路斯的生活满意度为5.7。

如果稍微拉远一些,看看两个与之最接近的国家——葡萄牙和西班牙的生活满意度分别为5.1和6.5。取这三个数值的平均值,得到5.77,这也非常接近基于模型预测所得的值。这个简单的算法被称为k-近邻回归(在本例中,k = 3)。

要将前面代码中的线性回归模型替换为k-近邻回归模型非常简单,只需要将下面这行代码:

import sklearn.linear_model
model = sklearn.linear_model.LinearRegression()

替换为:

import sklearn.neighbors
model = sklearn.neighbors.KNeighborsRegressor(n_neighbors=3)

如果一切顺利,你的模型将会做出很棒的预测。如果不行,则需要使用更多的属性(例如就业率、健康、空气污染等),获得更多或更高质量的训练数据,或者选择一个更强大的模型(例如,多项式回归模型)。

简而言之:

  • 研究数据。

  • 选择模型。

  • 使用训练数据进行训练(即前面学习算法搜索模型参数值,从而使成本函数最小化的过程)。

  • 最后,应用模型对新示例进行预测(称为推断),希望模型的泛化结果不错。

以上就是一个典型的机器学习项目。

关于作者:奥雷利安·杰龙(Aurélien Géron)是机器学习方面的顾问。他曾就职于Google,在2013年到2016年领导过YouTube视频分类团队。他是Wifirst公司的创始人并于2002年至2012年担任该公司的首席技术官。2001年,他创办Ployconseil公司并任首席技术官。

本文摘编自《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》(原书第2版),经出版方授权发布。

延伸阅读《机器学习实战》(原书第2版)

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:“美亚”人工智能畅销榜首图书,基于TensorFlow2全面升级,内容增加近一倍!Keras之父鼎力推荐,从实践出发,手把手教你从零开始搭建起一个神经网络。

划重点????

干货直达????

  • 零基础学Python:一文看懂数字和字符串

  • 为什么数字中台是企业应用新基建?

  • 图解3种常见的深度学习网络结构:FC、CNN、RNN

  • 最新!数字人民币横空出世,5万深圳人瓜分1000万红包!

更多精彩????

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 读书 | 书单 | 硬核 | 干货 讲明白 | 神操作

大数据 | 云计算 | 数据库 | Python | 可视化

AI | 人工智能 | 机器学习 | 深度学习 | NLP

5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生

据统计,99%的大咖都完成了这个神操作

????

金钱能让人更快乐吗?手把手教你用机器学习找到答案相关推荐

  1. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

  2. python numpy安装教程_手把手教你搭建机器学习开发环境—Python与NumPy的超简安装教程...

    手把手教你搭建机器学习开发环境Python语言是机器学习的基础,所以,想要入门机器学习,配置好Python的开发环境是第一步.本文就手把手的教你配置好基于Python的机器学习开发环境.超简单!第一步 ...

  3. 手把手教你搭建机器学习+深度学习AI模型

    说起现在搞什么最挣钱,10 人里 11 个都要回答人工智能! 早在几年前,华为就开出百万年薪招聘 AI 专家,当是很多人认为噱头大于实际价值.但如果今天还有谁质疑人工智能的前景,那显然已经和时代脱轨了 ...

  4. 人工智能: 手把手教你运行机器学习代码(EGNet)

    文章目录 手把手教你运行EGNet 建立信心 咱们先来看看结果蛤 你准备好了吗? **你需要有的配置** 开始吧 **1.资源** 2.python库 3.查看ReadMe文件 4.显著性图 5.量化 ...

  5. 手把手教你实现机器学习SVM算法

    向AI转型的程序员都关注了这个号

  6. 手把手教你配置机器学习服务器(二)服务器组装

    服务器清单: 盒装CPU:CPU散热器:内存条:M2固态硬盘:机械硬盘:电源:主板:机箱. 安装步骤: 一.安装CPU 将主板从防静电袋中取出,平放在鼠标垫或者其他软质的平面上,打开主板上的CPU安装 ...

  7. AI一分钟|研究人员证明“金钱真的可以买到快乐”;特斯拉中国梦面临威胁

    1. 研究人员证明"金钱真的可以买到快乐" 我们会经常听到"金钱无法买到快乐"的说法,但是新的研究表明这不是真的.事实证明,金钱的确可以让一个人开心,但究竟需要 ...

  8. 学会了30个安慰自己和别人的技巧,你会更快乐

    引导语:心里不爽,偶尔的抱怨发泄一下,也是调节心情的方法,但是无休止的抱怨却只会增添烦恼,可是如何让自己快乐幸福呢?下面这30个安慰的技巧,学会了,你会更快乐哟! 第1个安慰:每个人都有自己的活法   ...

  9. HAPPE+ER:一款让脑电研究人员“更快乐”的软件,可用于事件相关电位(ERP)分析的标准化预处理管道

    导读 事件相关电位(ERP)设计是用脑电图(EEG)检测神经认知功能的常用方法.然而,传统的ERP数据预处理方法是手动编辑,这是一个主观且耗时的过程.最近创建了许多自动化通道,以满足EEG数据预处理的 ...

最新文章

  1. 使用STC8H1K28控制微型磁悬浮
  2. MFC中小笔记(三)
  3. java自定义类加载器
  4. kindle 笔记/标注导出
  5. Hibernate 之单向多对一映射及其衍生问题
  6. ARP和RARP报头结构
  7. python的编程环境都不会搭建_9102年你还不会搭建Python环境
  8. .NET与COM互操作系列
  9. 从12306网站新验证码看Web验证码设计与破解
  10. qq空间登录参数详细分析及密码加密最新版
  11. CSS内联样式的使用,实战篇
  12. ora01033是什么错误linux,ora-01033错误的解决办法
  13. markdown中修改图片大小
  14. RTX3080和RTX2080TI 哪个好
  15. Ubuntu系统下打开chm文件
  16. Unity 像机抖动效果
  17. 北京,上海Java程序员的月薪水平?
  18. MSSQL 数据页查询使他 DBCC PAGE 详细说明
  19. Java技术Jsoup爬取数据手动登录
  20. AD域搭建与加入保姆级教程

热门文章

  1. Java笔记-Servlet相关记录
  2. QML工作笔记-PC端和Android端布局错位问题
  3. 获取上周_上周惠州13盘预售9盘价格涨了!最高涨1000元/㎡
  4. linux 按日期复制文件夹,Linux 按文件日期分类文件
  5. zabbix2.4 mysql模板_zabbix自带的模板监控mysql
  6. 学习java前_学习java之前
  7. 2.2数据通信的基础知识
  8. linux 终端与shell输出大小不匹配
  9. Qt之线程同步(生产者消费者模式 - QSemaphore)
  10. Ubuntu16.04自动、手动安装MongoDB的详细教程