机器学习笔记(一)机器学习简介 2020-06-14 笔记 暂无评论 1353 次阅读 [TOC] # 懂算法的4个等级 1. 懂原理(不会数学推导不影响理解原理) 2. 会用工具(现成的语言、包,解决实际问题) 3. 做原型(用编程语言自己实现) 4. 会优化(根据自己的需求,定制化的做算法、改进) # 机器学习的几个基本概念 ## 机器学习方法流程 1. 输入数据(Raw data) 2. 特征工程(Features) - 特征:输入数据的基础上做的整理、加工、拓展、合并等形成的新的特征。 (有可能和原数据一样。) - 例如:年龄,分成青年10~30,中年31~50,老年51~100。 3. 模型训练(Models) - 如果是有监督学习,要有模型评估。 4. 模型部署(Deploy in production) 5. 模型应用(Predictions) - 使用过程中,要定时更新。 (因为时代在变) ## 输入空间与输出空间 1. 输入空间(Input Space) - 将输入的所有可能取值的集合 2. 输出空间(Output Space) - 将输出的所有可能取值的集合 >例1:采集了一些父子的身高,对这些数据进行建模,然后使用模型,根据输入的父亲的身高去预测其子身高。 ![](https://www.proup.club/usr/uploads/2020/06/1607103564.png) 父亲身高取值范围就是**输入空间**, 儿子身高取值范围就是**输出空间**。 从安全考虑,输入输出空间可以设成[0,+∞] 从实际业务考虑,实际取值不会那么宽,但肯定是连续区间。例如[100,300] >例2:泰坦尼克生存预测 ![](https://www.proup.club/usr/uploads/2020/06/896458436.png) 这个预测不具备普适性。可以用来学习建模过程。 survived是输出,其他的行都是输入。 输出空间是离散的,{0,1}。 - 输入空间和输出空间可以是有限元素的集合,也可以是整个欧式空间 - 输入控件和输出空间可以是连续值集合,也可以是离散值集合。 - 输入空间和输出空间可以是同一个空间,也可以是不同空间。 - 通常输出空间会比输入空间小。 ## 特征空间(属性) 1. 特征(Feature) - 即属性。 - 每个输入实例的各个组成部分(属性)称作原始特征。 - 基于原始特征还可以扩展出更多的衍生特征。 2. 特征向量(Feature Vector) - 由多个特征组成的集合,称作特征向量 3. 特征空间(Feature Space) - 特征向量存在的空间 >例1:性别,输入空间是{'male','female'},特征空间也可以是{'male','female'}。 >例2:票价,输入空间是[3,15],对应3~15美元,特征空间可以是{'L','M','H'},对应“低”,“中”,“高”三个档次。 - 特征空间中每一维都对应了一个特征(属性)。 - 特征空间可以和输入空间相同,也可以不同。 - 需将将实例从输入空间映射到特征空间。 - 模型实际上是定义于特征空间之上的。 # 机器学习的实质 **机器学习的过程就是:从假设空间中找一种,找到一种与输入数据最匹配的一种假设。** ## 假设空间 1. 假设(模型) - 由输入空间到输出空间的映射 2. 假设空间 - 由输入空间到输出空间的映射的集合 - 假设空间的确定意味着学习范围的确定。 - 假设空间指的是问题所有假设组成的空间,可以把学习过程看做是在假设空间中搜索的过程,搜索目标是寻找与训练集“匹配”的假设。 例子:某商品的浏览、购买记录中,记录了性别、信用度及是否购买,基于数据建模。其中: [输入]Gender取值为{Female,Male} [输入]Credit取值为{Hight,Medium,Low} [输出]Buy取值为{True,False} ![](https://www.proup.club/usr/uploads/2020/06/607135663.png) ①所有可能的输入 输入记录中所有可能出现值的组合为2×3=6个 ![](https://www.proup.club/usr/uploads/2020/06/520467677.png) ②所有可能的输入输出(不是假设空间) ![不是假设空间](https://www.proup.club/usr/uploads/2020/06/2924786804.png) ③假设空间 下图(左)(右)是2个假设: ![拆成两个假设](https://www.proup.club/usr/uploads/2020/06/405934632.png) 找假设空间: ![](https://www.proup.club/usr/uploads/2020/06/3669735848.png) 每个?有两种取法,所以有$$2^6$$个假设。 通常还会加上一个特殊的全空假设$$\varnothing$$,即$$2^6+1$$ 更一般的,假设空间H的假设个数$$M^{\prod^n_{i=1}N_i}+1$$ ![](https://www.proup.club/usr/uploads/2020/06/3713463118.png) # 机器学习方法的三要素 **方法=模型+策略+算法** 1. 模型 - 输入空间到输出空间的映射关系。 - 学习过程即为从假设空间中搜索适合当前数据的假设。 - 确定学习范围。 - 分析当前需要解决的问题,确定模型。 - 预测分类 - 分类(Classification) - 预测取值 - 回归(Regression) - 发现结构 - 聚类(Clustering) - 发现异常数据 - 异常检测(Anomaly Detection) 2. 策略 - 从假设空间众多假设中选择到最优的模型的学习标准或规则。 - 确定学习规则 - 需要解决以下问题: - 评估某个模型对单个训练样本的效果 - 评估某个模型对训练集的整体效果 - 评估某个模型对包括训练集、预测集在内的所有数据的整体效果 - 定义几个指标来衡量上述问题: - 损失函数(Loss Function) - ![](https://www.proup.club/usr/uploads/2020/06/3951613937.png) - 用来衡量预测结果和真实结果之间的差距。 - 其值越小,代表预测结果与真实结果越一致。 - 通常是一个非负实值函数。 - 通过各种方式缩小损失函数的过程被称为**优化**。 - 损失函数记做L(Y,f(x))。 - 例: - 0-1损失函数 - 预测值与实际值精确相等(或相差小于阈值),即“没有损失”,为0。 - 否则意味着“完全损失”,为1。 - ![](https://www.proup.club/usr/uploads/2020/06/4293105099.png) - ![](https://www.proup.club/usr/uploads/2020/06/1451321847.png) - 平方损失函数 - ![](https://www.proup.club/usr/uploads/2020/06/86193048.png) - 优势: - 误差为正,累加不会被抵消 - 对大误差的惩罚大于小误差 - 数学计算简单、友好,**导数为一次函数** - 绝对损失函数 - ![](https://www.proup.club/usr/uploads/2020/06/2506088168.png) - 简单易懂 - 计算不方便(可微才能求导) - 对数损失函数 - ![](https://www.proup.club/usr/uploads/2020/06/2460670518.png) - 单调性 - 在求最优化问题时,结果与原始目标一致 - 可将乘法转化为加法,简化计算。 - 指数损失函数 - ![](https://www.proup.club/usr/uploads/2020/06/2310287472.png) - 单调性、非负性 - 越接近正确结果误差越小 - 折叶损失函数 - ![](https://www.proup.club/usr/uploads/2020/06/3539421630.png) - 也称铰链损失 - 对于判定边界附近的点的惩罚力度较高 - 常见于SVM - 风险函数 - 经验风险 - 整个训练集所有记录均进行一次预测,求取损失函数,将所有值累加,即为经验风险。 - 经验风险越小说明模型f(x)对训练集的拟合程度越好。 - ![](https://www.proup.club/usr/uploads/2020/06/2563186310.png) - 样本较小时,仅关注经验风险,很容易导致过拟合。 - 期望风险 - 所有数据集(包括训练集和预测集,遵循联合分布P(X,Y))的损失函数的期望值。 - ![](https://www.proup.club/usr/uploads/2020/06/26158423.png) - 结构风险 - 在经验风险的基础上,增加一个正则化项,或者叫做惩罚项 - ![](https://www.proup.club/usr/uploads/2020/06/3075590650.png) - λ为一个大于0的系数 - J(f)表示模型f(x)的复杂度 - 规范化函数λJ(f)有多种选择 - 是模型复杂度的单调递增函数 - 模型越复杂,值越大,惩罚力度越大 - 常用模型的参数向量的范数 - 范数(Norm) - 是数学中的一种基本概念 - 定义在赋泛线性空间中 - 满足 - 非负性 - 齐次性 - 三角不等式等条件的量 - 常常用来度量向量的长度或者大小 - Lp范数(p是数字):![](https://www.proup.club/usr/uploads/2020/06/570895879.png) - 零范数 - ![](https://www.proup.club/usr/uploads/2020/06/545900204.png) - 就是下标 - 非0元素的个数 - 使用L0范数,期望参数大部分为0,即让参数是稀疏的。 - 一范数 - ![](https://www.proup.club/usr/uploads/2020/06/112165402.png) - 就是绝对值 - 各元素的绝对值之和 - 使用L1范数,会使参数稀疏。 - L1也被称为稀疏规则算子。 - 会让某些项的参数变为0。 - 二范数 - ![](https://www.proup.club/usr/uploads/2020/06/1483922041.png) - 就是模 - 个元素的平方和求平方根。 - 使得每个元素都很小,但不会等于0,而是接近0 - 迹范数 - Frobenius范数 - 核范数 - 基本策略: - 经验风险最小(ERM:Empirical Risk Minimization) - 结构风险最小(SRM:Structural Risk Minimization) 3. 算法 - 学习模型的具体的计算方法,通常是求解最优化问题。 - 按规则在范围中学习。 # 经验风险与结构风险 ## 经验风险vs期望风险 1. - 期望风险是模型对全局(所有数据集)的效果 - 经验风险是模型对局部(训练集)的效果 2. - 期望风险往往无法计算,即联合分布P(X,Y)通常是未知的; - 经验风险可以计算 3. 当训练集足够大时,经验风险可以替代期望风险,即局部最优代替全局最优 ## 经验风险vs结构风险 1. 经验风险越小,模型决策函数越复杂,其包含的参数越多 2. 当经验风险函数小到一定程度就出现了过拟合现象 3. 防止过拟合现象的方式,就要降低决策函数的复杂度,让惩罚项J(f)最小化 4. 需要同时保证经验风险函数和模型决策函数的复杂度都达到最小化 5. 把两个式子融合成一个式子得到结构风险函数然后对这个结构风险函数进行最小化 ---------- # 模型选择的原则 ## 训练误差、泛化误差 - 误差(Error) - 模型的预测输出值与其真实值之间的差异 - 训练(Training) - 通过已知的样本数据进行学习,从而得到模型的过程 - 训练误差(Training Error) - 模型作用于训练集时的误差 - 泛化(Generalize) - 由具体的、个别的扩大为一般的 - 从特殊到一般,称为泛化 - 对机器学习的模型来讲,泛化是指模型作用于新的样本数据(非训练集) - 泛化误差(Generalization Error) - 模型作用于新的样本数据时的误差 ![](https://www.proup.club/usr/uploads/2020/06/1464664188.png) ## 模型容量,过拟合,欠拟合 - 模型容量(Model Capacity) - 是指其拟合各种模型的能力 - 过拟合(Overfitting) - 是某个模型在训练集上表现很好,但是在新样本上表现差。 - 模型将训练集的特征学习得太好,导致一些非普遍规律被模型接纳和体现,从而在训练集上表现好,但是对于新样本表现差。 - 反之称为**欠拟合(Underfitting)** - 即模型对训练集的一般性质学习较差,模型作用于训练集时表现不好。 ![](https://www.proup.club/usr/uploads/2020/06/1891009372.png) ## 模型选择 - 模型选择(Model Selection) 针对某个具体的任务,通常会有多种模型可供选择,对同一个模型也会有多组参数,可以通过分析、评估模型的泛化误差,**选择泛化误差最小的模型**。 ![](https://www.proup.club/usr/uploads/2020/06/662467355.png) - 蓝虚线:训练误差 - 绿线:泛化误差 - 红竖线:最合适的模型 - 泛化误差最小 - 训练误差比较小 - 红线左边:欠拟合区域 - 红线右边:过拟合区域 # 模型评估的方法 ## 评估思路 ### 评估泛化误差 通过实验,对模型的泛化误差进行评估,选出泛化误差最小的模型。 #### 1.数据集 待测数据集全集未知,使用测试集进行泛化测试,测试误差(Testing Error)即为泛化误差的近似。 - 数据集全集无法获取。 - 已知数据集分两部分 - 一部分用于训练 - 一部分用于测试 - 得到测试误差(Testing Error) - 用来近似泛化误差 **注意** - 测试集和训练集**尽可能互斥** - 否则就不叫“测试误差”,叫“训练误差” - 测试集和训练集**独立同分布** - 独立:测试集与训练集之间没有依赖关系 - 同分布:测试集和训练集最好数据分布是一致的 - 不同分布的例子:测试身高 - 测试集数据全来自冰岛 - 训练集数据全来自中国 ##### 留出法(Hold-out) 将已知数据集分成两个互斥的部分,其中一部分用来训练模型,另一部分用来测试模型,评估其误差,作为泛化误差的估计。 - 人为偏差 - 两个数据集的划分要尽可能保持数据分布一致性,避免因数据划分过程引入人为的偏差 - 分层采样(Stratified Sampleing) - 保持样本的类别比例相似,即采用分层采样 ![](https://www.proup.club/usr/uploads/2020/06/4255745401.png) - 偶然性 - 数据分割存在多种形式,会导致不同的训练集、测试集划分,单次留出法结果往往存在偶然性,其稳定性较差 - 通常会进行若干次随机划分、重复试验评估取平均值作为评估结果 ##### 交叉验证法(Cross Validation) - 将数据集划分k个大小相似的互斥的数据子集,子集数据尽可能保证数据分布的一致性(分层采样) - 每次从中选取一个数据集作为测试集,其余用做训练集 - 可以进行k次训练和测试,得到评估均值 - 该验证方法也称作k折交叉验证(k-fold Cross Validation) - 使用不同的划分,重复p次,成为p次k折交叉验证 ##### 留一法(Leave-One-Out, LOO) - 是k折交叉验证的特殊形式 - 将数据集分成两个,其中一个数据集记录条数为1,作为测试集使用,其余记录作为训练集训练模型。 - 训练出的模型和使用全部数据集训练得到的模型接近,其评估结果比较准确 - 缺点是当数据集较大时,训练次数和数据规模较大 ##### 自助法(Bootstrapping) - 是一种产生样本的抽样方法 - 实质是有放回的随机抽样。即从已知数据集中随机抽取一条记录,然后将该记录放入测试集同时放回原数据集,继续下一次抽样,直到测试集中的数据条数满足要求。 - 假设已知数据集D含有n条,采用自助法得到一个记录条数为n的测试集T。 - D中的一些数据会在T中出现多次,还有一些数据不会出现 - 一条数据被选中的概率是1/n,未被选中概率是1-1/n - 连续n次采样均未被选中的概率为:(1-1/n)^n,取极限:lim(n->∞,(1-1/n)^n)=1/e≈0.368 - 通过有放回的抽样获得的训练集去训练模型,不在训练集中的数据(总数量的1/3)去用于测试,这样的测试结果被称为**包外估计**(Out-of-Bag Estimate, OOB) #### 几种方法的适用场景 - 留出法 - ↑实现简单、方便,在一定程度上能评估泛化误差 - ↑测试集和训练集分开,缓解了过拟合 - ↓一次划分,评估结果偶然性大 - ↓数据被拆分后,用于训练、测试的数据更少了 - 交叉验证法(留一法) - ↑k可以根据实际情况设置,充分利用了所有样本 - ↑多次划分,评估结果相对稳定 - ↓计算比较繁琐,需要进行k次训练和评估 - 自助法 - ↑样本量较小时可以通过自助法产生多个自助样本集,且约有36.8%的测试样本 - ↑对于总体的理论分布没有要求 - ↓无放回抽样引入了额外的偏差 **几种方法的选择:** - 已知数据集数量充足时,通常采用留出法或者k折交叉验证法 - 对于已知数据集较小且难以有效划分训练集/测试集的时候,采用自助法 - 对于已知数据集较小且可以有效划分训练集/测试集的时候,采用留一法 # 模型的性能指标 ## 性能度量(Performance Measure) 评价模型泛化能力的标准。 对于不同的模型,有不同的评价标准,不同的评价标准导致不同的评价结果。 模型的好坏是相对的,取决于对于当前任务需求的完成情况。 ### 回归模型的性能度量 - 回归模型的性能度量通常选用**均方误差**(Mean Squared Error) - 给定样例集D={(x1,y1),(x2,y2),...,(xm,ym)} - 模型为f - 均方误差为:![](https://www.proup.club/usr/uploads/2020/07/819807213.png) ### 分类算法的性能度量 - 分类算法的性能度量: - 错误率 - 分类错误的样本占总样本数的比例 - 公式:E(f;D)=1/m||(f(xi)≠yi) - 精度 - 分类正确的样本占总样本数的比例 - 公式:acc(f;D)=1/m||(f(xi)=yi)=1-E(f;D) - 查准率 - 预测结果为正的样本中实际值也为正的比例 - 查全率 - 实际值为正的样本中被预测为正的样本的比例 - P-R曲线 - 查准率-查全率曲线 - 混淆矩阵 - 将预测分类结果和实际分类结果做成矩阵的形式显示 - Fβ-score - β值的不同体现了对查全率和查准率的不同倾向 - 公式:![](https://www.proup.club/usr/uploads/2020/07/3246499054.png) - β是整数。F1-score,F2-score。 - 受试者特征曲线(ROC)和曲线下面积(AUC) - TPR-FPR曲线(真正例率-假正例率曲线) - 代价曲线 - 不同类型的预测错误对结果影响不同而增加代价(cost),绘制P(+)cost-cost_norm曲线 ### 聚类算法的性能度量 - 外部指标(External Index) - 将聚类结果同某个参考模型进行比较 - Jaccard系数(Jaccrd Coefficient, JC) - JC = a/(a+b+c) - FM指数(Fowlkes and Mallows Index, FMI) - FMI = sqrt(a/(a+b)\*a/(a+c)) - Rand指数(Rand Index, RI) - RI = (2\*(a+d))/(m\*(m-1)) - 内部指标(Internal Index) - 不适用参考模型直接考察聚类结果 - DB指数(Davis-Bouldin Index, DBI) - ![](https://www.proup.club/usr/uploads/2020/07/1985336692.png) - Dunn指数(Dunn Index, DI) - ![](https://www.proup.club/usr/uploads/2020/07/2336105373.png) # 模型性能的比较 ## 模型比较 选择合适的评估方法和相应的性能度量,计算出性能度量后直接比较。 存在以下问题: 1. 模型评估得到的是测试集上的性能,并非严格意义上的泛化性能,两者并不完全相同。 2. 测试集上的性能与样本选取关系很大,不同的划分,测试结果会不同,比较缺乏稳定性。 3. 很多模型本身有随机性,即使参数和数据集相同,其运行结果也存在差异。 ## 假设检验 ### 统计假设检验(Hypothesis Test) 事先对总体的参数或者分布做一个假设,然后基于已有的样本数据取判断这个假设是否合理。 即样本和总体假设之间的不同是否纯属机会变异(因为随机性误差导致的不同),还是两者确实不同。 常用的假设检验方法有:t-检验法,卡方检验法、F-检验法等。 基本思想: - 从样本推断整体 - 通过反证法推断假设是否成立 - 小概率事件在一次试验中基本不会发生 - 不轻易拒绝原假设 - 通过显著性水平定义小概率事件不可能发生的概率 - 全称命题只能被否定而不能被证明 ### 假设检验的步骤 1. 建立假设 - 原假设(Null Hypothesis) - 收集证据希望推翻的假设,记做H0 - 备择假设(Alternative Hypothesis) - 收集证据予以支持的假设,记做H1 - 备择假设很难证明。 - 备择假设与原假设互为逆命题。 - 原假设不成立,备择假设就成立。 - 原假设如果成立,就没意义了,不能证明备择假设成立,也不能证明备择假设不成立。 - 假设的形式: - 双尾检验 - H0:μ=μ0,H1:μ≠μ0 不等于、有差异 - 左侧单尾检验 - H0:μ≥μ0,H1:μ<μ0 降低、减少 - 右侧单尾检验 - H0:μ≤μ0,H1:μ>μ0 提高、增加 2. 确定检验水准 - 检验水准(Size of a Test) - 又称:显著性水平(Significance level) - 记做α - 是指原假设正确,但是最终被拒绝的概率。 - 在做检验的过程中,会犯两种错误 - 原假设为真,被拒绝, - 称作第一类错误 - 其概率记做α - 即为显著性水平 - 取值通常为0.05、0.025、0.01等 - 原假设为假,被接收 - 称作第二类错误 - 其概率记做β - 即为**检验功效**(power of a test) 3. 构造统计量 - 根据资料类型、研究设计方案和统计推断的目的,选用适当检验方法和相应的统计量 - 常见的检验方法: - t检验 - 小样本(<30),总体标准差σ未知的正态分布 - F检验 - 即方差分析,检验两个正态随机变量的总体方差是否相等 - Z检验 - 大样本(>=30),平均值差异性检测,又称u检验 - 卡方检验 - 用于非参数检验,主要是比较两个及两个以上样本率以及两个分类变量的关联性分析 4. 计算p值 - p值 - 用来判定假设检验结果的参数,和显著性水平α相比 - 在原假设为真的前提下出现观察样本以及更极端情况的概率 - 如果p值很小,说明原假设出现的概率很小,应该拒绝。p值越小,拒绝原假设的里有越充足。 5. 得到结论 - 如果p值小于等于显著水平α,表明x小概率事件发生,拒绝原假设 - 统计量的值如果落在拒绝域或者临界值,则拒绝原假设,落在接收域则不能拒绝原假设。 ### 假设检验的例子 某工厂的一批产品,次品率μ未知,按规定,如果μ≤0.01,则该产品可以接受。 随机取样品100个,发现有3件次品,该批次产品是否达标? - 确定假设 - 原假设H0:μ≤0.01,备择假设μ>0.01 - 确定检验水平 - 采取最常用的α=0.05,或者更严格的α=0.01 - 构造统计量 - 产品是否符合二项式分布,原假设成立,则满足b(k;n,0.01) - 计算p值 -b(3;100,0.01)=P(X=k)=C(3,100)*0.01^3*(1-0.01)^97=0.06099 - 得到结论 - p值大于显著性水平α,不能拒绝原假设。 - 通过本次采样得到的样本数据,不能证明原假设H0不成立。 不能证明H0不成立,也不能证明H0成立。总之目前次品率到底是低于0.01还是高于0.01,在没有更多证据之前,没有任何结论。 ### 假设检验在模型比较中的应用 显不显著 等于 有没有价值 #### 以一元线性回归为例 - 回归系数的显著性检验:y=β0+β1x - 检验自变量x对因变量y的影响程度是否显著 - 假设误差ε满足均值为0的正态分布,原假设H0:β1=0,备择假设H1:β1≠0 - 使用T检验,如果原假设成立,则x和y并无线性关系 - 回归方程的显著性检验:y=β0+β1x - 根据平方和分解式从回归效果检验回归方程的显著性 - 原假设H0:β1=0,备择假设H1:β1≠0 - 使用F检验,如果原假设成立,则说明回归方程不显著,该方程并无实质意义 - 相关系数的显著性检验 - 检验两变量之间是否真正相关,或者两个相关系数之间的差异是否显著 - 原假设H0:ρ=0,备择假设H1:ρ≠0 # 偏差、方差与噪声 - 偏差(Bias) - 根据样本拟合出的模型的输出预测结果的期望 与样本真实结果的差距 - 体现拟合程度的优劣 - 度量了学习算法的期望预测与真实结果的偏离程度 - 刻画了学习算法本身的拟合能力 - 偏差较大时,预期输出和实际结果偏离较大,称之为欠拟合 - 方差(Variance) - 模型每一次输出结果与模型输出期望之间的误差 - 体现模型的稳定程度 - 度量了同样大小的训练集的变动所导致的学习性能的变化 - 刻画了数据扰动造成的影响 - 通常模型越简单,方差越小 - 方差较大时,模型不稳定,即对一些新数据的预测不稳定 - 偏差小,方差大的情况即为过拟合 - 噪声(Noise) - 为真实标记与数据集中的实际标记间的偏差。 - 通常由多种因素综合影响造成,不可去除。 - 表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界 - 刻画了学习问题本身的难度 - 期望泛化误差 - 预测值和真实值的差的平方和 - E(f;D)=var(x)+bias^2(x)+ε^2 ![](https://www.proup.club/usr/uploads/2020/07/1854349239.png) ![](https://www.proup.club/usr/uploads/2020/07/4280896535.png) ![](https://www.proup.club/usr/uploads/2020/07/4090628900.png) 标签: none 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