0%

机器学习基础笔记:线性回归与特征缩放

0.概述

部分摘录

1. 线性回归

1.1 特征缩放(归一化)

1.1.1 Standardization

Standardization又称为 Z-score normalization,量化后的特征将服从标准正态分布:

z = (Xi-μ)/δ

其中, μ , δ 分别为对应特征 xi 的均值和标准差。量化后的特征将分布在 [−1,1] 区间

1.1.2 Min-Max Scaling

Min-Max Scaling 又称为 normalization,特征量化的公式为:

z = xi−min(xi) / max(xi)−min(xi)

量化后的特征将分布在[0,1]区间。

大多数机器学习算法中,会选择 Standardization 来进行特征缩放,但是,Min-Max Scaling 也并非会被弃置一地。在数字图像处理中,像素强度通常就会被量化到[0,1] 区间,在一般的神经网络算法中,也会要求特征被量化到 [0,1] 区间。

1.2 学习率的调节

1.2.1 梯度下降

  • 批量梯度下降
  • 随机梯度下降

1.2.2 正规方程

我们通过梯度下降法来求得J(θ) 的最小值,但是对于学习率α 的调节有时候使得我们非常恼火。为此,我们可通过正规方程来最小化 J(θ) :

θ=(X^T^X)^−1^X^T^y

其中, X 为输入向量矩阵,第0 个特征表示偏置(x0=1), y 为目标向量,仅从该表达式形式上看,我们也脱离了学习率α 的束缚。

1.3 欠拟合与过拟合

1.3.1 局部加权线性回归(LWR)

为了解决欠拟合和过拟合问题,引入了局部加权线性回归。

LWR 补充自机器学习实战一书,后续章节中我们知道,更一般地,我们使用正规化来解决过拟合问题。

2. 逻辑回归

  • 逻辑回归就是解决分类问题,求决策边界

2.1 0/1 分类问题

简单的根据y值大小(类别)进行分类

2.2 逻辑回归

上一节我们知道,使用线性回归来处理 0/1 分类问题总是困难重重的,因此,人们定义了逻辑回归来完成 0/1 分类问题,逻辑一词也代表了是(1)和非(0)。

2.2.1 Sigmoid预测函数

在逻辑回归中,定义预测函数为:
hθ(x)=g(z)

其中, z=θ^T^x 是分类边界(分类边界曲线/线),且g(z)=1 / 1+e^−z^

g(z) 称之为 Sigmoid Function,亦称 Logic Function

2.3 决策边界

决策边界,顾名思义,就是用来划清界限的边界,边界的形态可以不定,可以是点,可以是线,也可以是平面。Andrew Ng 在公开课中强调:“决策边界是预测函数 hθ(x) 的属性,而不是训练集属性”,这是因为能作出“划清”类间界限的只有hθ(x) ,而训练集只是用来训练和调节参数的。

2.4 利用正规化解决过拟合问题

在之前的文章中,我们认识了过拟合问题,通常,我们有如下策略来解决过拟合问题:

减少特征数,显然这只是权宜之计,因为特征意味着信息,放弃特征也就等同于丢弃信息,要知道,特征的获取往往也是艰苦卓绝的。

不放弃特征,而是拉伸曲线使之更加平滑以解决过拟合问题,为了拉伸曲线,也就要弱化一些高阶项(曲线曲折的罪魁祸首)。由于高阶项中的特征 x 无法更改,因此特征是无法弱化的,我们能弱化的只有高阶项中的系数 θi 。我们把这种弱化称之为是对参数 θ 的惩罚(penalize)。Regularization(正规化)正是完成这样一种惩罚的“侩子手”

2.5 多分类问题

通常采用 One-vs-All,亦称 One-vs-the Rest 方法来实现多分类,其将多分类问题转化为了多次二分类问题。假定完成K个分类,One-vs-All 的执行过程如下:

  • 轮流选中某一类型i,将其视为正样本,即 “1” 分类,剩下样本都看做是负样本,即 “0” 分类。
  • 训练逻辑回归模型得到参数 θ^(1)^,θ^(2)^,…,θ^(K)^ ,即总共获得了K−1个决策边界。

给定输入x,为确定其分类,需要分别计算 hθ^(k)^(x),k=1,…,K , hθ^(k)^(x)越趋近于 1,x 越接近是第k类。

总结:ABC三类,将A当作一类,BC当作一类,得到决策边界h1;然后将B当一类,AC当一类,得到决策边界h2,以此类推。然后将目标xθ代入h1,h2,h3中求解。哪个值越接近1,即为x0的类别。

这里为什么条件是接近1:因为逻辑回归的归一化函数比如说上面的sigmod函数归一化的值区间为[0,1],如果h3(x0)值为0.8表示x0有0.8的概率为h3类别,并不是h3(x0)的值越大表示它的类别一定为h3

3. 神经网络

3.1 再论 0/1 分类问题

在逻辑回归中,通过对特征进行多项式展开,可以让逻辑回归支持非线性的分类问题。
但是当数据的特征维度比较高的时候,多项式展开扩展后的特征个数是特别高的,对计算机的性能提出了很大的挑战。

