机器学习(幂次学院)笔记

GitHub项目推荐:https://github.com/MLEveryday/100-Days-Of-ML-Code

机器学习常见面试题整理:http://kubicode.me/2015/08/16/Machine%20Learning/Common-Interview/


有监督学习和无监督学习的区别

  • 有监督学习:对具有标记的训练样本进行学习,以尽可能对训练样本集外的数据进行分类预测。(LR,SVM,BP,RF,GBRT)
  • 无监督学习:对未标记的样本进行训练学习,以发现这些样本中的结构知识。(KMeans,DL)

监督学习,就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的,也就具有了对未知数据进行分类的能力。监督学习里典型的例子就是KNN、SVM。

无监督学习(也有人叫非监督学习,反正都差不多)则是另一种研究的比较多的学习方法,它与监督学习的不同之处,在于我们事先没有任何训练样本,而需要直接对数据进行建模。

如果我们在分类的过程中有训练样本(training data),则可以考虑用监督学习的方法;如果没有训练样本,则不可能用监督学习的方法。但是事实上,我们在针对一个现实问题进行解答的过程中,即使我们没有现成的训练样本,我们也能够凭借自己的双眼,从待分类的数据中人工标注一些样本,并把他们作为训练样本,这样的话就可以把条件改善,用监督学习的方法来做。

 

 

线性回归

(一)线性回归:通过模型来描述某一特征x与连续输出目标变量y之间的关系。

平时所说的向量都是列向量,所以w和x都是列向量。

多元线性回归:

eg:波士顿房屋数据

首先,借助散点图矩阵,可视化的方法汇总显示各不同特征两两之间的关系。为了绘制散点图矩阵,需要用到seaborn库中的pairplot函数它是在matplotlib基础上绘制统计图像的Python库。还可以做热度图。

基于最小二乘法构建线性回归模型:

可将线性回归模型看作通过训练数据的样本点来寻找一条最佳拟合直线。不过,在此既没有对最佳拟合做出定义,也没有研究拟合类似模型的各种技术。在接下来的部分中,通过最小二乘法估计回归曲线的参数w,使得回归曲线到样本点垂直距离(残差或误差)的平方和最小,即代价函数J(w)最小。

最小二乘法:主要思想就是选择未知参数,使得真实值和预测值之差的平方和(也就是代价函数)达到最小。

预测函数是线性函数,是连续型函数,连续性函数的主要优点在于:其代价函数/目标函数J(w)是可导的,而且是一个凸函数;这样,可以通过简单、高效的梯度下降优化算法来得到权重,且能保证在训练集样本中的代价函数最小。

代价函数:真实值减去预测值

向量w的长度是特征的个数+1。一行是一个样本,一列代表一个特征。

(二)梯度下降法

(三)使用数据集中的所有变量训练多元回归模型

残差图作为常用的图形分析方法,可对回归模型进行评估、获取模型的异常值,同时还可检查模型是否是线性的,以及误差是否随机分布。

残差:真实值与预测值之间的差或者垂直距离

残差随机分布于中心线附近更好

MSE:均方误差

SSE:最小化误差平方和

SST:反应的是真实y的方差   

R2:决定系数,反应了y的波动有多少百分比能被x的波动所描述

(四)正则化:帮助减少过拟合,本质是对权重w的约束

过拟合:训练数据过少,特征过多,模型过于复杂

在某种程度上,越小的权重复杂度越低,因此能够更简单且更有效地描绘数据,所以我们倾向于选择这样的权重。

奥卡姆剃刀:更倾向于选择简单的模型,实际上简单的模型不一定好。

正则化的两种方法:

(1)岭回归

(2)LASSO

 

 

逻辑回归

(一)logistic regression其实是一个分类模型。

逻辑回归的结果是对线性回归的结果增加了一个sigmoid函数处理,将值映射到[0,1]的空间,从而产生一个概率值。

机率比:特定事件发生的机率, p:正事件发生的概率,即要预测的事件,标记为y=1  

logit函数——机率比的对数函数(对数机率)

logistic函数(sigmoid函数):

(二)先定义一个最大似然函数L,数据集中每个样本都是相互独立的——

目标是使用已知的n个样本,使得这个L的概率值最大,即使得上面公式L的结果最大。

首先,在似然函数值非常小的时候,可能出现数值溢出的情况,使用对数函数降低了这种情况发生的可能性。其次,我们可以将各因子的连乘转换为和的形式,利用微积分中的方法,通过加法转换技巧可以更容易地对函数求导。

可以通过梯度上升法做最大化似然函数。还可以作为代价函数J使用梯度下降法做最小化处理。

复杂模型往往容易学习到了一些局部噪声的影响(现实的数据总是有噪声的)。因此当 一个复杂模型(比如一个n次多项式模型)完美拟合了特定数据集的时候,这样的模型一般都不能很好泛化到其它数据集上,所以包含一定噪声的线性模型在预测中会有更好的表现。

在逻辑回归中使用正则化:

C越大,正则化约束力越小,效果越差。0.1-10,一般在1附近取值。

 

 

决策树

归纳分类算法,有监督,非参数学习。

贪心算法——自顶向下递归方式构造决策树,在每一步选择中都采取当前状态下最好的选择。

不纯度衡量标准

:越小越好。系统越无序,熵越大。

信息增益:没有分类时的熵 减去 按某一特征分类后的熵。越大越好。对可取值数目较多的属性有所偏好。

