初级算法梳理(一)

Datawhale初级算法梳理(一)

机器学习基本概念

一些基本概念在统计学习方法(一)中有提及,主要是:

  1. 统计学习3要素(模型、策略[期望风险、经验风险、结构风险]、算法)
  2. 模型评估和模型选择(正则化、交叉验证)
  3. 泛化能力
  4. 生成模型与判别模型

再进行补充:

监督/无监督/半监督

  1. 无监督学习:K-means、聚类分析、可视化和降维-PCA、关联性规则学习
  2. 监督学习:KNN、线性回归、逻辑回归、SVM、决策树和随机森林、神经网络
    主要讲一下半监督:
    半监督学习器就是让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能.要利用未标记样本,那么必然是要做一些将未标记样本所揭示的数据分布信息与类别标记相联系的假设.假设本质是”相似的样本拥有相似的输出”
    pic1
    半监督学习分为两种:(纯)半监督学习和直推学习(transductive learning),前者假定训练数据中的未标记样本并非待测的数据,而后者则假定学习过程中所考虑的未标记样本恰是待测数据,学习目的是再这些未标记样本上获得最优泛化性能.

无标记样本的意义:
pic2

目前,在半监督学习中有三个常用的基本假设来建立预测样例和学习目标之间的关系,有以下三个:

  1. 平滑假设(Smoothness Assumption):位于稠密数据区域的两个距离很近的样例的类标签相似,也就是说,当两个样例被稠密数据区域中的边连接时,它们在很大的概率下有相同的类标签;相反地,当两个样例被稀疏数据区域分开时,它们的类标签趋于不同。
  2. 聚类假设(Cluster Assumption):当两个样例位于同一聚类簇时,它们在很大的概率下有相同的类标签。这个假设的等价定义为低密度分离假设(Low Sensity Separation Assumption),即分类决策边界应该穿过稀疏数据区域,而避免将稠密数据区域的样例分到决策边界两侧。
  3. 流形假设(Manifold Assumption):将高维数据嵌入到低维流形中,当两个样例位于低维流形中的一个小局部邻域内时,它们具有相似的类标签。

这里说到流形假设就想到之前看到的文章: 深度学习与流形学习(一)

而我们的GAN就是构造一个近似真实的流形结构,然后将噪声点映射到这个结构上去.
GAN能不能用半监督学习?
当然能,如SSGAN,catGAN等..
但是半监督学习会遇到一些问题,也是我们一般机器学习问题中常见的问题——数据不均衡,这对于半监督来说是致命的.半监督实验中,我们手上会有监督数据和非监督数据,监督数据我们是知道类别的,而半监督数据我们不知道类别,而且其一旦数据不均衡对网络的影响是很大的.
pic5

欠拟合与过拟合(方差与偏差)

pic3
pic4
上面两张PRML上的图,能很直观的反映的欠拟合与过拟合以及方差和偏差.
欠拟合的特点是方差小,偏差大
过拟合的特点是方差大,偏差小.

欠拟合的解决:现在常有的观点就是增加模型的复杂性,但是欠拟合中的是模型复杂度不足的代名词么?我觉得这不够准确,我觉得欠拟合应该是指一种未能从数据中学习到关系的现象,这种现象是有时可以用增加模型复杂性来解决,有时则需要更换模型来解决.
过拟合的解决:一般指泛化性不强,这常常就是因为高方差的问题,模型在表达上面有一定的偏向性.常用的方法是数据增强,ensemble以及增加随机性.

线性回归原理

回归问题是常见的一种监督学习问题.而线性回归是回归中最基本的一种模型(注意:这里的线性的意思不等于线性函数的意思,而是自变量与因变量之间的关系是线性关系)
如果我们手中有一些数据,并且知道自变量与因变量之间的关系接近于线性,则我们就需要用到一个线性回归模型来拟合这些数据,才能对未知数据进行预测(房价预测).显然我们的目标是预测值越接近目标值越好,则我们会想到用误差最小化,即$\sum(y_i-\hat{y})$最小.但是这会出现一个问题,就是所有距离都会相互抵消.想象一下,我们的目标直线是y=x,而此时我们预测的直线是y=-x,如果采用上述标准的化,此时$\sum(y_i-\hat{y})$是最小的,等于0.但这明显是不对的.

这里采用误差平方和,$\sum(y-\hat{y})^2$
发现误差平方和与方差很像,有木有!!
说到方差会想到什么??? PCA!!!
有没有发现发现PCA在找点投影的方差最大投影平面的时候也会产生一条线.尽管目标与线性回归不同,但是我们可以发现如果将其用到二维坐标下,也能拟合二维数据点.但是还是要注意区别,PCA实际上求的是点到直线的距离,而线性回归求的是y与$\hat{y}$的距离

下面详细介绍一下线性回归模型:
一般的线性回归模型都是多元线性回归,所以我们一般用矩阵的形式来表述

其中

假设我们有数据$D=\{(X_1,Y_1),(X_2,Y_2),…,(X_n,Y_n)\}$
则可拼成一个大矩阵

由此模型形式可以表示为

线性回归损失函数、代价函数、目标函数

现在我们需要根据给定的X求解W的值
我们的损失函数,将推广之前讲的误差平方和

我们的目标就是min L(W)

从概率层面解释——回归模型的目标函数

