机器学习知识集

137 阅读14分钟

机器学习是一种人工智能AI应用领域,通过使用数据和统计模板来训练计算机以执行特定任务。

深度学习是机器学习的一个子领域,它基于多层神经网络模型,通过BP反向传播算法来学习和推断模式

机器学习工作流程:

获取数据->数据基本处理->特征工程->机器学习(模型训练)->模型评估

机器学习两个核心问题:

如何优化训练数据 -> 主要用于解决 欠拟合 问题;

如何提升泛化性能 -> 主要用于解决 过拟合 问题

特征工程的作用:特征提取 + 特征预处理 + 特征降维

【数据特征】决定了模型的上限;

【预处理和特征提取】是最核心的;

【算法和参数选择】决定了如何逼近这个上限;

监督学习是一种机器学习方法,借助 有标签的训练数据来预测或分类新的未标签数据。

无监督学习则是在没有标签的情况下,进行学习,通过模型识别数据中的模式和结构。

半监督模式是模型先对一部分数据生成标签,再将此生成的标签数据用来训练剩下未训练的数据。

特征提取分类:

字典特征提取(特征离散化):

sklearn.feature_extraction.DictVectorizer(sparse=True, ....)

sparse矩阵节省内容,提高读取效率

文本特征提取:

针对英文文本:

sklearn.feature_extraction.text.CountVectorizer(stop_words=[])

在中文文本特征提取之前,需要对句子(文章)进行分词(jieba)

stop_words:过滤停用词。

针对中文文本:

tf-idf: TF=词频; IDF = 逆向文档频率

sklearn.feature_extraction.text.TfidfVectorizer

图像特征提取(深度学习网络提取)

集成学习:

通过建立几个模型来解决单一预测问题。

工作原理是生成多个分类器或模型;

RF随机森林 = Bagging + 多个决策树; bagging解决过拟合;

: 随机森林是一个包含多个决策树的分类器

GBDT(Gradient Boosting) = boosting+多层决策树; boosting解决欠拟合。

bagging和boosting的区别:

bagging对数据进行采样训练,有放回的抽取;Boosting根据前一轮学习结果调整数据的重要性,每轮的训练集不变,只是训练集中的每个样本在分类器中的权重发生变化。

bagging对所有学习器平权投票;Boosting对学习器进行加权投票。

bagging的学习是并行的,每个学习器没有依赖关系。Boosting学习是串行的,学习有先后顺序。

主要区别:

Bagging主要用于提高 泛化 性能,解决过拟合,即 降低方差。

Boosting主要用于提高训练精度,解决欠拟合,降低偏差。

bagging的各个预测函数可以并行生成;Boosting的各预测函数只能顺序生成。

boosting中基模型是弱模型。

AdaBoost构造过程:

1,初始化训练数据权重相等,训练第一个学习器;

2,AdaBoost反复学习基本分类器。

3,对m个学习器进行加权投票。

交叉验证:

当不得不使用小型数据进行建模时,可以使用交叉验证CrossValid技术。这种方法会对数据集分成测试集和训练集;测试集只测试模型,而训练集中数据被用来建模。一个模型通常是被给定先验知识的数据集(即训练集)进行训练,没有先验知识的数据集进行测试。交叉验证的思想:在训练阶段,定一个数据集来测试模型。

能够让样本数据被模型充分利用

交叉验证搭配网格搜索 能够提升查找 最优 超参数 组合的 效率

使用网格搜索时,一般会提供 超参数的 可能取值字典

线性回归:

它是使用 回归分析的统计学系模型来研究变量(特征值和目标值)之间可能存在的关系

寻找最优模型 可以 通过 正规方差或梯度下降的方式进行 参数优化。

不需要选择学习率,不需要迭代训练

逻辑回归:

解决的是一个二分类问题;LR的输入是线性回归的输出;

它假设样本服从 伯努利分布

输入:线性回归的输出;

激活函数:sigmoid函数,把整体的值映射到[0, 1], 再设置一个阈值,进行分类判断

损失函数:对数似然损失,借助了log思想,进行完成。进行 真实值【等于0、等于1 】两种情况的划分

优化:提升原本属于[ 1 类别]的概率,降低原本属于 0类别的概率。

ps:伯努利分布是概率论中最简单的离散概率分布之一,用于描述只有两种可能结果的随机试验。

伯努利分布描述了一次随机试验只有两种可能结果的情况,

通常用 0 和 1 表示这两种结果,分别代表失败和成功。

精确度和召回率 适合 衡量 不平衡之间的类别问题; 准确度并不适合 衡量不平衡类别问题。

梯度下降法:

