机器学习是一种人工智能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个点出现频率最高的类别 作为 当前点预测类别