基本上每个模型都会有一个对应的目标函数,可以通过不同的最优化求解方法对这些对应的目标函数进行求解.
我们看一下目标函数,从概率角度出发,这里用到了中心极限定理和高斯分布来分析

  1. 中心极限定理:
    设有n各随机变量,$X_1,X_2,X_3,….,X_n$它们之间相互独立,并且有相同的数学期望和均值

  2. 高斯分布
    假定输入样本x,我们的得到预测值和真实值间存在误差e,那么它们的关系如下:

    在这里假设$\epsilon$服从标准的高斯分布.(原因就是中心极限定理)
    显然

所以我们用线性回归的假设前提是目标值满足高斯分布

优化方法(梯度下降法,牛顿法,拟牛顿法)

最一般我们会想到的方法就是求解析解:

显然这里只要将X^TX移到右侧,即可求出W的值.但是问题是这是矩阵运算,$X^TX$很有可能没有逆,也就是说要使用上述方法的前提是$X^TX$是满秩.

解析解的方法不行,我们只能考虑别的方法了.

梯度下降

当我们在求解一个最小值问题时,会发现负梯度方向是目标函数下降最快的方向.因此如果我们要迭代更新我们模型的参数可以考虑负梯度方向作为参数更新的方向.

牛顿法

这里要用到了泰勒公式
一阶牛顿法(高斯牛顿法)
$y=f(\theta;x)$进行一阶展开有
$y_i=f(\theta_0;x_i)+f’(\theta_0;x_i)(\theta-\theta_0)$
我们的目标是求$\theta$,已知数据点x_i,则显然有

在这里用于y实际上表示的是目标函数的值,我们往往希望y=0,所以这里$y_i=0$

显然上述操作与梯度下降一样是一种迭代法.

二阶牛顿法
考虑二阶泰勒展开
$y_i=f(\theta_0;x_i)+f’(\theta_0;x_i)(\theta-\theta_0)+\frac{1}{2}f’’(\theta-\theta_0;x_i)(\theta-\theta_0)^2$

得到

也是一种迭代,只是此时用到了二阶导.

拟牛顿法

拟牛顿法是对二阶导的近似.之前将的牛顿法的二阶导比较难求,而拟牛顿法就是简化该求导过程.
拟牛顿法

线性回归的评估指标

回归的几种评价指标
这里的y是测试集上的

  1. MSE(均方误差):
  2. RMSE(根均方误差)
  3. MAE(平均绝对误差)
  4. R Squared分子式Residual Sum of Squares,分母是Total sum of Squares这被认为是最好的评价线性回归的指标.
    $R^2≤1$,且其越大越好,我们可以把分母视为一种baseline model,当模型等于baseline model时,$R^2$=0,而当$R^2$>0时则比baseline model要好,如果$R^2$<0时,则不如baseline model.

sklearn参数详解

sklearn 里面可以直接使用linearregression

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class sklearn.linear_model.LinearRegress(fit_intercept=True,normalize=False,copy_X=True,n_jobs=1)

参数:
fit_intercept:布尔值,可选,指是否计算该模型的截距.
normalize:布尔值,可选,如果为真,则回归前的回归系数X将减去平均值并除以L2范数而归一化。如果您想要标准化,请在使用sklearn.preprocess.StandarScaler调用fit估算器之前使用normalize=False
copy_X:布尔值,可选,默认为True
n_jobs:int,可选,默认为1

属性:
coef_:数组(n_features,)或(n_target,n_feature)线性回归问题的估计系数
intercept_:数组,线性模型中的独立项

方法:
fit(X,y)拟合线性模型
get_params([])获取估算器参数
predict(X) 使用线性模型预测
score(X,y)

1
2
3
4
5
from sklearn import linear_model
reg=linear_model.LinearRegression()
reg.fit([[0,0],[1,1],[2,2]],[0,1,2])#用线性回归器拟合三个点
reg.coef_
#返回系数

线性回归的推广——Ridge、Lasso

1
2
3
4
5
from sklearn import linear_model
reg_Ridge=linear_model.Ridge(alpha=.5)
reg_Lasso=linear_model.Lasso(alpha=.1)
reg_Ridge.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
reg_Lasso.fit([[0, 0], [1, 1]], [0, 1])

此外
sklearn的linear_model中还包括了
(1)ARDRegression:ARD自相关回归算法
(2)BayesianRidge:贝叶斯线性回归算法
(3)ElasticNet:弹性网络算法
(4)HuberRegressor:Huber回归算法
(5)LinearRegression:最小二乘法线性回归算法
(6)LARS:最小角回归算法
(7)LassoLars: LARS算法实现的lasso模型的回归算法
(8)LogisticRegression:逻辑回归算法
(9)MultiTaskElasticNet:多任务的弹性网络算法
(10)MultiTaskLasso:多任务的LASSO回归算法
(11)OrthogonalMatchingPursuit:正交匹配跟踪算法
(12)Perceptron:感知器算法
(13)PassiveAggressiveClassifier:被动攻击算法
(14)SGDClassifier:SGD随梯度下降算法

参考文献

  1. https://www.cnblogs.com/kamekin/p/9683162.html
-------------本文结束感谢您的阅读-------------

本文标题:初级算法梳理(一)

文章作者:Yif Du

发布时间:2019年03月28日 - 10:03

最后更新:2019年03月31日 - 20:03

原始链接:http://yifdu.github.io/2019/03/28/初级算法梳理(一)/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。