比如说在计算机视觉(CV)领域,图像的特征往往都是高维的

因此,就需要考虑用新的机器学习模型来处理高维特征的非线性分类问题,神经网络是典型的不需要增加特征数目就能完成非线性分类问题的模型

3.2 神经网络概述

3.2.1 卷积层

作用:提取图像特征

关于卷积核的选取

3.2.2 池化层

特征降维

3.2.3 全连接层

全连接的核心操作就是矩阵向量乘积:y=Wx

本质就是由一个特征空间线性变换到另一个特征空间。目标空间的任一维——也就是隐层的一个 cell——都认为会受到源空间的每一维的影响。不考虑严谨,可以说,目标向量是源向量的加权和。

在 CNN 中,全连接常出现在最后几层,用于对前面设计的特征做加权和。比如 mnist,前面的卷积和池化相当于做特征工程,后面的全连接相当于做特征加权。(卷积相当于全连接的有意弱化,按照局部视野的启发,把局部之外的弱影响直接抹为零影响;还做了一点强制,不同的局部所使用的参数居然一致。弱化使参数变少,节省计算量,又专攻局部不贪多求全;强制进一步减少参数。少即是多)

在 RNN 中,全连接用来把 embedding 空间拉到隐层空间,把隐层空间转回 label 空间等

4. 算法分析与优化

4.1 调优方法

在线性回归中,我们使用了如下的代价函数来评估预测误差:
J(θ)=1 / 2m(costFunction + 正则化表达式)

想要降低预测误差,即提高预测精度,我们往往会采用这些手段:

手段 优/劣
采集更多的样本 我们认为见多识广会让人变得聪明,但是也会让人变得优柔寡断,或者聪明反被聪明误。
降低特征维度 也许被降掉的维度会是非常有用的知识。
采集更多的特征 增加了计算负担,也可能导致过拟合。
进行高次多项式回归 可能造成过拟合。
调试正规化参数λ 这个调节策略缺乏指导,只能是猜测性调节。

4.2 数据集划分

训练集:70%
测试集:30%

在对数据集进行训练集和测试集的划分前,最好先对数据集进行乱序,防止类似样本聚到一起

4.2.1 交叉验证集

在多项式回归中,我们总是尝试不同的多项式次数(degree),形成了不同的预测模型:

y1= θ0X

y2 = θ0X + θ1X^2^

y3 = θ0X + θ1X^2^ + θ2X^3^

假设y3的测试误差最小,我们选取y3中的θ作为模型的参数。
这时参数已经有了,如何评估模型的泛化能力呢?

这时就要使用交叉验证集对模型的泛化能力进行验证。通常情况下:

  • 训练集:60%,确定参数 θ
  • 交叉验证集:20%,进行模型选择。
  • 测试集:20%,评价模型预测能力。
1
2
3
graph LR
使用训练集得到参数θ-->使用交叉验证集对模型泛化能力进行验证可能会修改超参数θ的值
使用交叉验证集对模型泛化能力进行验证可能会修改超参数θ的值--> 使用测试集评价模型预测能力

4.3偏差与方差

在机器学习中,偏差(bias)反映了模型无法描述数据规律,而方差(variance)反映了模型对训练集过度敏感,而丢失了数据规律,高偏差和高方差都会造成新数据到来时,模型给出错误的预测。

通过诊断(Diagnose)模型是出现了高偏差问题还是高方差问题,我们能对症下药,采取不同的解决策略

方法 使用场景
采集更多的样本 高方差
降低特征维度 高方差
采集更多的特征 高偏差
进行高次多项式回归 高偏差
降低参数 λ 高方差
增大参数 λ 高偏差

4.4 问题分析方法

对于机器学习问题,吴恩达给出了一些 tips:

  • 在一开始,尽量不要将问题复杂化(不要提前优化),先快速实现一个简单算法,然后通过交叉验证集评估模型。这就好比在软件工程中,不会做提前优化,而是先迭代功能。
  • 通过绘制学习曲线(learning curve),确定面临的问题是高偏差还是高方差,来决定是添加更多训练样本,还是添加更多特征。
  • 甚至可以手动检查交叉验证集中误差较大的样本,确定错误的来源和解决策略。

4.4.1 举个例子

假定交叉验证集有 500 个样本,即 mcv=500mcv=500 ,我们的模型错分了其中 100 个样本,那么我们会通过下述手段进行错误分析:

  • 需要知道哪些邮件被错分了,是假冒伪劣的推销邮件?医药邮件?还是钓鱼邮件?
  • 需要知道提供什么线索(特征)能帮助模型区分出这些邮件?

例如,在这 100 个错分样本中,我们发现有 53 个样本是钓鱼邮件,因此,我们就需要考虑为模型注入识别的钓鱼邮件的能力。继续观察,我们发现,在这 53 封钓鱼邮件中,故意使用错误拼写的邮件有 5 封,来源可疑(发送人可疑)的邮件有 16 封,使用了大量煽动性标点符号的邮件有 32 封。因此,对于识别钓鱼邮件来说,我们更适合将煽动性标点符号添加为特征,而不用再考虑去识别错误拼写。