选择信息增益最大的特征进行分类,以此类推。

上述是ID3算法,C4.5是其扩充,它使用增益率来选择最优划分属性。

基尼指数 反映了从数据集中随机抽取两个样本,其类别标记不一致的概率,因此基尼指数越小则数据集的纯度越高。在候选属性集合中选择那个使得划分后基尼指数最小的属性作为最优划分属性。

 

 

k-近邻算法(KNN)

监督学习算法,惰性学习算法,非参数化模型

参数化模型:感知器、逻辑回归、线性支持向量机

非参数化模型:决策树(随机森林)、核SVM

步骤:1、选择近邻的数量k和距离度量的方法

2、找到待分类样本的k个最近邻居

3、根据最近邻的类标进行多数投票

欧几里得距离为度量标准——对数据进行标准化处理。

曼哈顿距离(计程车距离)

切比雪夫距离

闵儿科夫斯基距离

马氏距离:数据的协方差距离

协方差:衡量两个变量的总体误差,判断两个变量在变化过程中是否同向变化,同向变化是正值

协方差数值越大,两个变量同向程度越大

汉明距离:两个等长字符串的汉明距离是两个字符串相对于位置上的不同字符串的个数

余弦相似度:两个向量夹角的度数来度量他们的相似度

编辑距离:两个字符串由一个转成另一个所需的最少编辑操作次数

Jaccard系数,jaccard距离  比较布尔值属性的对象之间的距离

KL散度:比较两个概率分布的接近程度

熵H

维度灾难  容易过拟合

 

 

支持向量机SVM

分类效果最好的算法,感知器的扩展

感知器:最简单的单层神经网络

SVM的优化目标:最大化分类间隔

最靠近超平面的训练样本叫支持向量。

二维空间是直线,三维空间是一个面,多维空间叫超平面。

划分超平面线性方程:

在使用svm对数据进行处理之前一定要进行标准化操作。标准化的目的是为了不同维度的特征统一到同一个范围,便于数学上的优化操作,对于决策树这种,不是对模型参数优化的,就不用的。

测试集标准化时用的是训练集的均值和方差。

在原始空间不能划分的特征点映射到一个更高维空间就可以很简单的解决。

用核函数解决非线性可分问题

核函数:高斯核、径向基函数核(RBF)(大部分更优)最常使用

 

 

神经网络

最简单的MP模型:

改用二维的下标,用w(x,y)来表达一个权值,下标中的x代表后一层神经元的序号,而y代表前一层神经元的序号(序号的顺序从上到下)。

偏置结点:没有输入,在神经网络的每个层次中,除了输出层以外,都会含有这样一个偏置单元。

训练的本质:优化损失函数,梯度方向上函数值变化最快。

损失函数   

梯度下降算法每次计算参数在当前的梯度,然后让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零时截止。一般这个时候,所有的参数恰好达到使损失函数达到一个最低值的状态。

在神经网络模型中,由于结构复杂,每次计算梯度的代价很大。因此还需要使用反向传播算法。

不一次计算所有参数的梯度,而是从后往前。首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后是输入层的梯度。计算结束以后,所有的参数矩阵的梯度就都有了。

更新w:

 

 

深度学习

卷积神经网络CNN

stride步长:一组一维数据步长一定,可以降低维度

padding填充:使输出维度和输入维度保持一致

                 前后各填充一个0,对称填充,不能只填充一个,padding=1

二维卷积:水平方向和竖直方向的步长可以不一样

卷积的本质是获取图像的特征,不同的卷积核,获取不同的特征

四个步骤:①卷积convolutions         3*3的卷积核更好     卷积可逆 池化不可逆(记录池化后的位置,逆操作的时候其他位置填0)

            ②激活/非线性处理

           ③池化或者亚采样或下采样spatial pooling   三种方法:最大池化(效果更好)/平均化/加和

           ④分类(全连接层)full connection   目的:使用这些特征把输入图像基于训练数据集进行分类

在神经网络中,激活函数对线性加权结果进行一个非线性的变换,常见的激活函数包括:sigmod函数,tanh函数,ReLU函数(最好),ELU函数,PReLU函数。

池化函数可以逐渐降低输入表示的空间尺度。特别地,池化还有其他重要功能:

  1.使输入表示(特征维度)变得更小,并且网络中的参数和计算的数量更加可控的减小,因此,可以控制过拟合

  2.使网络对于输入图像中更小的变化、冗余和变换变得不变性(输入的微小冗余将不会改变池化的输出——因为在局部邻域中使用了最大化/平均值的操作。)

  3.帮助获取图像最大程度上的尺度不变性。它非常的强大,因为可以检测图像中的物体,无论它们位置在哪里

交叉熵越小越好

开源深度学习框架与常见卷积网络模型

一层卷积学到的特征是局部的,层数越高,特征就越全局化。

深度学习硬件加速方式:CPU  GPU(simd方式,计算能力强,并行度支持好)  FPGA   DSP   ASIC

keras已经成为TensorFlow的高级接口   https://tensorflow.google.cn/tutorials

Google colab 谷歌实验平台

独热编码:类别

缺省(sheng)值:

 

 

 

 

贝叶斯分类器

(一)极大似然估计

全概率公式、先验概率、类条件概率、后验概率:

目的:利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。

用偏导求最大值

(二)朴素贝叶斯 

在数据量很大的时候,根据中心极限定理,频率是等于概率的。

(三)EM算法

期望值最大化

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章