【机器学习】汇总——基础
- 缺失值较多:直接舍去,否则有较大的噪声
- 缺失值较少(10%以内)
- 用NaN替代,0:data_train.fillna(0)
- 用均值填充:data_train.fillna(data_train.mean()),注意:均值填充可能需要条件填充,例如某训练集中患癌症和不患癌症的数据中,该值的差距很大,那么就应当使用label相同的数值的均值
- 用上下数据填充:data_train.fillna(method=’pad’);data_train.fillna(method=’bfill’)
- 插值法:利用中间点的值,data_train.interpolate()
- 使用算法拟合:将数据分为有值和缺失2份,对有值的数据采用随机森林等算法拟合,然后对缺失值预测,用预测的值填充
参考:
1. 如何处理特征向量的缺失值:https://geekcircle.org/machine-learning-interview-qa/questions/1.html
- 抽象数学问题:明确我们可以获得什么样的数据,目标是分类、回归还是聚类;如果都不是的话,就划分为其中一类
- 获取数据:数据决定了机器学习结果的上限,而算法只能尽可能逼近这个上限;数据要有代表性,否则会过拟合;对于分类问题,数据偏斜不能过于严重;对数据量级要有估计,多少个样本,多少个特征,估计对内存的消耗;如果数据太多,考虑改进算法或者降维;如果数据量太大,考虑分布式。
- 特征预处理与特征选择:归一化、离散化、因子化、除去共线性;筛选出显著特征、摒弃非显著特征;运用特征有效性分析,如相关性分析、卡方检验、平均互信息、条件熵、后验概率等方式
- 训练模型与调优:超参数
- 模型诊断:过拟合、欠拟合;误差分析
- 模型融合:(前端)数据清洗和预处理;(后端)模型融合
- 上线运行:还要考虑运行时间、资源消耗、稳定性
- 数据清洗:清洗标注数据,主要是数据采样和样本过滤
- 数据采样:对于分类问题,选取正例、负例,对于回归问题,需要采集数据。对采样得到的样本,根据需要,设定样本权重。当模型不能使用全部的数据用来训练时,需要对样本采样,包括随机采样、固定比例采样。
- 样本过滤:
- 结合业务情况对数据进行过滤;
- 异常点检测
- 偏差检测,例如聚类、最近邻等
- 基于统计的 异常点检测,例如极差,四分位数间隔,均差,标准差等
- 基于距离的异常点检测,曼哈顿距离、欧氏距离、马氏距离
- 基于密度的异常点检测
- 特征处理
- 归一化:不同特征有不同的取值范围,避免对绝对值较大的数据的依赖;常见函数归一化、分维度归一化、排序归一化
- 离散化:连续变量的离散化处理,等值划分,等段划分(数据可以集中在某一段)
- 缺失值处理
Grid search(网格搜索):遍历
Random search:随机选择参数搜索
相关库:Hyperopt
【概述】(如图)随着模型复杂度的增加,在training data上的error逐渐减小,在validation data上的error逐渐增大。(原因)训练出的模型过拟合训练集,对训练外的数据表现效果不好,也就是泛化能力不好。
【解决方式】正则化(L1、L2正则化)、随机失活(dropout)、数据集扩增(data augmentation)、提前终止(early stop)
【扩展1——L1正则化】(公式)在代价函数中加一个L1正则化项,迫使更多的w为0(矩阵变得稀疏)。(原理)w权重为0,实现特征的选择,去掉不重要的特征。
【扩展2——L2正则化】(公式)在代价函数中加一个L2正则化项,迫使所有的w趋向0但不为0,对w和b求偏导,对b没有影响,限制w的大小。(原理)过拟合需要考虑每一个点,最终函数波动大,限制w的大小,就限制了波动,惩罚w权重变大。
【扩展3——dropout】(如图)让神经元以超参数p的概率被**(1-p的概率消失);(原理)每次训练都只有一部分的神经网络发挥作用,效果类似于集成学习。
【扩展4——数据扩增】更多的数据,数据获得方式:
1)(图片)将原始图片变换、畸变、模糊等操作,截取一部分图片;
2)(一般处理方式)添加随机噪声、采集更多的数据、根据当前数据集的分布,生成更多的数据。
【扩展5——提前终止】(原理)对模型的训练过程即使参数进行学习的过程,往往用到梯度下降(gradient descent)等学习算法,在模型对训练数据集迭代收敛之前提前停止迭代。(实现方式)在训练过程中,记录最好的validtion accuracy,当连续10次epoch(或者n次)没有到达到accuracy,就认为accuracy不再提高,提前终止。
L0范数:
L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。
一是因为L0范数很难优化求解(NP难问题,L0为一个0-1跃阶函数,低于1范数的都不是凸的),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。
【参考】
1)机器学习中防止过拟合方法:http://www.cnblogs.com/lovephysics/p/7220703.html
2)【机器学习】L1正则化与L2正则化详解及解决过拟合的方法:
https://blog.****.net/qq_32742009/article/details/81629210
【有监督学习】对有标记的数据进行训练
【无监督学习】对没有标记的数据进行训练,聚类是典型的无监督学习
【梯度消失】根据链式法则,如果一层神经元对上一层的输出的偏导乘上权重都<1,多层传播,最终的偏导会->0
【梯度爆炸】上述的权重>1,会膨胀
【解决】引入**函数,比如ReLU函数:f(x)=max(0,x),而不是sigmod函数
【作用】提供非线性;避免梯度消失或者爆炸
【sigmod函数(也叫做logistic函数)】(缺点)计算量大,容易梯度消失或者膨胀;收敛速度慢
【ReLu函数】(优点)收敛速度快;(缺点)如果学习率设置过高,造成神经元死亡(x<=0的时候,ReLU的输出是0,反向传播的梯度也是0,权重不会更新)
参考:
神经网络梯度消失与梯度爆炸:https://blog.****.net/qq_27825451/article/details/80172070
深度学习:**函数的比较和优缺点,sigmoid,tanh,relu:
https://blog.****.net/u011684265/article/details/78039280
【曼哈顿距离】
【欧氏距离】
【余弦相似度】
余弦相似度与欧式距离的联系和区别
- 区别:假设 2人对三部电影的评分分别是 A = [3, 3, 3] 和 B = [5, 5, 5],余弦相似度为1,欧式距离3.46,余弦相似度可以表示两个人对电影的评价一致;
- 联系:归一化的欧式距离是余弦相似度的单调函数,余弦相似度计算复杂度过高,可以转为计算归一化欧氏距离。
【随机梯度下降】(优点)在一定程度上解决局部最优的问题;(缺点)收敛速度慢
【批量梯度下降】(优点)收敛速度快;(缺点)容易陷入局部最优解
【mini_batch梯度下降】中和了随机梯度下降和批量梯度下降
【牛顿法】使用函数f(x)的泰勒级数的前几项来寻找f(x)=0的根,最大的特点是收敛速度慢(使用了二阶收敛)。(缺点)牛顿法在迭代时,需要计算Hessian矩阵,当维度较高的时候,计算Hessian矩阵比较困难
【拟牛顿法】改进了牛顿法,使用正定矩阵来逼近Hessian矩阵
【启发式优化算法】有遗传算法、粒子群算法等,主要思想是设定一个目标函数,每次迭代根据相应的策略优化种群
参考:
几种常见的优化算法:http://www.cnblogs.com/jiahenhe2/archive/2017/12/21/8080563.html
- 缺失值较多:直接舍去,否则有较大的噪声
- 缺失值较少(10%以内)
- 用NaN替代,0:data_train.fillna(0)
- 用均值填充:data_train.fillna(data_train.mean()),注意:均值填充可能需要条件填充,例如某训练集中患癌症和不患癌症的数据中,该值的差距很大,那么就应当使用label相同的数值的均值
- 用上下数据填充:data_train.fillna(method=’pad’);data_train.fillna(method=’bfill’)
- 插值法:利用中间点的值,data_train.interpolate()
- 使用算法拟合:将数据分为有值和缺失2份,对有值的数据采用随机森林等算法拟合,然后对缺失值预测,用预测的值填充
参考:
1. 如何处理特征向量的缺失值:https://geekcircle.org/machine-learning-interview-qa/questions/1.html
- 抽象数学问题:明确我们可以获得什么样的数据,目标是分类、回归还是聚类;如果都不是的话,就划分为其中一类
- 获取数据:数据决定了机器学习结果的上限,而算法只能尽可能逼近这个上限;数据要有代表性,否则会过拟合;对于分类问题,数据偏斜不能过于严重;对数据量级要有估计,多少个样本,多少个特征,估计对内存的消耗;如果数据太多,考虑改进算法或者降维;如果数据量太大,考虑分布式。
- 特征预处理与特征选择:归一化、离散化、因子化、除去共线性;筛选出显著特征、摒弃非显著特征;运用特征有效性分析,如相关性分析、卡方检验、平均互信息、条件熵、后验概率等方式
- 训练模型与调优:超参数
- 模型诊断:过拟合、欠拟合;误差分析
- 模型融合:(前端)数据清洗和预处理;(后端)模型融合
- 上限运行:还要考虑运行时间、资源消耗、稳定性
- √关联规则发现:支持度(support)support({啤酒}-->{尿布}) = 啤酒和尿布同时出现的次数/数据记录数;自信度(confidence)confidence({啤酒}-->{尿布}) = 啤酒和尿布同时出现的次数/啤酒出现的次数
- 聚类:无监督学习
- 分类:监督学习,常用的分类算法:决策树分类、朴素贝叶斯分类、支持向量机、神经网络、K近邻、模糊分类;
- 自然语言处理:语音合成(text to speech)语音识别(speech recognition)中文自动分词(Chinese word segmentation)词性标注(part-of-speech tagging)句法分词(parsing)自然语言生成(natural language generation)文本分类(text categorization)信息检索(information retrieval)信息抽取(information extraction)文字校对(text-proofing)问答系统(question answering)
- 图像处理:图像识别、物体检测、图像切割、图像聚类、风格迁移、图像生成
A 标称
B 序数
C 区间
D相异
数据属性类别分类
- 标称属性(nominal attribute):一些符号符号或者实物的名称,所以标称属性又被看做categorical
- 二元属性(binary attribute):0或者1
- 序数属性(ordinal attribute):取值有意义,比如学生成绩优良中差,可以用0123替代
- 数值属性(numerical attribute):整数或者实数值
- 离散属性和连续属性
精确率:预测真的里面有多少真
召回率:所有真的里面有多少被正确预测出来了
精确率和召回率相互制约,F1:精确率和召回率的调和平均
支持度(support): 同时出现的概率(频率)
num(I)总数
置信度(confidence):X发生之后,XY同时发生(类似贝叶斯)
提升度(list):X发生之后,XY同时发生除以Y独立发生的概率(相当于“率”的比)
满足最小支持度和最小置信度的规则,叫做“强关联规则”。
Lift(X→Y)>1,“X→Y”是有效的强关联规则。
Lift(X→Y) <=1,“X→Y”是无效的强关联规则。
特别地,Lift(X→Y) =1,X与Y相互独立。
归一化
转成0~1的范围,减小对数值的依赖
标准化
公式为:(X-mean)/std 计算时对每个属性/每列分别进行。将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。
另一种常用的方法是将属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现。
使用这种方法的目的包括:
1、对于方差非常小的属性可以增强其稳定性。
2、维持稀疏矩阵中为0的条目。
正则化
Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。
p-范数的计算公式:||X||p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p
原因:
加速收敛
避免数值大小影响
-
偏差与方差分别是用于衡量一个模型泛化误差的两个方面;
- 模型的偏差,指的是模型预测的期望值与真实值之间的差;
- 模型的方差,指的是模型预测的期望值与预测值之间的差平方和;
- 在监督学习中,模型的泛化误差可分解为偏差、方差与噪声之和。
-
偏差用于描述模型的拟合能力;
方差用于描述模型的稳定性。
导致偏差和方差的原因
-
偏差通常是由于我们对学习算法做了错误的假设,或者模型的复杂度不够;
- 比如真实模型是一个二次函数,而我们假设模型为一次函数,这就会导致偏差的增大(欠拟合);
- 由偏差引起的误差通常在训练误差上就能体现,或者说训练误差主要是由偏差造成的
-
方差通常是由于模型的复杂度相对于训练集过高导致的;
- 比如真实模型是一个简单的二次函数,而我们假设模型是一个高次函数,这就会导致方差的增大(过拟合);
- 由方差引起的误差通常体现在测试误差相对训练误差的增量上。
深度学习中的偏差与方差
- 神经网络的拟合能力非常强,因此它的训练误差(偏差)通常较小;
- 但是过强的拟合能力会导致较大的方差,使模型的测试误差(泛化误差)增大;
- 因此深度学习的核心工作之一就是研究如何降低模型的泛化误差,这类方法统称为正则化方法。
../深度学习/正则化
偏差/方差 与 Boosting/Bagging
./集成学习专题/Boosting/Bagging 与 偏差/方差 的关系
偏差与方差的计算公式
- 记在训练集 D 上学得的模型为
模型的期望预测为
- 偏差(Bias)
偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;
- 方差(Variance)
方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响(模型的稳定性);
- 噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
- “偏差-方差分解”表明模型的泛化能力是由算法的能力、数据的充分性、任务本身的难度共同决定的。
偏差与方差的权衡(过拟合与模型复杂度的权衡)
- 给定学习任务,
- 当训练不足时,模型的拟合能力不够(数据的扰动不足以使模型产生显著的变化),此时偏差主导模型的泛化误差;
- 随着训练的进行,模型的拟合能力增强(模型能够学习数据发生的扰动),此时方差逐渐主导模型的泛化误差;
- 当训练充足后,模型的拟合能力过强(数据的轻微扰动都会导致模型产生显著的变化),此时即发生过拟合(训练数据自身的、非全局的特征也被模型学习了)
- 偏差和方差的关系和模型容量(模型复杂度)、欠拟合和过拟合的概念紧密相联
-
- 当模型的容量增大(x 轴)时, 偏差(用点表示)随之减小,而方差(虚线)随之增大
- 沿着 x 轴存在最佳容量,小于最佳容量会呈现欠拟合,大于最佳容量会导致过拟合。
《深度学习》 5.4.4 权衡偏差和方差以最小化均方误差
《统计学习方法》 1.7 生成模型与判别模型
- 监督学习的任务是学习一个模型,对给定的输入预测相应的输出
- 这个模型的一般形式为一个决策函数或一个条件概率分布(后验概率):
-
- 决策函数:输入 X 返回 Y;其中 Y 与一个阈值比较,然后根据比较结果判定 X 的类别
- 条件概率分布:输入 X 返回 X 属于每个类别的概率;将其中概率最大的作为 X 所属的类别
- 监督学习模型可分为生成模型与判别模型
-
判别模型直接学习决策函数或者条件概率分布
- 直观来说,判别模型学习的是类别之间的最优分隔面,反映的是不同类数据之间的差异
- 生成模型学习的是联合概率分布P(X,Y),然后根据条件概率公式计算 P(Y|X)
-
判别模型直接学习决策函数或者条件概率分布
两者之间的联系
- 由生成模型可以得到判别模型,但由判别模型得不到生成模型。
- 当存在“隐变量”时,只能使用生成模型
隐变量:当我们找不到引起某一现象的原因时,就把这个在起作用,但无法确定的因素,叫“隐变量”
优缺点
-
判别模型
- 优点
- 直接面对预测,往往学习的准确率更高
- 由于直接学习 P(Y|X) 或 f(X),可以对数据进行各种程度的抽象,定义特征并使用特征,以简化学习过程
- 缺点
- 不能反映训练数据本身的特性
- ...
- 优点
-
生成模型
- 优点
- 可以还原出联合概率分布 P(X,Y),判别方法不能
- 学习收敛速度更快——即当样本容量增加时,学到的模型可以更快地收敛到真实模型
- 当存在“隐变量”时,只能使用生成模型
- 缺点
- 学习和计算过程比较复杂
- 优点
常见模型
- 判别模型
- K 近邻、感知机(神经网络)、决策树、逻辑斯蒂回归、最大熵模型、SVM、提升方法、条件随机场
- 生成模型
- 朴素贝叶斯、隐马尔可夫模型、混合高斯模型、贝叶斯网络、马尔可夫随机场
先验概率,后验概率,似然概率,条件概率,贝叶斯,最大似然
https://blog.****.net/suranxu007/article/details/50326873
似然(likelihood)和概率(probability)
概率:f(x|y),y已知,x未知
似然:f(x|y),x已知,y未知
条件概率(似然概率)
- 一个事件发生后另一个事件发生的概率。
- 一般的形式为 P(X|Y),表示 y 发生的条件下 x 发生的概率。
- 有时为了区分一般意义上的条件概率,也称似然概率
先验概率
- 事件发生前的预判概率
- 可以是基于历史数据的统计,可以由背景常识得出,也可以是人的主观观点给出。
- 一般都是单独事件发生的概率,如 P(A)、P(B)。
后验概率
- 基于先验概率求得的反向条件概率,形式上与条件概率相同(若 P(X|Y) 为正向,则 P(Y|X) 为反向)
贝叶斯公式
最大似然理论:
认为P(x|y)最大的类别y,就是当前文档所属类别。即Max P(x|y) = Max p(x1|y)*p(x2|y)*...p(xn|y), for all y
贝叶斯理论:
认为需要增加先验概率p(y),因为有可能某个y是很稀有的类别几千年才看见一次,即使P(x|y)很高,也很可能不是它。
所以y = Max P(x|y) * P(y),其中p(y)一般是数据集里统计出来的。
原文:ML-机器学习基础
https://github.com/imhuay/Algorithm_Interview_Notes-Chinese/blob/master/A-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/A-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80.md
熵通过log函数,将贝叶斯的乘除法变成了加减法
信息量:一个信息所需要的编码长度(这里使用二进制)
信息熵:一个分布的信息量或者编码长度,熵和量的区别,一个是分布,一个是单个信息
交叉熵Cross entropy
用一个猜测的分布的编码方式去编码其真实的分布,得到的平均编码长度或者信息量
交叉熵在机器学习领域的作用
经常作为机器学习最后的损失函数:相当于衡量两个编码方式之间的差值,因为只有当猜测的分布接近于真实分布时,其值最小。
优势:
-
- 凸函数可以用常见的优化算法找到最优解;
- 可导,减小梯度消失
KL散度
衡量两个分布的距离
交叉熵和KL散度是对两个不同分布之间的距离度量
最大似然估计中,最小化KL散度其实就是在最小化分布之间的交叉熵
联合条件熵和条件信息熵(贝叶斯条件概率公司演化来的)
同一个分布中,两个变量之间的互相影响
互信息
通过一个联合分布中,两个信息互相影响的部分(相互非独立,进而减小的不确定性)
参考:
【机器学习】信息量,信息熵,交叉熵,KL散度和互信息(信息增益)
https://blog.****.net/haolexiao/article/details/70142571