5. SVM

常用来处理多维度不规则分类问题

5.1 大间距分类器

SVM 是典型的大间距分类器:寻找一个直线(面)将数据分类,而这个线(面)到所有点的距离之和最大

5.2 核函数

在逻辑回归中,我们会通过多项式扩展来处理非线性分类问题:
h0(x)=θ01x12x23x1x24x1^2^+θ5x2^2^+⋯

假设我们令:

f1=x1,

f2=x2,

f3=x1x2,

f4=x1^2^,

f5=x2^2^

则预测函数为:

hθ(x)=θ01f12f23f3+⋯

但多项式回归所带来的高阶项不一定作用明显,针对这一问题,SVM 不会引入高阶项来作为新的特征,而是会选择一些标记点(landmark),并将样本x与标记点l^(i)^的相似程度作为新的训练特征fi(将fi作为数据集的一个属性进行训练)

距离度量的方式就称之为核函数(Kernel),最常见的核函数是高斯核函数(Gaussian Kernel)

5.3 svm的使用说明

5.3.1 参数和核函数

使用这些库时,我们通常需要声明 SVM 需要的两个关键部分:

  • 参数 C

    由于 C 可以看做与正规化参数 λ 作用相反,则对于 C 的调节:

    低偏差,高方差,即遇到了过拟合时:减小 C 值。
    高偏差,低方差,即遇到了欠拟合时:增大 C 值。

  • 核函数(Kernel)

    而对于核函数的选择有这么一些 tips:

    当特征维度n较高,而样本规模m较小时,不宜使用核函数,否则容易引起过拟合。

    当特征维度n较低,而样本规模m足够大时,考虑使用高斯核函数。不过在使用高斯核函数前,需要进行特征缩放(feature scaling)。另外,当核函数的参数δ较大时,特征fi 较为平缓,即各个样本的特征差异变小,此时会造成欠拟合(高偏差,低方差):

5.3.2 分类模型的选择

目前,我们学到的分类模型有:

(1)逻辑回归
(2)神经网络;
(3)SVM。

怎么选择在这三者中做出选择呢?我们考虑特征维度n及样本规模m :

  • 如果n相对于m非常大,例如例如 n=10000,m∈(10,10000) :此时选用用逻辑回归或者无核的 SVM。
  • 如果n较小,m适中,如 n∈(1,1000) ,而 m∈(10,10000) :此时选用核函数为高斯核函数的 SVM。
  • 如果n较小,m 较大,如 n∈(1,1000) ,而 m>50000 :此时,需要创建更多的特征(比如通过多项式扩展),再使用逻辑回归或者无核的 SVM。

神经网络对于上述情形都有不错的适应性,但是计算性能上较慢。

6. k-means

  • 聚类算法,其中的k为簇的种类数
  • 簇中心的选取:遍历随机初始化选取
  • 确定聚类数:肘部法则

6.1 二分k-means

  • 常规的 K-Means 算法的误差通常只能收敛到局部最小,在此,引入一种称为二分 K-Means(bisecting kmeans)的算法,相较于常规的 K-Means,二分 K-Means 不急于一来就随机K个聚类中心,而是首先把所有点归为一个簇,然后将该簇一分为二。计算各个所得簇的失真函数(即误差),选择误差最大的簇再进行划分(即最大程度地减少误差),重复该过程直至达到期望的簇数目
  • 虽然二分 K-Means 能带来全局最优解,但是我们也可以看到,该算法是一个贪心算法,因此计算量不小。

7. 特征降维

  • 特征降维的一般手段就是将高维特征投影到低维空间

7.1 PCA(主成分分析)

PCA,Principle Component Analysis,即主成分分析法,是特征降维的最常用手段。顾名思义,PCA 能从冗余特征中提取主要成分,在不太损失模型质量的情况下,提升了模型训练速度

8. 异常检测

8.1 高斯分布模型

异常检测的核心就在于找到一个概率模型,帮助我们知道一个样本落入正常样本中的概率,从而帮助我们区分正常和异常样本。高斯分布(Gaussian Distribution)模型就是异常检测算法最常使用的概率分布模型。

9. 推荐系统

9.1 协同过滤

  • 基于用户的协同过滤推荐(User-based Collaborative Filtering Recommendation)

    基于用户的协同过滤推荐算法先使用统计技术寻找与目标用户有相同喜好的邻居,然后根据目标用户的邻居的喜好产生向目标用户的推荐。基本原理就是利用用户访问行为的相似性来互相推荐用户可能感兴趣的资源

  • 基于项目的协同过滤推荐(Item-based Collaborative Filtering Recommendation)

    根据所有用户对物品或者信息的评价,发现物品和物品之间的相似度,然后根据用户的历史偏好信息将类似的物品推荐给该用户

  • 基于模型的协同过滤推荐(Model-based Collaborative Filtering Recommendation)

基模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测推荐