SGD随机梯度下降法 是 每次使用一个样本的数据来迭代权重,并且会依赖 过去已经计算过的梯度

全梯度下降法的计算量 随着样本数量的增加而增加

小批量随机梯度下降法 综合了 FGD和SGD的优势

KD树:

基于 欧氏距离 来度量样本之间的距离的。

在选取根节点时 使用的是 方差较小的 那一维数据

每个节点的左子节点 在当前分割维度上的数据 都比 右子节点 小。

决策树:

是一种树形结构,本质是一颗由 多个判断节点 组成的 树。

其中每个内部节点 表示一个属性上的判断。

每个分支代表一个 判断结果的输出。

最后每个叶节点 代表一种 分类结果

梯度下降优化算法:

动量法:

SGD是对过去K次的梯度求平均值,

SGD with momentum 是对过去所有的梯度求加权平均。

AdaGrad:

让学习率使用参数,

对于出现次数较少的特征,我们采用更大的lr学习率;对于出现次数较多的特征,我们采用较小的学习率lr。

RMSProp:

结合了梯度平方的指数移动平均数来调节学习率lr的变化。

能够在不稳定的目标函数情况下,进行很好的收敛。

Adam:

结合了AdaGrad和RMSProp两种优化算法

是一种自适应的学习率lr算法。

朴素贝叶斯:

是一个分类算法

朴素的意义 在于它的一个天真的假设: 所有特征之间是相互独立的

它实际上是将多条件下的条件概率转换成了单一条件下的条件概率,简化了计算

仍然需要使用联合概率

机器学习的5个流行算法:

决策树、神经网络(BP)、概率网络(贝叶斯网络)、最近邻算法(KNN)、支持向量机(SVM)

马尔可夫链: 状态空间 从一个状态 到另一个状态 转换到随机过程。

该过程要求具备“无记忆”的性质:

下一个状态的概率分布 只能由 当前状态 决定,在时间序列中,它前面的事件均 与之 无关。

HMM(隐马尔可夫链)的两个基本假设:

1,齐次 马尔可夫 假设:

HMM模型中任意时刻的隐藏状态 只依赖于 它的 前一个 隐藏状态。

2,观测独立性假设:

HMM模型中任意时刻的观测状态 仅仅只依赖于 当前时刻的 隐藏状态。

sigmoid激活函数一般只用于二分类的输出层。范围【0,1】

tanh激活函数是以0为中心,使得其收敛速度要比sigmoid快,减少迭代次数。然而,两侧的导数也为0,同样会造成梯度小时,在使用时,可在隐藏层使用tanh函数,在输出层使用sigmoid激活函数。tanh激活值范围【-1,1】

softmax层用于多分类过程中,他是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率 的形式展现出来。

极大似然估计就是用来估计模型参数的统计学方法。

激活函数主要用来向神经网络中加入 非线性 因素,以解决 线性模型 表达能力不足的问题,它对神经网络有着极其重要的作用。

交叉熵误差Cross Entropy Error:评估模型输出的概率分布和真实的概率分布的差异

二分类: E = -[y * log(p) + (1-y) * log(1-p)] 

y: 样本的真实标记; p:模型的预测概率

多分类: E = - Σni=1(yi*log(Pi) )

n:类别个数,

L2正则化又被称为【权重衰减】,因为其导致权重趋近于0;

L1权重值可能被减少到0,因此L1对压缩模型很有用。

特征降维:

特征选择:剔除数据中的冗余变量

方法:

Filter过滤式,主要探究特征本身特点、特征与特征和目标值之间的关联

方差选择法:低方差特征过滤,把方差较小的某一列剔除

相关系数

Embedding(嵌入式):算法自动选择特征与目标值之间的关联

决策树:信息熵、信息增益

正则化:L1,L2

深度学习:卷积

PCA主成分分析:无监督模式;

把 具有相关性的高维度数据 合成到 线性无关的 低维度 变量。

不需要标签;高维数据转为低维数据,然后产生了新的变量,建立新的坐标系。

保留较高方差的主成分。

可以用作 数据压缩和预处理。

矩阵的主成分是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分

sklearn.decomposition.PCA(n_components=None).fit_transform(X=x)
""" 将 数据分解 为 低维度 空间
n_components:
    指定整数,表示要降维到的目标,比如十维的数据,指定n_components=5,表示将十维数据降维到五维,
    如果为小数,表示累计方差百分比,保持百分之多少的特征维数
    
X: numpy array格式的数据[n_samples, n_features]
返回值:转换后指定维度的array
"""

LCA:线性成分分析,需要标签。

信息熵->信息增益->信息增益率->决策树

