第一章 机器学习概览
· Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition, by Aurélien Géron (O’Reilly). Copyright 2019 Aurélien Géron, 978-1-492-03264-9.
· 学习时间:2022.03.28~2022.03.29
注:SciKit-Learn是SciKit库的一部分,SciKit意思是SciPy Tookits,名字来源于SciPy库,SciKit基于SciPy库构建,除了SciKit-Learn,还包含其他很多模块。SciKit-Learn库是专注于机器学习和数据挖掘的模块。本章基本没有涉及代码,结构如下:
文章目录
19问
在一切开始之前,可以看看以下十九个问题,如果能够回答上来,可以略过本章:(答案见最后)
1.如何定义机器学习?
2.机器学习在哪些问题上表现突出,你能给出四种类型吗?
3.什么是被标记的训练数据集?
4.最常见的两种监督学习任务是什么?
5.你能举出四种常见的无监督学习任务吗?
6.要让一个机器人在各种未知的地形中行走,你会使用什么类型的机器学习算法?
7.要将顾客分成多个组,你会使用什么类型的算法?
8.你会将垃圾邮件检测的问题列为监督学习还是无监督学习?
9.什么是在线学习系统?
10.什么是核外学习?
11.什么类型的学习算法依赖相似度来做出预测?
12.模型参数与学习算法的超参数之间有什么区别?
13.基于模型的学习算法搜索的是什么?它们最常使用的策略是什么?它们如何做出预测?
14.你能给出机器学习中的四个主要挑战吗?
15.如果模型在训练数据上表现很好,但是应用到新实例上的泛化结果却很糟糕,是怎么回事?能给出三种可能的解决方案吗?
16.什么是测试集,为什么要使用测试集?
17.验证集的目的是什么?
18.什么是train-dev集,什么时候需要它,怎么使用?
19.如果你用测试集来调超参数会出现什么错误?
答案见最后。
1.1 什么是机器学习
机器学习是一个研究领域,让计算机无须进行明确编程就具备学习能力。
更工程化的概念:一个计算机程序利用经验E来学习任务T,性能是P,如果针对任务T的性能P随着经验E不断增长,则称为机器学习。
1.2 为什么使用机器学习
机器学习的另一个亮点是善于处理对于传统方法而言太复杂或没有已知算法的问题。
机器学习适用于:
-
有解决方案(但解决方案需要进行大量人工微调或需要遵循大量规则)的问题:机器学习算法通常可以简化代码,相比传统方法有更好的性能。
-
传统方法难以解决的复杂问题:最好的机器学习技术也许可以找到解决方案。
-
环境有波动:机器学习算法可以适应新数据。
-
洞察复杂问题和大量数据。
1.4 机器学习系统的类型
是否在人类监督下训练(有监督学习、无监督学习、半监督学习和强化学习)。
是否可以动态地进行增量学习(在线学习和批量学习)。
是简单地将新的数据点和已知的数据点进行匹配,还是像科学家那样,对训练数据进行模式检测然后建立一个预测模型(基于实例的学习和基于模型的学习)。
这些标准之间互相并不排斥,你可以以你喜欢的方式将其任意组合。
例如,现在最先进的垃圾邮件过滤器可能是使用深度神经网络模型对垃圾邮件和常规邮件进行训练,完成动态学习。这使其成为一个在线的、基于模型的有监督学习系统。
有监督学习
在有监督学习中,提供给算法的包含所需解决方案的训练集称为标签。
分类任务是一个典型的有监督学习任务。
垃圾邮件过滤器就是一个很好的示例:通过大量的电子邮件示例及其所属的类别(垃圾邮件还是常规邮件)进行训练,然后学习如何对新邮件进行分类
另一个典型的任务是通过给定一组称为预测器的特征(里程、使用年限、品牌等)来预测一个目标数值(例如汽车的价格)。这种类型的任务称为回归。要训练这样一个系统,需要提供大量的汽车示例,包括它们的预测器和标签(即价格)。
在机器学习里,属性是一种数据类型(例如“里程”),而特征取决于上下文,可能有多个含义,但是通常状况下,特征意味着一个属性加上其值(例如,“里程=15 000”)。尽管如此,许多人还是在使用属性和特征这两个名词时不做区分。
这里是一些最重要的有监督学习算法(本书中会介绍):
-
k-近邻算法
-
线性回归
-
逻辑回归
-
支持向量机(SVM)
-
决策树和随机森林
-
神经网络
无监督学习
无监督学习的训练数据都是未经标记的。系统会在没有“老师”的情况下进行学习
这里有一些最重要地无监督学习算法(大部分会在第8章和第9章中介绍):
-
聚类算法
-
k-均值算法
-
DBSCAN
-
分层聚类分析(HCA)
-
异常检测和新颖性检测
-
单类SVM
-
孤立森林
-
可视化和降维
-
主成分分析(PCA)
-
核主成分分析
-
局部线性嵌入(LLE)
-
t-分布随机近邻嵌入(t-SNE)
-
关联规则学习
-
Apriori·Eclat
与之相关的一个任务是降维,降维的目的是在不丢失太多信息的前提下简化数据。方法之一是将多个相关特征合并为一个。
例如,汽车里程与其使用年限存在很大的相关性,所以降维算法会将它们合并成一个代表汽车磨损的特征。这个过程叫作特征提取
通常比较好的做法是,先使用降维算法减少训练数据的维度,再将其提供给另一个机器学习算法(例如有监督学习算法)。这会使它运行得更快,数据占用的磁盘空间和内存都会更小,在某些情况下,执行性能也会更高
另一个很重要地无监督任务是异常检测
例如,检测异常信用卡交易以防止欺诈,捕捉制造缺陷,或者在给另一种机器学习算法提供数据之前自动从数据集中移除异常值。
系统用正常实例进行训练,然后当看到新的实例时,它就可以判断出这个新实例看上去是正常还是异常
一个非常类似的任务是新颖性检测。它的目的是检测看起来与训练集中的所有实例不同的新实例。
这需要一个非常“干净”的训练集,没有你希望算法能检测到的任何实例。
例如&#