机器学习
2019-06-06 18:25:53 2 举报
AI智能生成
机器学习思维导图
作者其他创作
大纲/内容
相关
轻松看懂机器学习十大常用算法 (Machine Learning Top 10 Commonly Used Algorithms)
机器学习(http://jermmy.xyz/)
拉格朗日乘子法
文章原出处
SVM
SVM小白教程(1):目标函数
SVM小白教程(2):拉格朗日对偶
参考文章
老外的“SVM Tutorial”支持向量机
HMM
隐马尔科夫模型HMM(一)HMM模型
自由主题
CRF
如何轻松愉快地理解条件随机场(CRF)?
【中文分词】条件随机场CRF
HMM,MEMM,CRF模型的比较
聚类算法
例子
常见的六大聚类算法
各种聚类算法(原理+代码+对比分析)最全总结
目标
使同一类对象的相似度尽可能地大;不同类对象之间的相似度尽可能地小。
分类
【1】基于划分
给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K<N。
特点
计算量大。很适合发现中小规模的数据库中小规模的数据库中的球状簇
算法
K-MEANS算法
K-MEDOIDS算法
CLARANS算法
【2】基于层次
对给定的数据集进行层次似的分解,直到某种条件满足为止。具体又可分为“自底向上”和“自顶向下”两种方案。
特点
较小的计算开销。然而这种技术不能更正错误的决定。
算法
BIRCH算法
CURE算法
CHAMELEON算法
【3】基于密度
只要一个区域中的点的密度大过某个阈值,就把它加到与之相近的聚类中去。
特点
能克服基于距离的算法只能发现“类圆形”的聚类的缺点。
算法
DBSCAN算法
OPTICS算法
DENCLUE算法
【4】基于网格
将数据空间划分成为有限个单元(cell)的网格结构,所有的处理都是以单个的单元为对象的。
特点
处理速度很快,通常这是与目标数据库中记录的个数无关的,只与把数据空间分为多少个单元有关
算法
STING算法
CLIQUE算法
WAVE-CLUSTER算法
(1)入行AI
算法
日常工作
读论文
实现
技能
必备技能
快速阅读大量英文论文
https://arxiv.org/
自测算法力
学术实践力
学习能力
学术研究方法论
读懂论文
数学能力
系统学习数学
北师大教材
概率统计
线性代数
微积分
学术与产品、业务结合的能力
做用别人的工具/框架的第一拨人
更高阶:创新型
尝试新算法
把已有算法玩出新花样
工程
日常工作
机器学习工程师(调参工程师)
读论文解决问题
技能
程序员的基本素质
编码能力
基础算法能力
链
树
图
构建
删除
遍历
查找
排序
算法掌握程度
简单使用
该算法的应用问题域是什么?
分类
回归
聚类
该算法的应用目标是什么?
判别算法
生成算法
该算法适合应用在怎样的数据集,对数据造成怎样的影响?
eg适用于少量高维稀疏数据
会主动获取该算法的函数库
调用该算法生成模型
模型调优
知道调用函数中各个参数的意义,通过调参优化结果
迭代次数,对应到公式中参数的含义
能够通过加约束条件(e.g. L0, L1, L2 ……)来优化算法
可以用哪些其他模型可替换现有模型,并进行尝试
在当前问题域,目标和输入数据确定的情况下
将多个弱模型加权组成强模型
e.g. adaboost
运行效率优化
算法在当前数据集上的运行效率
需要进行哪些运算
是否易于被分布式
了解在其他语言、平台、框架的工具包中有否同等或近似功能但在当前应用场景下效率更高的算法
能够针对具体场景,通过转换模型的最优化方法(optimizer)来改进运行效率
数据处理
【1】特征选取
了解数据本身及对应的业务领域
根据需求标注数据
知道如何通过划分特征子集、加减特征等方法选取有效特征集
【2】向量空间模型(VSM)构建
把文字、语音、图像等输入转化成算法所需输入格式(一般为实数空间的矩阵或向量)
根据信息熵等指标选取有效特征
【3】数据清洗和处理
运用统计学方法等 ETL 手段清洗输入数据
对数据进行归一化(normalization), 正则化(regularization)等标准化操作
采用 bootstrap 等采样方法处理有限的训练/测试数据,以达到更好的运算效果
模型验证
算法+数据要解决的问题
这个模型的质量如何?
这个模型和另外的模型比较,哪个更适合解决当前问题?
在做了上述优化后得出了一个新的模型,如何确认它比旧模型好?
度量模型质量的方法
bias,overfitting
了解 bias,overfitting 等基本概念
针对这些情况的基本改进方法
了解各种模型度量指标
计算方法和含义
e.g. Accuracy, Precision,Recall, F1Score……
其对模型质量的影响
构建训练集、测试集,并进行交叉验证
运用多种不同的验证方法来适应不同的数据集
e.g. 2-Fold cross-validation,K-Fold cross-validation, Leave-One-Out cross-validation
做数据
标注数据的重要性
现阶段而言,数据远比算法重要
深度学习的成功依赖于海量的标注数据
图像
语音
NLP
自动翻译
AlphaGo
数据人工标注的必要性
人工标注数据仍然是 AI 落地的必要和主流
人工智能的“勤行”
什么叫做标注
标注就是将原始数据内全部或者部分内容,按照业务需求打上定义好的标签。
eg聊天机器人
00183 号商品快递到伊犁邮费多少?
意图
“商品查询“
实体
商品ID
目的地
商品属性
标注结果
[00183]<-{商品 Id}号商品快递到[伊犁]<-{目的地}[邮费]<-{商品属性}多少?||商品查询
数据标注的日常工作
数据标注的日常工作就是给各种各样的数据(文本、图像、视频、音频等)打上标签。
数据标注的难点
如何根据业务设定标注原则
与业务的集合是挑战
目前人工智能落地场景有限,标注通用化,数据含义和标注原则容易
未来各个领域全面展开,不断变更标注需求
如何应对快速变更的业务需求
同步更新标注结果
如何快速统一地实现标注原则
数据一致性
eg:很可能一句话在某个人看来是“查询商品”,而在另一个人看来就是“要求售后”。(即使是将所有数据交给一个人,也可能在不同时间段理解不同。)
目前方式
外包不重视
暴力解决方案
重复标注数量取胜
存在问题
不适合精标数据
如果三个人所标结果完全不一样,那么这条数据也就失去了标注价值
在现实中,经常会出现同一份数据因为质量过低,被要求重复标注的情况出现,费时费力
数据标注的潜力
数据对模型的影响远胜于算法
一群年薪百万起步的算法工程师耗费经年的成果,对于模型质量直接的影响甚至比不上一个靠谱标注团队一两个月的精心标注
人工智能蓝领,一定是刚需!
数据标注的职业发展
经验+业务+管理
通过实践积累数据标注的工作经验
深入理解业务需求并将其体现到数据的标注结果中
管理标注团队达到高效的标注结果与业务变更对齐
“数据经理“职位
职责
负责提供高质量标注数据为基础
技术
衔接工程领域的 ETL 和数据处理
产品
对接业务,带领团队为公司产品或服务的 revenue(收益)提供直接贡献
(2)绪论
『01 | 为什么要学原理和公式推导 』
学习原理的必要性
功利层面
面试会考
老板会问
以前谁负责哪个模块都是自己搞定所有事,你怎么还想让别人给你标注数据呀?
花费这么多时间和人力训练出的模型,怎么连个 DSAT 都 Fix 不了啊?
既然再多投入几倍资源也达不到 95% 以上的正确率,为什么不干脆直接用 Rule-Base 来解决?
……
花费这么多时间和人力训练出的模型,怎么连个 DSAT 都 Fix 不了啊?
既然再多投入几倍资源也达不到 95% 以上的正确率,为什么不干脆直接用 Rule-Base 来解决?
……
同事会质疑
别人都用 TensorFlow,你为什么要用 Caffe 呢?
以前这个分类器,我们用逻辑回归挺好的,你为什么非要换成 RNN 呢?
用这个谱聚类做数据预处理,归根到底不还是利用词袋模型算词频,比直接计算 tf-idf 做排序能好多少呢?
……
以前这个分类器,我们用逻辑回归挺好的,你为什么非要换成 RNN 呢?
用这个谱聚类做数据预处理,归根到底不还是利用词袋模型算词频,比直接计算 tf-idf 做排序能好多少呢?
……
不同模型的特质、适用场景,对当前数据的匹配程度;
不同算法对算力和时间的消耗;
不同框架对软硬件的需求和并行化的力度;
不同算法对算力和时间的消耗;
不同框架对软硬件的需求和并行化的力度;
实用层面
优化模型
评判模型性能的指标有哪些,如何计算?
正在使用的模型是怎么工作的?
这些超参数是什么含义,调整它们会产生哪些影响?
特征选取有哪些原则、方法可运用?
正在使用的模型是怎么工作的?
这些超参数是什么含义,调整它们会产生哪些影响?
特征选取有哪些原则、方法可运用?
针对实际问题定向建模
真正创造价值的,从来都是解决实际问题的人
『02 | 学习机器学习原理,改变看待世界的方式 』
破除迷信
人工智能是一个学术研究领域,目前在工业界有一定的应用和探索。AI 归根到底是个技术问题,可学、可用、可研究亦可质疑,而不是只能顶礼膜拜的法术神功。
追本溯源
深度学习,早年是从属于机器学习的神经网络,因为运算能力不够而被束之高阁多年,近些年借助计算机硬件和分布式计算的发展而大放异彩。
精进看待世界的方法
统计学习方法
机器学习原理
人类的道德标准实际是一种社会层面的极大似然估计。
遗忘是学习的一个步骤,是一种对信息的过滤方法,也是人类在脑力有限情况下对自身大脑的一种保护机制。
人类的偏见是一种长期训练的结果,在信息极其匮乏的情况下,对人们做决定往往是有正向帮助的。信息越丰富,偏见的负面影响也就越严重。
大多数人最常用的思维模型是 KV Pair,有些人似乎终身只有这一种思维模型。
一般人往往默认一类事物的所有个体在概率空间是均匀分布的。在考虑某一个事物个体时,对其在同类事物中所处的位置——是小概率事件还是常态?发生概率相对之前是稳定、上升还是下降?——通常毫不在意,而一概认为被提及的个体很重要。
对于原因和结果的关系,多数人根本没想过去探究其转换模型,而直接默认是线性关系。比如:A 地的年均 PM2.5 指数是 B 地的 10 倍,PM2.5 被认为与肺癌发病率有关,于是想当然以为 A 地肺癌发病率是 B 地 10 倍。
当一件事物比较复杂,涉及到多个方面的时候,要对它有一个全面的评价,目前最常用的方法是构建一个线性回归模型:选定一些特征,针对每个特征独立打分,最终加权求和(例如大学排名之类)
线性回归是一个非常简单的模型,往往无法达到很好的效果。但即使这样简单的模型,很多人还是无法掌握。
面对一项事物,既不能列举出其主要特征,也不知道如何评估每个特征,更不用提再加权求和了。多数人最常用的全面评价标准,如果是一手资料则一般以某(几)个个例的某个特征来代替全集;如果是二手资料,则一般选择相信自己最先接触到的他人结论。
『03 | 如何学习“机器学习” 』
以模型为驱动,了解“机器学习”的本质
反复学习,从记忆到掌握
第一遍学掌握一个模型
线性回归
掌握机器学习数据、模型、算法相互作用的基本关系,训练过程和评价标准
第二遍学习掌握2-3个模型
第三遍学习掌握本课列出的大部分模型
数学需要多精深?
基础数学概念
学习的最初阶段
学过坐标系;
了解函数、向量和矩阵的概念;
能从直观角度对求导、求微与函数的关系有所理解;
并掌握最简单的矩阵运算。
了解函数、向量和矩阵的概念;
能从直观角度对求导、求微与函数的关系有所理解;
并掌握最简单的矩阵运算。
起码也要读懂一组公式推导中的第一个和最后一个式子
读懂它们都针对哪些变量进行了怎么样的运算;
这些变量和运算的物理意义是什么;
第一个式子是对哪种真实场景的数学描述;
最后推导的结果又具备怎样的特征
这些变量和运算的物理意义是什么;
第一个式子是对哪种真实场景的数学描述;
最后推导的结果又具备怎样的特征
两条路径反刍数学知识
力求理解每一步推导过程
复习一下大学本科的高数(数学分析)、概率统计和线性代数
制定数学知识速查手册
机器学习常用微积分知识速查手册
机器学习常用线性代数知识速查手册
『04 | 为什么要学 Python 以及如何学 Python 』
太方便的编程语言 :Python
说人话
开发者不需要关注底层; 编写 Python 代码时不用自己费心照顾存储、网络等资源。尤其是,写 AI 相关的程序时,处理大量非结构化数据是必然要求。针对这一场景,Python 的动态类型设计正好大展拳脚;
语法简单直观,毫不啰嗦;
表达形式一致。
语法简单直观,毫不啰嗦;
表达形式一致。
读懂,又容易整合
大量机器学习支持库
NumPy
sklearn(scikit-learn)
Python 的江湖地位
语言简单易学,支持库丰富强大
TensorFlow、Caffe 之类的深度学习框架,主体都是用 Python 来实现,提供的原生接口也是 Python。
怎么学 Python
阅读官网文档或中文版教程,并在实践中通过 Stack Overflow 直接查找所需实现问题的 Solution,可能是比读书更好的学习编程语言的方法
官网文档
中文版教程
《Python 编程从入门到实践》(Eric Matthes)
(1)安装 Python 运行环境
在你的系统上安装好 Python 3
(2)编写第一个 Python 程序:“Hello world”
在命令行直接运行;
编写一个 Python 文件,将 print hello world 封装为一个函数,通过 main 函数调用它来运行;
编写一个 class,将 print hello world 封装为一个 method,通过 main 函数创建 class 实例来运行 method。
(3)编写一个或者多个复杂点的程序,用(2)中第2种或第3种方式执行
具体程序的功能可以自己定义,目的是借此了解下面这些概念:数据类型、变量、函数、参数、返回值、调用、递归……
学习流程控制:顺序、条件、循环
搞清几种不同类型:array、list、dict、set 的用法
在这个过程中,学习什么是静态类型、什么是动态类型、什么是强类型、什么是弱类型,这些不同设计的目的和应用场景分别是什么
写写 binary search 和 quick sorting
尝试一下递归和非递归的不同实现
(4)编写程序练习文件读写,文件和目录操作
务必学会将 tsv、csv 之类的文件读入 array、list、dict 等结构,以及将这些变量打印到文本文件中的方法
(5)开始写第一个机器学习程序
import numpy 和 sklearn
找一个模型,比如 Logistic Regression
(6)自己设置一个实际问题,并准备数据。修改(5)的程序,用自己的数据训练并测试模型
(7)逐行解读(6)中调用的 sklearn 函数的实现代码,结合该模型的原理,对比印证,彻底搞懂一个算法的实现细则
例子中的:classifier.fit() 和 classifier.predict()
(8)不依赖 sklearn,自己动手实现一个训练 LR 模型的算法
(3)原理
『05 | 机器是如何学习的? 』
【1】介绍
让机器自己学会某种东西
计算机程序能够处理的,只有数值和运算
数值
将事物数值化
概念 <-> 数值
运算
将事物的变化和不同事物之间的关联转化为运算
关系 <-> 运算
【2】机器学习的基本原理
基于规则的(Rule-Based) 计算机程序
猫妈妈让小猫去捉老鼠,小猫问:“老鼠是什么样子啊?”
猫妈妈说:“老鼠长着胡须。”结果小猫找来一头大蒜。
猫妈妈又说:“老鼠四条腿。”结果小猫找来一个板凳。
猫妈妈再说:“老鼠有一条尾巴。”结果小猫找来一个萝卜。
猫妈妈说:“老鼠长着胡须。”结果小猫找来一头大蒜。
猫妈妈又说:“老鼠四条腿。”结果小猫找来一个板凳。
猫妈妈再说:“老鼠有一条尾巴。”结果小猫找来一个萝卜。
基于机器学习模型的(Model-Based) 计算机程序
猫妈妈可以先告诉它:要注意老鼠的耳朵、鼻子和尾巴。
然后小猫通过对比发现:老鼠的耳朵是圆的,别的动物要么没耳朵,要么不是圆形耳朵;老鼠都有尾巴,别的动物有的有,有的没有;老鼠的鼻子是尖的,别的动物不一定是这样。
然后小猫就用自己学习到的:“老鼠是圆耳朵、有尾巴、尖鼻子的动物”的信念去抓老鼠,那么小猫就成了一个“老鼠分类器”。
然后小猫通过对比发现:老鼠的耳朵是圆的,别的动物要么没耳朵,要么不是圆形耳朵;老鼠都有尾巴,别的动物有的有,有的没有;老鼠的鼻子是尖的,别的动物不一定是这样。
然后小猫就用自己学习到的:“老鼠是圆耳朵、有尾巴、尖鼻子的动物”的信念去抓老鼠,那么小猫就成了一个“老鼠分类器”。
类比
机器(Machine)
学习(Learning)
数据(Data)
特征(Feature)
模型(Model)
算法(Algorithm)
【3】有监督学习 vs 无监督学习
有监督学习
通过标注数据进行学习的方法,就叫做有监督学习或直接叫监督学习(Supervised Learning)。
标注(Labeling)
给数据样本(Sample)打上标签的过程
无监督学习
如果用于学习的数据只有样本,没有标签,那么通过这种无标注数据进行学习的方法,就叫做无监督学习(Unsupervised Learning)
小马的分类
关注的特征(Features)
独角和翅膀
3个小马种族
独角兽
两个有独角的一组(她们叫独角兽)
飞马
两个有翅膀的一族(她们叫飞马)
陆马
另外两个很正常的一组(她们叫陆马)
『06 | 机器学习三要素之数据、模型、算法 』
【1】数据
源数据
向量空间模型和无标注数据
向量空间模型(Vector Space Model,VSM)
二维的向量 A=[a_1,a_2]
a_1 :是否有独角
有: a_1 = 1
否: a_1 = 0
a_2 :是否有翅膀
无标注数据
特征向量(Feature Vector)
X_1,……,X_6
6匹小马--->6个向量
X_1 = [1,0]
X_2 = [0,0]
X_3 = [0,0]
X_4 = [0,1]
X_5 = [0,1]
X_6 = [1,0]
X_2 = [0,0]
X_3 = [0,0]
X_4 = [0,1]
X_5 = [0,1]
X_6 = [1,0]
有标注数据
三维特征向量 X:X=[x1,x2,x3]
老鼠分类器的源数据
x1
耳朵是圆的
x2
有细长尾巴
x3
是尖鼻子
老鼠及其他动物对应的数据VSM
X_1 = [1,1,1]; y = 1
X_2 = [1,1,1]; y = 1
X_3 = [1,1,1]; y = 1
X_4 = [1,1,1]; y = 1
X_5 = [1,1,1]; y = 1
X_6 = [0,1,1]; y = 0
X_7 = [0,0,0]; y = 0
X_8 = [0,1,0]; y = 0
X_9 = [0,0,1]; y = 0
X_2 = [1,1,1]; y = 1
X_3 = [1,1,1]; y = 1
X_4 = [1,1,1]; y = 1
X_5 = [1,1,1]; y = 1
X_6 = [0,1,1]; y = 0
X_7 = [0,0,0]; y = 0
X_8 = [0,1,0]; y = 0
X_9 = [0,0,1]; y = 0
变量 y:样本的标签
一个整型值 y 来表示是否为老鼠
是老鼠:1
不是老鼠:0
特征工程
下一步的 VSM 转换
【2】模型
训练(Train)
根据已经被指定的 f(x) 的具体形式——模型类型,结合训练数据,计算出其中各个参数的具体取值的过程
一个函数: y=f(x)
自变量 x(特征)
将喜羊羊转化到 VSM,变成 X = [0,0,0]
因变量 y(预期结果)
结果 y’= f(X)
y’=0
一个线性模型
【3】算法
有监督学习
目标:让训练数据的所有 x 经过 f(x) 计算后,获得的 y’ 与它们原本对应的 y 的差别尽量小。
目标函数:argmin J(theta)
优化算法
梯度下降法(Gradient Descent)
共轭梯度法(Conjugate Gradient)
牛顿法和拟牛顿法
模拟退火法(Simulated Annealing)
y’ 与 y 之间的差别
损失函数(Loss Function)L(y, y’)= L(y, f(x))
对于所有的训练数据的整理损失
代价函数(Cost Function):J(theta)
自变量 theta
有监督学习需要标注数据
无监督学习
『07 | 模型的获取和改进 』
【1】获取模型的过程
Step-1:数据准备
Step-1.1 数据预处理:收集数据、清洗数据、标注数据
Step-1.2 构建数据的向量空间模型(将文本、图片、音频、视频等格式的数据转换为向量)
Step-1.3 将构建好向量空间模型的数据分为训练集、验证集和测试集
【2】训练集、验证集和测试集
每个集合都应当是独立的,和另外两个没有重叠
3类集合:Step-1.3 中提到我们要将全部数据分割成训练集、验证集和测试集
1)训练集(Train Set)
用来做训练的数据的集合
2)验证集(Validation Set)
在训练的过程中,每个训练轮次结束后用来验证当前模型性能,为进一步优化模型提供参考的数据的集合
3)测试集(Test Set)
用来测试的数据的集合,用于检验最终得出的模型的性能
比率
训练集占大头
有些情况下(整体数据量不大,模型又相对简单时),验证集和测试集也可以合二为一
训练集:验证集:测试集
2:1:1
7:1:2
Step-2:训练——将训练集输入给训练程序,进行运算
训练程序的核心是算法,所有输入的向量化数据都会按该训练程序所依据的算法进行运算。
训练程序输出的结果,就是模型
【3】训练的过程
Step-2.1: 编写训练程序
Step-2.1.1: 选择模型类型;
Step-2.1.2: 选择优化算法;
Step-2.1.3: 根据模型类型和算法编写程序
Step-2.2: 训练 -> 获得临时模型
Step-2.3: 在训练集上运行临时模型,获得训练集预测结果
Step-2.4: 在验证集上运行临时模型,获得验证集预测结果
Step-2.5: 综合参照 Step-2.4 和 Step-2.5 的预测结果,改进模型
【4】改进模型
4.1)数据
大量的高质量训练数据,是提高模型质量的最有效手段
提高有限数据的质量
标准化操作
对数据进行归一化(Normalization)
对数据进行正则化(Regularization)
采用 Bootstrap 等采样方法处理有限的训练/测试数据,以达到更好的运算效果
根据业务进行特征选取
从业务角度区分输入数据包含的特征,并理解这些特征对结果的贡献
4.2)算法
调参(算法)
超参数
梯度下降方法学习 LR 模型时的步长(Alpha)
用 BFGS 方法学习 Linear-chain CRF 时的权重(w)
一个完整的过程,其中 3-5 往往要经由多次迭代
1.制定目标
2.制定目标
3.执行
4.验证
5.调整策略 -> 3
调参现成章法
例如:Grid Search
4.3)模型
模型类型选择
某个分类问题
Logistic Regression
Decision Tree
SVM
无论工具还是方法,选对的,别选贵的
不要迷信尖端技术 Cutting-edge Technology
DL 模型(CNN、DNN、RNN、LSTM 等等)
对于训练数据的需求比我们今天讲的统计学习模型要高至少一个量级
在训练数据不足的情况下,DL 模型很可能性能更差
4.4)调参(算法)
4.5)模型类型选择
Step-2.6: Step-2.2 到 Step-2.5 反复迭代,直至获得让我们满意,或者已经无法继续优化的模型
Step-3:测试——将测试集数据输入给训练获得的模型,得到预测结果;再将预测结果与这些数据原本预期的结果进行比较
计算模型质量的衡量指标
Precision
Recall
F1Score
『08 | 模型的质量和评判指标 』
【1】衡量模型质量
测试:衡量验证模型的质量
对比
实际预测结果
实际结果
预期结果
用一些知道预期预测结果的数据来对其进行预测,把实际的预测结果和实际结果进行对比,以此来评判模型的优劣
【2】分类模型评判指标: Precision、Recall 和 F1Score
精准率(Precision)
精准率:Precision=TP/(TP+FP),即在所有被预测为 Class_A 的测试数据中,预测正确的比率
召回率(Recall)
召回率:Recall=TP/(TP+FN),即在所有实际为 Class_A 的测试数据中,预测正确的比率。
F1Score
F1Score = 2*(Precision * Recall)/(Precision + Recall)
NOTE:这几个指标也可以用于 seq2seq 识别模型的评价。
seq2seq 识别实际上可以看作是一种位置相关的分类。每一种实体类型都可以被看作一个类别,因此也就同样适用 P、R、F1Score 指标。
【3】指标对应的是模型&数据集
P、R 和 F1Score 这一套指标,无论是这套,还是 ROC、PR 或者 AUC 等(这些大家可以自行查询参考),或者是任意的评价指标,都同时指向一个模型和一个数据集,两者缺一不可
训练集的 P、R 和 F1
验证集的 P、R 和 F1
测试集的P、R 和 F1
相关文章
ROC曲线-阈值评价标准
【4】模型的偏差和过拟合
解决办法
有针对性地选择更复杂/简单的模型类型
增加/减少特征;或者减小/增大正则项比重
增大训练数据量
图示
欠拟合(Underfitting)
现象
如果一个模型,在训练集上的预测结果就不佳,指标偏低,那一般是欠拟合的问题。
原因
选定模型类型太过简单,特征选取不够导致的
过拟合 (Overfitting)
现象
如果在训练集上指标很好,而在验证/测试集上指标偏低,则很可能是过拟合问题。
原因
模型太过复杂,特征选择不当(过多或组合不当)造成的
『09 | 最常用的优化算法—梯度下降法 』
【1】学习的目标
最小化目标函数
每一个机器学习模型都有一个目标函数
【2】凸函数
数学定义:某个向量空间的凸子集(区间)上的实值函数
在其定义域上的任意两点 ,有 f(tx + (1-t)y) <= tf(x) + (1-t)f(y),则称其为该区间上的凸函数。
举例
二维坐标系的一元凸函数
自变量取值区间是整个实数域的一元凸函数
自变量本身是二维的(二元函数)
【3】梯度下降法
获得其最小值的步骤
二维
在 J(w) 曲线上任取一点,放上一个没有体积的“小球”,然后让这个小球沿着该处曲线的切线方向“跨步”,每一步的步长就是
α,一直跨到最低点位置
α,一直跨到最低点位置
三维
三维的情况,可以想像在一个很大的碗的内壁上放上一个小球,每次,我们都沿着当时所在点的切线方向(此处的切线方向是一个二维向量)向前走一步,直到走到碗底为止。
【4】梯度下降的超参数
人为设定的参数,就叫做超参数
步长是算法自己学习不出来的,它必须由外界指定
步长设定的策略
问题
大小步长设定的矛盾
解决办法
平衡大小步伐的优缺点
一开始的时候先大步走,当所到达点斜率逐渐下降——函数梯度下降的趋势越来越缓和——以后,逐步调整,缩小步伐
【5】梯度下降的难点
问题
卡在局部极小值
走到了一个局部极小值就无法前进了
如果目标函数有多个极小值点(多个向下的“弯儿”)
解决办法
尝试几个不同的起始点
尝试一下大步长
【A】有监督学习 Ⅰ
(4)线性回归--回归模型
第10课:线性回归——从模型函数到目标函数
【1】从数据反推公式
模型函数:y = a + bx
常量
a 和 b 是常量参数
变量
x 是自变量
y 是因变量
【2】综合利用训练数据,拟合线性回归函数
整体差距: Cost Function
J(a,b)
公式:m 为样本的个数
参数说明
常量参数
变量
a 和 b 成了自变量
J(a,b) 是因变量
能够让因变量 J(a, b) 取值最小的自变量 a 和 b,就是最好的 a 和 b
一个样本的 y 和 y’ 的差异
预测年薪 y’ = a + bx
真实年薪 y = a + bx
【3】线性回归的目标函数
【4】线性=直线?
4.1)线性概念的混淆
很多人简单认为“线性回归模型假设输入数据和预测结果遵循一条直线的关系”
4.2)线性的含义
线性回归模型是:利用线性函数对一个或多个自变量(x 或 (x1,x2,...xk))和因变量(y)之间的关系进行拟合的模型。
线性函数的定义是:一阶(或更低阶)多项式,或零多项式
当线性函数只有一个自变量时,y = f(x)
一阶多项式
f(x) = a + bx (a、b 为常数,且 b≠0)
零阶多项式
f(x) = c (c 为常数,且 c≠0)
零多项式
f(x) = 0
如果有多个独立自变量,y=f(x1,x2,...,xk) 的函数形式则是
图示
训练数据集的特征是一维时
直线
线性回归模型可以在直角坐标系中展示,其形式是一条直线。
样本特征本身是多维时
平面
线性模型在三维空间中构成一个平面
特征是三维时
立体
最终模型在四维空间中构成一个体
多维特征
多元函数
线性模型函数是一个多维空间内的[一阶|零阶|零]多项式
【5】用线性回归模型拟合非线性关系
输入特征只有一个,如何在二维空间拟合直曲线?
特征从一个“变成”两个,拟合了一条二阶多项式对应的曲线
一维转二维
在二维向量空间里训练 f(X)=a+BX
一维也可以转为三维、四维、n 维
原本的 k 维也可以每一维都求平方后作为新特征引入,转为 2k 维
第11课:线性回归——梯度下降法求解目标函数
【1】y = a + bx 的目标函数
线性回归的目标函数J(a,b) 是一个二元函数
要求
满足的条件是:a 和 b 取这个值的时候,J(a,b) 的值达到最小。
求解
两个参数 a 和 b 的值
【2】斜率、导数和偏微分
梯度下降法
从任意点开始,在该点对目标函数求导,沿着导数方向(梯度)“走”(下降)一个给定步长,如此循环迭代,直至“走”到导数为0的位置,则达到极小值。
斜率
一元函数在某一点处沿 x 轴正方向的变化率称为导数
导数
函数 f(x) 在 x 轴上某一点 x0 处,沿着 x 轴正方向的变化率/变化趋势
如果是二元或更多元的函数(自变量维度 >=2),则某一点处沿某一维度坐标轴正方向的变化率称为偏导数
偏微分函数的值
求出目标函数的(偏)微分函数
目标函数自变量值域内每一点的导数值
微分(对应偏导数,二元及以上函数有偏微分)
(偏)微分则是一个函数,其中的每个点表达的是原函数上各点沿着(偏)导数方向的变化
常用规则
【3】梯度下降求解目标函数
目标函数J(a,b)
对a求导数
对b求导数
步骤
Step 1:任意给定 a 和 b 的初值
a = 0; b = 0;
Step 2:用梯度下降法求解 a 和 b
当下降的高度小于某个指定的阈值(近似收敛至最优结果),则停止下降
【4】通用线性回归模型的目标函数求解
【5】线性回归的超参数
【6】编写线性回归训练/预测程序
(5)朴素贝叶斯--分类模型
第12课:朴素贝叶斯分类器——从贝叶斯定理到分类模型
【1】分类 vs 回归
分类
预测一个标签(类型、类别)
分类模型则是给出特定的某几个离散值之一
回归
预测一个量
回归模型给出的预测结果是在某个值域(一般是实数域或其子集)上的任意值
【2】贝叶斯定理
2.1贝叶斯公式
在 B 出现的前提下 A 出现的概率,等于 A 和 B 都出现的概率除以 B 出现的概率
举例说明
例子1
我们假设:目前的全集是一个小学的小学一年级学生。
这个小学一年级一共100人,其中有男生30人。
穿白袜子的人数一共有20个,这20个人里面,有5个是男生。
那么请问,男生里面穿白袜子的人的出现概率为多少?
这个小学一年级一共100人,其中有男生30人。
穿白袜子的人数一共有20个,这20个人里面,有5个是男生。
那么请问,男生里面穿白袜子的人的出现概率为多少?
一共30个男生,5个穿白袜子,出现概率是5/30=1/6
P(A|B) = 0.25 * 0.2 / 0.3 = 1/6
A 指代“穿白袜子”,B 指代“是男生”
P(B)=30/100=0.3
这个小学一年级学生里面,男生的出现概率是 0.3
P(A)=20/100=0.2
穿白袜子的人的出现概率是0.2
P(B|A)=5/20=0.25
穿白袜子的人是男生这件事出现的概率是0.25
例子2
把场景从一个小学的一年级转换为某个大饭店的门口,我们根据以往数据,可以计算出:
所有来吃饭的客人中,会有10%的人喝酒 —— P(B),
所有客人中,会有20%的人驾车前来—— P(A),
开车来的客人中,会有5%喝酒 —— P(B|A)。
那么请问,在这个饭店喝过酒的人里,仍然会开车的比例—— P(A|B)是多少?
所有来吃饭的客人中,会有10%的人喝酒 —— P(B),
所有客人中,会有20%的人驾车前来—— P(A),
开车来的客人中,会有5%喝酒 —— P(B|A)。
那么请问,在这个饭店喝过酒的人里,仍然会开车的比例—— P(A|B)是多少?
P(A|B) = P(B|A) * P(A)/ P(B) =5%*20%/10%= 0.05 * 0.2 / 0.1 = 0.1=10%
2.2)一般化的贝叶斯公式
例子3
某 AI 公司招聘工程师,来了8名应聘者,这8个人里,有5个人是985院校毕业的,另外3人不是。
面试官拿出一道算法题准备考察他们。根据以前的面试经验,面试官知道:985毕业生做对这道题的概率是80%,非985毕业生做对率只有30%。
现在,面试管从8个人里随手指了一个人——小甲,让 TA 出来做题。结果小甲做对了,那么请问,小甲是985院校毕业的概率是多大?
面试官拿出一道算法题准备考察他们。根据以前的面试经验,面试官知道:985毕业生做对这道题的概率是80%,非985毕业生做对率只有30%。
现在,面试管从8个人里随手指了一个人——小甲,让 TA 出来做题。结果小甲做对了,那么请问,小甲是985院校毕业的概率是多大?
分析
小甲的毕业院校有两种可能,也就是A={A1,A2},
A1—— 被选中的人是985毕业的;
P(A1) = 5/8
A2—— 被选中的人不是985毕业的。
P(A2) = 3/8
P(A2) = 3/8
B —— 被选中的人做对了面试题
P(B|A1) = 80% = 0.8(985毕业生做对该道面试题的先验概率)
P(B|A2) = 30% = 0.3(非985毕业生做对该道面试题的先验概率)
结果:小甲是985毕业的概率是81.6%
P(A1|B)=P(B|A1)*P(A1)/{P(B|A1)*P(A1)+P(B|A2)*P(A2)}=0.8*5/8 / {0.8*5/8 + 0.3*3/8}= 0.8163
2.3)连续概率的贝叶斯定理
【3】朴素贝叶斯分类器(Naïve Bayes Classifier)
频率 VS 概率
朴素贝叶斯算法
一款极简单的朴素贝叶斯分类器
频率 VS 概率
第13课:朴素贝叶斯分类器——条件概率的参数估计
【1】不再简单地将频率当作概率
【2】两个学派
【3】极大似然估计 (Maximum Likelihood Estimation, MLE)
【4】正态分布的极大似然估计
【5】用代码实现朴素贝叶斯模型
【6】参考资料
50行代码就完成朴素贝叶斯分类器的训练和预测全过程
(6)逻辑回归--分类模型
第14课:逻辑回归——非线性逻辑函数的由来
【1】逻辑回归
逻辑函数又被称为 Sigmoid 函数(S 函数)
表现为 S 形曲线,
Logistic Regression (LR),一般翻译为逻辑回归
【2】指数增长
Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0,1之间
W(t)
W(t)表示的是存量
例子:W(t) 表示人口/化合物数量,人口(或者化合物)数量与时间的函数
自变量t表示时间
W′(t)
增长率函数
假设是:W′(t) 与W(t) 成正比,也就是有:W′(t)=bW(t)
指数函数代入
指数函数的微分还是一样
【3】逻辑函数
对指数增长的修正
逻辑分布
逻辑函数的通用形式
【4】追本溯源的理论学习
【5】线性 VS 非线性
第15课:逻辑回归——用来做分类的回归模型
【1】回归模型做分类
【2】逻辑回归的目标函数
优化算法
【3】实例及代码实现
【4】LR 处理多分类问题
【5】附录
(7)决策树--既能分类又能回归的模型
『16 | 既能分类又能回归的模型』
【1】决策树
什么是决策树
树结构
二叉树
非二叉树
非叶节点
特征
类别/回归函数
分支
特征的取值
直观理解决策树
例子:要不要接受一个 Offer?
非叶子节点(含根节点),统称决策节点
(1)年薪
(2)通勤时间
(2)通勤时间
最重要的是根节点,越靠近根节点,也就越重要
如果年薪低于5万美元,也就不用考虑了,直接 say no
当工资足够时,如果通勤时间大于一个小时,也不去那里上班;
就算通勤时间不超过一小时,还要看是不是有免费咖啡,没有也不去。
构建决策树
训练得到一棵决策树的步骤
1、准备若干的训练数据(假设 m 个样本);
2、标明每个样本预期的类别;
3、人为选取一些特征(即决策条件);
4、为每个训练样本对应所有需要的特征生成相应值——数值化特征;
5、将通过上面的1-4步获得的训练数据输入给训练算法,训练算法通过一定的原则,决定各个特征的重要性程度,然后按照决策重要性从高到底,生成决策树。
2、标明每个样本预期的类别;
3、人为选取一些特征(即决策条件);
4、为每个训练样本对应所有需要的特征生成相应值——数值化特征;
5、将通过上面的1-4步获得的训练数据输入给训练算法,训练算法通过一定的原则,决定各个特征的重要性程度,然后按照决策重要性从高到底,生成决策树。
【2】几种常用算法
ID3 算法(Iterative Dichotomiser 3)
以信息增益为度量,选择分裂后信息增益最大的特征进行分裂
不足
缺点:ID3一般会优先选择取值种类较多的特征作为分裂特征。
被取值多的特征分裂,分裂成的结果也就容易细;分裂结果越细,则信息增益越大。
被取值多的特征分裂,分裂成的结果也就容易细;分裂结果越细,则信息增益越大。
不足2
就是不能处理取值在连续区间的特征。
C4.5 信息增益率(Gain Ratio)
C4.5 的优良性能和对数据和运算力要求都相对较小的特点,使得它成为了机器学习最常用的算法之一。
它在实际应用中的地位,比 ID3 还要高
它在实际应用中的地位,比 ID3 还要高
CART:Classification and Regression Tree 分类和回归树
CART 算法的运行过程和 ID3 及 C4.5 大致相同,不同之处在于:
CART 的特征选取依据不是增益量或者增益率,而是 Gini 系数(Gini Coefficient)。每次选择 Gini 系数最小的特征作为最优切分点。
CART 是一棵严格二叉树。每次分裂只做二分
Gini 系数(Gini Coefficient)
二分类问题中,两种可能性的概率越不平均,则越可能是更佳优越的切分点
Gini 指数(Gini Index)
基尼系数乘100倍作百分比表示
回归树和分类树的区别
回归树
最终的输出值是连续的
分类树
最终的输出值是离散的
特征:都要被当作离散的来处理
如果对应的分裂特征是连续的,处理与 C4.5 算法相似
如果特征是离散的,而该特征总共有 k 个取值,则将这一个特征转化为 k 个特征,对每一个新特征按照是不是取这个值来分 Yes 和 No
『17 | 告诉你 Hello Kitty 是人是猫』
【1】Hello Kitty 的种族问题
【2】训练数据
【3】特征选取
【4】用 ID3 算法构造分类树
【5】后剪枝优化决策树
决策树剪枝
后剪枝优化 Hello Kitty 树
【6】用决策树对 Hello Kitty 进行分类
【7】代码实现
【B】有监督学习
SVM(支持向量机)
Support Vector Machine
Support Vector Machine
第18课:SVM——线性可分 SVM 原理
【1】线性可分和超平面
超平面(hyperplane)
间距 margin
【2】线性可分支持向量机
目标:解决二分类的问题
SVM 的目标
第19课:SVM——直观理解拉格朗日乘子法
【1】可视化函数及其约束条件
(被约束的)函数
(函数的)约束条件
约束条件对函数的约束
一个例子
什么是拉格朗日乘子法
一种寻找多元函数在其变量受到一个或多个条件的约束时的极值的方法
我们要在满足 这个等式的前提下,求 函数的最小值(最大值道理相同)
【2】拉格朗日乘子法
目标函数
等式约束条件
拉格朗日乘子和拉格朗日函数
不等式约束条件
KKT 约束条件
目标函数转化为拉格朗日函数
第20课:SVM——对偶学习算法
第21课:SVM——线性 SVM,间隔由硬到软
第22课:SVM——非线性 SVM 和核函数
W(t) 表示人口/化合物数量,人口(或者化合物)数量与时间的函数
SVR
第24课:直观认识 SVM 和 SVR
SVM 实例
线性可分 SVM
线性 SVM
核函数的作用
RBF 核函数的威力
SVR 实例
第23课:SVR——一种“宽容”的回归模型
严格的线性回归
宽容的支持向量回归(SVR)
原理
SVR 的两个松弛变量
SVR 的主问题和对偶问题
SVR 的主问题
SVR 的拉格朗日函数和对偶问题
求解 SVR 对偶问题
用 SMO 算法求解 SVR
支持向量与求解线性模型参数
SVR 的核技巧
HMM
第25课:HMM——定义和假设
【1】一些基本概念
概率模型(Probabilistic Model)
推断(Inference)的本质是:
利用可观测变量,来推测未知变量的条件分布
利用可观测变量,来推测未知变量的条件分布
可观测变量的集合命名为
O
O
感兴趣的未知变量的集合命名为
Y
Y
模型
隐马尔可夫模型(HMM)
条件随机场(CRF)
朴素贝叶斯
生成模型P(O,Y)
逻辑回归
判别模型P(Y|O)
生成模型P(O,Y) VS 判别模型P(Y|O)
生成模型(Generative Model)
O 与 Y 的联合概率分布P(O,Y)
判别模型(Discriminative Model)
条件概率分布:P(Y|O)
在分类问题上,判别模型一般更具优势
概率图模型(Probabilistic Graphical Model)
有向图模型(贝叶斯网络)
用有向无环图表示变量间的依赖关系;
分类
动态贝叶斯网络
对变量序列建模的贝叶斯网络又叫做动态贝叶斯网络。HMM 就是最简单的动态贝叶斯网络。
无向图模型(马尔可夫网)
用无向图表示变量间的相关关系
马尔可夫链,马尔可夫随机场和条件随机场
马尔可夫链(Markov Chain)
一个随机过程模型,它表述了一系列可能的事件,在这个系列当中每一个事件的概率仅依赖于前一个事件。
【2】隐马尔可夫模型(Hidden Markov Model,HMM)
HMM 定义
生成模型P(O,Y)
HMM 就是贝叶斯网络的一种
HMM 基本假设
齐次马尔可夫假设
观测独立性假设
确定 HMM 的两个空间和三组参数
2个空间
状态空间 S
观测空间 O
3组参数
状态转移概率
输出观测概率
初始状态概率
第26课:HMM——三个基本问题
第27课:HMM——三个基本问题的计算
CRF
第28课:CRF——概率无向图模型到线性链条件随机场
【1】概率无向图
【2】条件随机场(Conditional Random Field,CRF)
【3】线性链 CRF
【4】HMM VS 线性链 CRF
第29课:CRF——三个基本问题
【1】线性链 CRF 的形式化表示
【2】CRF 的三个基本问题
【谱聚类】
『32 | 无需指定簇数量的聚类』:基于图切割的谱聚类(Spectral Clustering)
【1】无须事先指定簇数量的聚类
【2】算法实现
步骤
图切割
谱聚类
【3】算法原理
基本原理
推导过程
构造矩阵
拉普拉斯矩阵性质
图分割和矩阵运算的关系
将图切割成两个子图
Cut(⋅) 函数-截函数
求解目标函数
通过求 f′Lf 的最小值来切割图
从切割成 2 份到切割成 k 份的推演
规范化拉普拉斯矩阵
【4】实例
『33 | 估计含有隐变量的概率模型的参数』
【1】含有隐变量的概率模型
含有隐变量的对数似然函数
【2】EM 算法基本思想
近似极大化
真正的目标
【3】EM 算法的推导过程
优化目标
应用 EM 算法
【4】EM 算法步骤
GMM
『34 | 将“混”在一起的样本各归其源』
个体 vs 集体
已知每个簇的原始分布
已知分布条件下的样本归属
学习概率密度函数参数
同分布的混合模型
『35 | 用 EM 算法求解 GMM』
高斯分布
高斯混合模型(GMM)
用 EM 算法学习 GMM 的参数
GMM 实例
深度学习
『38 | 人工智能和神经网络』
『39 | 几种深度学习网络』
『40 | 深度学习的愿景、问题、应用和资料』
0 条评论
下一页