核函数:将原始输入空间映射到新的特征空间,从而,使得原本线性不可分的样本可能在核空间可分。

岭回归与线性回归的区别:

岭回归就是在线性回归上、损失函数上添加L2的正则化项。

岭回归:使用的随机平均梯度下降法,是一种线性回归。

SGD与Ridge岭回归的区别:

SGD:随机梯度下降法

Ridge:随机平均梯度下降法,使用了L2正则化项

SKLearn 机器学习库

sklearn.prerocessing.StandardScaler().fit_transform(features)

fit_tranform(): 

fit是拿数据算出均值mean和标准差std;

transform执行(x-mean)/std 的变换,可以得到标准化的结果

常见监督学习算法:感知机、SVM、人工神经网络、决策树、LR逻辑回归

SVM: supported vector machine(支持向量机),即寻找到 一个超平面 使样本分成两类,并且间隔最大

流程:

1,对样本数据进行归一化;

2,应用核函数对样本进行映射(最常采用的核函数是RBF和Linear,在样本线性可分时,Linear效果要比RBF好,使用核函数的实质就是进行 特征转换的过程。)

3,用cross-validation 和 grid-search对超参数进行优选。

4,用最优参数训练得到模型

5,测试

SVM支持向量机用于二分类;特别适合中小型复杂数据集的分类。

泛化能力是指模型对未知数据的预测能力。

分类树中最佳划分点的判别标准是熵或基尼系数,都是用纯度来衡量的。

但是在回归树中的样本标签是连续数值,所以再用熵之类的指标就不再合适,此时用平方误差MSE,它能很好的评判拟合程度。

归一化:

通过对原始数据进行变换,把数据映射到[0,1]之间,如果出现异常点,影响Max和Min值,则结果显然会产生改变;

标准化:

通过对原始数据进行变换,把数据变换到 均值为0、标准差为1的范围内;如果出现异常点,由于具有一定数量,少量的异常点对于平均值影响不大,从而方差改变也小。

过拟合:在训练集上表现好,但在测试集上表现不好

避免过拟合的方式:

重采样-数据清洗、L1和L2正则化、EarlyStopping早停止、决策树剪枝操作、交叉验证、较少特征数量

欠拟合:在训练集上表现不好,测试集上表现也不好

避免欠拟合的方式:

增加【样本】数量、 增加【样本特征】数量、进行特征维度扩展

贝叶斯网络:是用来表示一组变量之间为概率关系的图像模型。

Softmax和Sigmoid函数区别:

softmax函数通常用于多分类问题,类别之间是互斥的,Softmax的输出值之和为1,这意味着增加一个类别的概率会减少其他类别的概率,配合使用的是SoftMax交叉熵损失函数;

使用softmax的时候,已经假设每个输出仅对应某一个 单一的class类别,但是某些class存在重叠情况(如woman和person)的数据集中,使用softmax就不能使网络对数据进行很好的预测。

sigmoid函数通常用于二分类问题,类别之间不互斥,且其输出值之和不一定为1,各个类别的概率是独立的。通常配合使用的是二元交叉熵损失函数。

当问题是多标签分类时,即一个样本可以同时属于多个类别时,Sigmoid函数是更适合的选择。

K-Means聚类步骤:

1,随机设置K个特征空间内的点 作为 初始的聚类中心;

2,对于其他 每个点 计算到 K个中心点的距离,未知的点选择最近的一个聚类的中心点作为标记类别

3,所有点进行 聚类中心点的标记之后,重新计算出 每个聚类的新中心点(求平均值)

4,如果计算得出的新中心点 与 原中心点 一样(即 质心 不再移动),那么结束,否则重新进行第二步过程

实现流程:

事先确定常数K,常数K意味着最终的聚类类别数;

随机选定 初始点 为质心, 并通过计算每一个样本 与质心 之间的相似度(欧氏距离),将样本点 归到 最相似的类中。

接着,重新计算每个类的质心(即 点集的类中心),重复如此,直到质心不再改变。

最终就确定了每个样本所属的类别以及每个类的质心。

ps: 由于每次都要计算所有的样本 与 每个质心 之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。

K近邻分析:

KNN算法是一种Lazy- learning算法,分类器不需要使用训练集进行训练,训练时间复杂度为0。

KNN分类的计算复杂度和训练集的文档数目 成 正比;

K的选择,距离度量和分类决策规则 是该算法的三个基本要素。

计算流程:

1,计算已知类别数据集 中的点 与 当前点 的距离

2,按照距离一次排序

3,选取 与当前点 距离 最小的K个点

4,确定 前K个点所在类别的出现概率

5,返回前K个点出现频率最高的类别 作为 当前点预测类别