机器学习基础概念和线性回归-Task1


title: 机器学习基本概率–线性回归
date: 2019-03-28 19:48:22
tags: [Machine Learning, 基础, 算法]

机器学习基本概念& 线性回归

机器学习系统的种类

主要的分类

是否动态学习
  • 在线学习

    简单理解:

    通过(在线)持续接受的数据流进行学习,逐步积累学习成果。

  • 批量学习

    简单理解:

    一次性输入全部数据进行学习,相比在线学习批量学习是一种‘离线’的学习

是否监督学习(监督程度和监督类型划分)
  • 监督学习

    Wikipedia:

    监督式学习(英语:Supervised learning),是机器学习的一种方法,可以由训练资料中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。[1]训练资料是由输入物件(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

    一个监督式学习者的任务在观察完一些事先标记过的训练范例(输入和预期输出)后,去预测这个函数对任何可能出现的输入的输出。要达到此目的,学习者必须以"合理"(见归纳偏向)的方式从现有的资料中一般化到非观察到的情况。在人类和动物感知中,则通常被称为概念学习(concept learning)。

    简单理解:

    即提供给算法的训练数据已经被标记好了。

  • 无监督学习

    Wikipedia:

    无监督学习(英语:Unsupervised learning)是机器学习的一种方法,没有给定事先标记过的训练示例,自动对输入的数据进行分类或分群。无监督学习的主要运用包含:分群(Cluster Analysis)、关系规则(Association Rule)、维度缩减(Dimensionality Reduce)[1]。它是监督式学习强化学习等策略之外的一种选择。

    一个常见的无监督学习是数据聚类。在人工神经网络中,生成对抗网络(GAN)、自组织映射(SOM)和适应性共振理论(ART)则是最常用的非监督式学习。

    简单理解:
    即训练数据都没有经过标记。

  • 半监督学习

    Wikipedia:

    半监督学习是一类的机器学习任务和技术,还使用无标签的数据进行训练-通常是少量的标记数据与大量未标记的数据。半监督学习介于无监督学习(没有任何标记的训练数据)和监督学习(具有完全标记的训练数据)之间。许多机器学习研究人员发现,未标记的数据与少量标记数据结合使用,可以比无监督学习(没有标记数据)在学习准确性方面有相当大的提高,但没有监督所需的时间和成本学习(标记所有数据)。[1]为学习问题获取标记数据通常需要熟练的人工代理(例如转录音频片段)或物理实验(例如确定蛋白质的3D结构或确定特定位置是否有油) 。因此,与标记过程相关的成本可能使得完全标记的训练集不可行,而未标记数据的获取相对便宜。在这种情况下,半监督学习具有很大的实用价值。半监督学习也是机器学习的理论兴趣和人类学习的模型。

    简单理解:

    少量标记数据+大量未标记数据

  • 强化学习

    Wikipedia:

    强化学习(英语:Reinforcement learning,简称RL)是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。这个方法具有普适性,因此在其他许多领域都有研究,例如博弈论控制论运筹学信息论、仿真优化、多主体系统学习群体智能统计学以及遗传算法。在运筹学和控制理论研究的语境下,强化学习被称作“近似动态规划”(approximate dynamic programming,ADP)。在最优控制理论中也有研究这个问题,虽然大部分的研究是关于最优解的存在和特性,并非是学习或者近似方面。在经济学博弈论中,强化学习被用来解释在有限理性的条件下如何出现平衡。

    在机器学习问题中,环境通常被规范为马可夫决策过程(MDP),所以许多强化学习算法在这种情况下使用动态规划技巧。传统的技术和强化学习算法的主要区别是,后者不需要关于MDP的知识,而且针对无法找到确切方法的大规模MDP。

    强化学习和标准的监督式学习之间的区别在于,它并不需要出现正确的输入/输出对,也不需要精确校正次优化的行为。强化学习更加专注于在线规划,需要在探索(在未知的领域)和遵从(现有知识)之间找到平衡。强化学习中的“探索-遵从”的交换,在多臂老虎机问题和有限MDP中研究得最多。

    简单理解:

    通过观察环境,做出选择,根据回报or惩罚来学习最好的策略。

基础概念

  • 泛化能力

    简单理解:

    通过训练数据的学习,模型对新数据的认知能力。

    提高:

    1. 正则化

    2. 选择更具代表性的特征

    3. 减少噪点

  • 过拟合

    简单理解:

    泛化能力低,模型在测试集上表现远低于训练集

    知乎上的一个图片回答:

    overfiting

  • 欠拟合

    简单理解:

    模型在训练集集上误差很高, 即模型不能理解当前数据中存在的关系,无法得出较高正确率的结果。

    通过图片在理解一下:

    fiting

  • 方差&偏差

    方差:

    模型在训练集上的错误率, 如5%。其实是与训练误差成线性关系的。

    偏差:

    模型在开发集(或测试集)上的表现与训练集上的差距。

  • 解决方法:

    1. 减少数据噪点,增加数据量

    2. 选取更具有代表性的特征

    3. 正则化

    4. 降低模型复杂度

    5. 误差分析,修改模型架构

通过图片理解一下拟合和误差关系:

relation

  • 交叉验证

    Wikipedia:

    交叉验证,有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集测试集。交叉验证的目标是在训练阶段定义一组用于“测试”模型的数据集,以便减少像过拟合的问题,得到该模型将如何衍生到一个独立的数据集的提示。

    交叉验证的理论是由Seymour Geisser所开始的。 它对于防范根据数据建议的测试假设是非常重要的, 特别是当后续的样本是危险、成本过高或科学上不适合时去搜集。

    简单理解:

    将训练集分成多个子集,利用其中的子集进行训练和分析,然后用另一个子集进行验证,分析,来提高泛化能力

    常用方法:

    • Holdout 验证:

      识来说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。 随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。 一般来说,少于原本样本三分之一的数据被选做验证数据。

    • K-flod:

      训练集分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10次交叉验证是最常用的。

    • 留一:

      留一验证(Leave-One-Out Cross Validation, LOOCV)意指只使用原本样本中的一项来当做验证资料, 而剩余的则留下来当做训练资料。 这个步骤一直持续到每个样本都被当做一次验证资料。 事实上,这等同于 K-fold 交叉验证是一样的,其中K为原本样本个数

线性回归

原理

wiki 简介

**线性回归(Linear regression)**是利用称为线性回归方程的最小二乘函数对一个或多个自变量因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。

在线性回归中,数据使用线性预测函数来建模,并且未知的模型参数也是通过数据来估计。这些模型被叫做线性模型。最常用的线性回归建模是给定X值的y的条件均值是X的仿射函数。不太一般的情况,线性回归模型可以是一个中位数或一些其他的给定X的条件下y的条件分布的分位数作为X的线性函数表示。像所有形式的回归分析一样,线性回归也把焦点放在给定X值的y的条件概率分布,而不是X和y的联合概率分布(多元分析领域)。

线性回归是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。这是因为线性依赖于其未知参数的模型比非线性依赖于其未知参数的模型更容易拟合,而且产生的估计的统计特性也更容易确定。

简单理解:

在数据中找寻线性关系,通常关系可以如下表示:
y = m x + b {y = mx + b} y=mx+b
其微分方程:
y ′ = w 1 x 1 + b { y' = w_{1}x_{1} + b} y=w1x1+b
**y’**是预测值

b是偏差

w 1 ​ {w_{1}}​ w1是特征1的权重

x 1 ​ {x_{1}}​ x1是输入特征

相关函数

  • 损失函数

    是定义在单个样本上的,算的是一个样本的误差

  • 代价函数

    定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。

  • 目标函数

    Cost Function + 正则化项。

常用优化方法

梯度下降(gradient descent)

Wikipedia:

梯度下降法(英语:Gradient descent)是一个一阶最优化算法,通常也称为最速下降法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点,这个过程则被称为梯度上升法

详情

整体思想:

通过迭代调整参数从而使成本函数最小化。

在梯度下降法中,批量指的是用于在单次迭代中计算梯度的样本总数。根据这个可以细分:

  • 批量梯度下降

    批量梯度下降法(Batch Gradient Descent,简称BGD)是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行更新,其数学形式如下:

    (1) 对上述的能量函数求偏导:

    1

    (2) 由于是最小化风险函数,所以按照每个参数θθ的梯度负方向来更新每个θθ:

    2

    从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果样本数目mm很大,那么可想而知这种方法的迭代速度!所以,这就引入了另外一种方法,随机梯度下降。

    优点:全局最优解;易于并行实现;

    缺点:当样本数目很多时,训练过程会很慢。

  • 随机梯度下降

    由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法(Stochastic Gradient Descent,简称SGD)正是为了解决批量梯度下降法这一弊端而提出的。

    将上面的能量函数写为如下形式:

    3

    利用每个样本的损失函数对θθ求偏导得到对应的梯度,来更新θθ:

    4

    随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

    优点:训练速度快;

    缺点:准确度下降,并不是全局最优;不易于并行实现。

  • 小批量梯度下降

    小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD),将前两者进行折中.

    5

    MBGD在每次更新参数时使用b个样本(b一般为10),其具体的伪代码形式为

内容参考: Wikipedia

牛顿法

Wikipedia:

牛顿法(英语:Newton’s method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法。方法使用函数 f ( x ) {f(x)} f(x)泰勒级数的前面几项来寻找方程 f ( y ) = 0 {f(y)=0} f(y)=0的根。

牛顿法是二阶优化技术,利用了函数的一阶和二阶导数信息,直接寻找梯度为0的点。

6

将新求得的点的 x 坐标命名为 x 1 {x_{1}} x1,通常 x 1 {x_{1}} x1会比 x 0 {x_{0}} x0更接近方程 f ( x ) = 0 {f(x)=0} f(x)=0的解。因此我们现在可以利用 x 1 {x_{1}} x1开始下一轮迭代。迭代公式可化简为如下所示

7

牛顿法在logistic回归,AdaBoost算法等机器学习算法中有实际应用。

拟牛顿法

在牛顿法的迭代中,需要计算海森矩阵的逆矩阵 H − 1 { H^{-1} } H1,这一计算比较复杂,考虑用一个 n 阶矩阵 G k = G ( x ( k ) ) { G_k=G(x^{(k)}) } Gk=G(x(k)) 来近似代替​ H k − 1 = H − 1 ( x ( k ) ) { H_k^{-1}=H^{-1}(x^{(k)}) } Hk1=H1(x(k))这就是拟牛顿法的基本想法。

要找到近似的替代矩阵,必定要和 H k {H_k} Hk 有类似的性质。先看下牛顿法迭代中海森矩阵 H k {H_k} Hk 满足的条件。首先 H k {H_k} Hk 满足以下关系:

x = x ( k − 1 ) {x=x^{\left(k-1\right)}} x=x(k1) ,由
f ( X ) = g k + H k ( x − x k ) f(X) = g_{k} + H_{k}(x - x^{k}) f(X)=gk+Hk(xxk)

g k − 1 − g k = H k ( x k − 1 − x k ) { g_{k-1} - g_{k} = H_{k}(x^{k-1} - x^{k}) } gk1gk=Hk(xk1xk)
y k = g k − g k − 1 { y_{k} = g_{k} - g_{k-1} } yk=gkgk1,则 y k − 1 = H k δ k − 1 { y_{k-1} = H_{k}\delta_{k-1}} yk1=Hkδk1称为拟牛顿条件(Secant equation)。

如果 H k ​ {H_k}​ Hk 是正定的, H k − 1 ​ {H_k^{-1 }}​ Hk1 也是正定的),那么保证牛顿法的搜索方向 p k ​ {p_k}​ pk是下降方向。这是因为搜索方向是 p k = − H k − 1 g k ​ { p_k=-H_k^{-1}g_k }​ pk=Hk1gk

x k + 1 = x k − H k − 1 g K { x^{k+1} = x^{k} - H^{-1}_{k}g_{K}} xk+1=xkHk1gK
x = x k − λ H k − 1 g k = x k + λ p k { x = x^{k} -\lambda H^{-1}_{k}g_{k} = x^{k} + \lambda p_{k}} x=xkλHk1gk=xk+λpk

f ( x ) { f\left(x\right) } f(x) x ( k ) {x^{\left(k\right)}} x(k) 的泰勒展开可近似为
f ( x ) = f ( x k ) − λ g k T H k − 1 g k { f(x) = f(x^{k}) - \lambda g^{T}_{k}H^{-1}_{k} g_{k}} f(x)=f(xk)λgkTHk1gk

由于 H k − 1 ​ {H_{k}^{-1}}​ Hk1 ,故 g k T H k − 1 g k > 0 ​ {g_{k}^{T} H_{k}^{-1} g_{k} > 0}​ gkTHk1gk>0 λ {\lambda} λ为一个充分小的正数时,
f ( x ) &lt; f ( x ( x ) ) ​ {f\left(x\right) &lt; f\left(x^{\left(x\right)}\right)}​ f(x)<f(x(x)) ,即搜索方向 ​ p k ​ {p_{k}}​ pk是下降方向。

因此拟牛顿法将 G k {G_k} Gk作为 H k − 1 {H_k^{-1}} Hk1 近似。要求 G k {G_k} Gk 满足同样的条件。首先,每次迭代矩阵 G k {G_k} Gk是正定的。同时, G k {G_k} Gk 满足下面的拟牛顿条件:
G k y k = δ k ​ {G_{k}y_{k} = \delta_{k}}​ Gkyk=δk

按照拟牛顿条件,在每次迭代中可以选择更新矩阵 G k + 1 ​ {G_{k+1}}​ Gk+1

评估指标

常见的线性回归评估指标:

  • 平方误差 - MAE(Mean Absolute Error)

    又被称为 l 1 {l_{1}} l1 范数损失(l1-norm loss)
    M A E ( X , h ) = 1 m ∑ i = 1 m ∣ h ( x ( i ) ) − y ( i ) ∣ { MAE(\mathbf{X}, h) = \frac{1}{m}\sum\limits_{i=1}^{m} \left| h(\mathbf{x}^{(i)}) - y^{(i)} \right| } MAE(X,h)=m1i=1mh(x(i))y(i)

  • 均方误差- MSE(Mean Squared Error)

    又被称为$ l_{2}$ 范数损失(l2-norm loss)

    M S E ( X , h θ ) = 1 m ∑ i = 1 m ( θ T x ( i ) − y ( i ) ) 2 MSE(X,h_{\boldsymbol{\theta}}) = \frac{1}{m} \sum\limits_{i=1}^{m} {(\boldsymbol{\theta}^T \mathbf{x}^{(i)} - y^{(i)})^2} MSE(X,hθ)=m1i=1m(θTx(i)y(i))2

  • 均方根误差 - RMSE(Root Mean Squard Error)

    R M S E ( X , h ) = 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 { {RMSE}(\mathbf{X}, h) = \sqrt{\frac{1}{m}\sum\limits_{i=1}^{m}(h(\mathbf{x}^{(i)}) - y^{(i)})^2} } RMSE(X,h)=m1i=1m(h(x(i))y(i))2

sklearn 中的相关参数

官方文档说明

参数

  • fit_intercept : boolean,optional,默认为True

    是否计算此模型的截距。如果设置为False,则不会在计算中使用截距(例如,预计数据已经居中)。

  • normalize : 布尔值,可选,默认为False

    fit_intercept设置为False 时,将忽略此参数。如果为True,则回归量X将在回归之前通过减去平均值并除以l2范数来归一化。如果希望标准化,需要在使用估算器sklearn.preprocessing.StandardScaler之前fit使用normalize=False

  • copy_X : 布尔值,可选,默认为True

    如果为True,则将复制X; 否则,它可能会被覆盖。

  • n_jobs : int或None,可选(默认=无)

    用于计算的作业数。这只会为n_targets> 1和足够大的问题提供加速。 None除非在joblib.parallel_backend上下文中,否则表示1 。 -1表示使用所有处理器。有关 详细信息,请参阅词汇表

属性

  • coef_ : array,shape(n_features,)或(n_targets,n_features)

    线性回归问题的估计系数。如果在拟合期间传递多个目标(y 2D),则这是形状的二维数组(n_targets,n_features),而如果仅传递一个目标,则这是长度为n_features的一维数组。

  • intercept_ : array

    线性模型中的独立项。

方法

fit(X, y[, sample_weight])Fit linear model.
get_params([deep])Get parameters for this estimator.
predict(X)Predict using the linear model
score(X, y[, sample_weight])Returns the coefficient of determination R^2 of the prediction.
set_params(**params)Set the parameters of this estimator.
  • fit(X,y[, sample_weight])

    训练模型。

    • X** : 类似数组或稀疏矩阵,形状(n_samples,n_features)

      培训数据

    • y : array_like,shape(n_samples,n_targets)

      目标值。如有必要,将被转换为X的dtype

    • sample_weight : numpy数组形状[n_samples]

      每个样品的单独重量

  • predict(X)

    用训练好的模型进行预测,并返回预测值。

    X : array_like或稀疏矩阵,形状(n_samples,n_features)样品。

  • score(X,y [,sample_weight])

    返回预测性能的得分。

    X : 类似数组,shape =(n_samples,n_features)

    测试样品。对于一些估计器,这可以是预先计算的核矩阵,而是shape =(n_samples,n_samples_fitted),其中n_samples_fitted是在估计器的拟合中使用的样本的数量。

    y : array-like,shape =(n_samples)或(n_samples,n_outputs)

    X的真值。

    sample_weight : array-like,shape = [n_samples],可选

    样品重量。

  • get_params([deep])

    获取此估算工具的参数

    deep : 布尔值,可选

    如果为True,将返回此估计器的参数并包含作为估算器的子对象。

  • **set_params(**PARAMS)

    params

    将字符串映射到任何字符串映射到其值的参数名称。

    设置此估算器的参数。

    该方法适用于简单估计器以及嵌套对象(例如管道)。后者具有表单的参数, <component>__<parameter>因此可以更新嵌套对象的每个组件。

参考资料

知乎优化方法

wiki牛顿法

wikiRMSE

sklearn sgd

评估指标

其他部分来自Google, 知乎专栏的个人整理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值