机器学习中的一些概念

@TOC机器学习中的一些概念

一、机器学习中的一些概念

1.1 监督学习(Supervised learing)

一句话回答:通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出。
常用的监督学习模型:K-近邻算法(k-Nearest Neighbors,KNN)、线性回归、线性逻辑回归、SVM、决策树、朴素贝叶斯
如何解决一个给定的监督式学习问题,考虑以下步骤

1)决定训练资料的范例的形态。在做其它事前,工程师应决定要使用哪种资料为范例。譬如,可能是一个手写字符,或一整个手写的词汇,或一行手写文字。

2)搜集训练资料。这资料须要具有真实世界的特征。所以,可以由人类专家或(机器或传感器的)测量中得到输入物件和其相对应输出。

3)决定学习函数的输入特征的表示法。学习函数的准确度与输入的物件如何表示是有很大的关联度。传统上,输入的物件会被转成一个特征向量,包含了许多关于描述物件的特征。因为维数灾难的关系,特征的个数不宜太多,但也要足够大,才能准确的预测输出。

4)决定要学习的函数和其对应的学习算法所使用的数据结构。譬如,工程师可能选择人工神经网络和决策树。

5)完成设计。工程师接着在搜集到的资料上跑学习算法。可以借由将资料跑在资料的子集(称为验证集)或交叉验证(cross-validation)上来调整学习算法的参数。参数调整后,算法可以运行在不同于训练集的测试集上

1.2 无监督学习(Unsupervised learning)

一句话回答:直接对输入数据集进行建模,例如聚类。
无监督学习:目的是对原始资料进行分类,以便了解资料内部结构。有别于监督式学习网络,无监督学习网络在学习时并不知道其分类结果是否正确,就是说不知道哪种学习是正确的(没有受到监督式增强)。其特点时候仅对此种网络提供输入样例,它会自动从这些样例中找出潜在的类别规则。当学习完毕并经测试后,也可以将之应用到新的样例上。
无监督学习模型:聚类。

1.3泛化能力

是指一个机器学习算法对于没有见过的样本的识别能力。我们也叫做举一反三的能力,或者叫做学以致用的能力。例如,在回归问题,预测房价,我们通过训练的样本学习得到了一个模型。该模型对于新来的样本,进行房价预测,如果预测出的房价与实际房价相差很小,那么也可以说这个模型的泛化能力好。

1.4过拟合

过拟合是指机器在给出的训练集中,表现地非常完美,能够很准确地预测出训练集中给出的每个样本相对应的结果,然后通过训练集训练出模型后,放到测试集中,却表现的很差,过拟合也可以说是高方差。例如,在房价预测中,训练出来的模型,对于训练集,都能准确给出正确的房价。然而在测试集,结果却相差很大,预测准确度超低。

产生过拟合的原因:特征太多;训练集太少;分支分太多(决策树)。
避免过拟合的方法: 特征提取;特征选择;正则化L1、L2;增加数据集的数量;适当的stopping criterion ;剪枝(决策树)。

1.5欠拟合

是和过拟合相对的现象,可以说是模型的复杂度较低,没法很好的学习到数据背后的规律。就好像开普勒在总结天体运行规律之前,他的老师第谷记录了很多的运行数据,但是都没法用数据去解释天体运行的规律并预测,这就是在天体运行数据上,人们一直处于欠拟合的状态,只知道记录过的过去是这样运行的,但是不知道道理是什么。欠拟合也叫高偏差。
避免欠拟合的方法: 添加其他特征项;添加多项式特征;减少正则化参数。

1.6交叉验证

交叉验证是除了将样本分成训练集和测试集外,还要将训练集分成训练集和验证集。交叉验证需要多次划分训练集和验证集,得出不同的互补子集,设置不同参数训练出模型,然后在验证集下,比较出表现好的模型,再将表现好的模型用测试集进行测试。
常用的交叉验证方法:

留出法(Hold-Out Method):将原始数据随机分为两组,一组做为训练集,一组做为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此Hold-OutMethod下分类器的性能指标。此种方法的好处的处理简单,只需随机把原始数据分为两组即可,其实严格意义来说Hold-Out Method并不能算是CV,因为这种方法没有达到交叉的思想,由于是随机的将原始数据分组,所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性!

k折法 (K-fold Cross Validation):将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标.K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2.K-CV可以有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性。

留一法(Leave-One-Out Cross Validation:每次只将一份样本作为验证集,其他样本作为训练集,有多少样本就重复多少次来训练模型。优点:最接近原始样本的分布,这样评估所得的结果比较可靠。缺点:计算量太大,样本有多少,就要生成多少个模型。

二、线性回归的原理

给定由d个属性描述的示例 x\pmb xxxx = (x1x_{1}x1​;x2x_{2}x2​;x3x_{3}x3​;…;xdx_{d}xd​),其中x1x_{1}x1​是x\pmb xxxx在第i个属性上的取值,线性模型试图学得一个通过属性的线性组合来进行预测的函数,即

f(x)=w1x1+w2x2+...+wdxd+b, f(x) = w_{1}x_{1}+w_{2}x_{2}+...+w_{d}x_{d}+b, f(x)=w1​x1​+w2​x2​+...+wd​xd​+b,
一般用向量形式写成
f(x)=wTx+b f(\pmb x) = \pmb w^{T}\pmb x+b f(xxx)=wwwTxxx+b
其中 w\pmb wwww=(w1;w_{1};w1​;w2;w_{2};w2​;w3;w_{3};w3​;…wdw_{d}wd​). w\pmb wwww和bbb学得之后。模型就得以确定。
线性模型形式简单、易于建模,但却蕴含着机器学习中一些重要的基本思想,许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结果或高维映射而得。此外,由于 w\pmb wwww直观表达了个属性在预测中的重要性,因此线性模型有很好的可解释性。

三、线性回归的目标函数、损失函数(代价函数)

线性回归试图学得f(xi)f(x_{i})f(xi​)=www∗xix_{i}xi​+bbb(目标函数)使得f(xi)f(x_{i})f(xi​)≃yiy_{i}yi​ ,如何确定www_ {w}ww​和bbb呢?关键在于如何衡量f(x)f(x)f(x)与y{y}y之间的差别。
均方误差是回归任务中常用的性能度量,因此我们试图让均方误差(损失函数,或代价函数)最小化,即
(w,b)=argmin(w,b)i=1m(f(xi)yi)2=argmin(w,b)i=1m(yiwxib)2 (w^*,b^*)=argmin_{(w,b)} \sum_{i=1}^{m}(f(x_i)-y_i)^2=argmin_{(w,b)} \sum_{i=1}^{m}(y_{i}-wx_{i}-b)^2 (w∗,b∗)=argmin(w,b)​i=1∑m​(f(xi​)−yi​)2=argmin(w,b)​i=1∑m​(yi​−wxi​−b)2
均方误差有非常好的几何意义,它对应了常用的欧几里得距离(欧氏距离),基于均方误差最小化来进行模型求解的方法称为“最小二乘法”。
在线性回归中,最小二乘法就是试图找到一条直线,使得所有样本到直线上的欧氏距离之和最小。
求解www和bbb使(w,b)\sum_{(w,b)}∑(w,b)​=i=1m(f(xi)yi)2\sum_{i=1}^{m}(f(x_i)-y_i)^2∑i=1m​(f(xi​)−yi​)2 最小化的过程,称为线性回归模型的最小二乘“参数估计”。

四、优化方法(梯度下降法、牛顿法等)

对于目标函数为凸函数的情况下,可以使用直接求导的方法,在导数或者偏导取得0的时候,说明在该处为最低点,就是说误差值最小,预测结果最接近真实值。
这个过程要涉及到矩阵求导,对于矩阵求导,要知道
xTαx=αTxx=α \frac{\partial \mathit x^T\alpha }{\partial x} = \frac{\partial \alpha^T \mathit x}{\partial x} = \alpha ∂x∂xTα​=∂x∂αTx​=α
梯度下降法: 梯度下降方法基于以下的观察:如果实值函数 F(x){\displaystyle F(\mathbf {x} )}F(x)在点a\mathbf {a}a处可微且有定义,那么函数 F(x){\displaystyle F(\mathbf {x} )}F(x) 在 a{\displaystyle \mathbf {a} }a点沿着梯度相反的方向 F(a){\displaystyle -\nabla F(\mathbf {a} )}−∇F(a) 下降最快。

因而,如果

b=aγF(a) {\displaystyle \mathbf {b} =\mathbf {a} -\gamma \nabla F(\mathbf {a} )} b=a−γ∇F(a)
对于 γ>0{\displaystyle \gamma >0}γ>0为一个够小数值时成立,那么 F(a)F(b){\displaystyle F(\mathbf {a} )\geq F(\mathbf {b} )}F(a)≥F(b)。

考虑到这一点,我们可以从函数 F{\displaystyle F}F的局部极小值的初始估计 x0{\displaystyle \mathbf {x} _{0}}x0​出发,并考虑如下序列 x0,x1,x2,{\displaystyle \mathbf {x} _{0},\mathbf {x} _{1},\mathbf {x} _{2},\dots }x0​,x1​,x2​,… 使得
xn+1=xnγnF(xn), n0 {\displaystyle \mathbf {x} _{n+1}=\mathbf {x} _{n}-\gamma _{n}\nabla F(\mathbf {x} _{n}),\ n\geq 0} xn+1​=xn​−γn​∇F(xn​), n≥0
因此可得到
F(x0)F(x1)F(x2) , {\displaystyle F(\mathbf {x} _{0})\geq F(\mathbf {x} _{1})\geq F(\mathbf {x} _{2})\geq \cdots ,} F(x0​)≥F(x1​)≥F(x2​)≥⋯,
如果顺利的话序列 (xn){\displaystyle (\mathbf {x} _{n})}(xn​)收敛到期望的极值。注意每次迭代步长 γ{\displaystyle \gamma }γ可以改变。

右侧的图片示例了这一过程,这里假设 F{\displaystyle F}F定义在平面上,并且函数图像是一个碗形。蓝色的曲线是等高线(水平集),即函数 F{\displaystyle F}F 为常数的集合构成的曲线。红色的箭头指向该点梯度的反方向。(一点处的梯度方向与通过该点的等高线垂直)。沿着梯度下降方向,将最终到达碗底,即函数 F{\displaystyle F}F 值最小的点。
机器学习中的一些概念
牛顿法: 基本牛顿法是一种是用导数的算法,它每一步的迭代方向都是沿着当前点函数值下降的方向。
我们主要集中讨论在一维的情形,对于一个需要求解的优化函数f(x){f(x)}f(x),求函数的极值的问题可以转化为求导函数f(x)=0{f'(x)}=0f′(x)=0。对函数进行泰勒展开到二阶,得到
f(x)=f(xk)+f(xk)(xxk)+12f(xk)(xxk)2 {f(x) = f(x_{k})+f'(x_{k})(x-x_{k})} +\frac12*f''(x_{k})(x-x_{k})^2 f(x)=f(xk​)+f′(xk​)(x−xk​)+21​∗f′′(xk​)(x−xk​)2
其中泰勒展开的通式为:
fn(xk)(xxk)nn! \frac {f^{n}(x_{k})(x-x_{k})^{n}}{n!} n!fn(xk​)(x−xk​)n​
对上式求导并令其为0,则为
x=xkf(xk)f(xk) x = x_{k} - \frac {f'(x_{k})}{f''(x_{k})} x=xk​−f′′(xk​)f′(xk​)​
即得到
这就是牛顿法的更新公式。
实际意义是
机器学习中的一些概念
牛顿法一般是用来求解 方程 f(x)=0f(x) = 0f(x)=0 的解.比如用牛顿法求上图f(x)=0f(x) = 0f(x)=0的解, 首先我们在坐标轴上随机取一点A, 在A做曲线切线, 与x轴相交于B点, 此时再取点(B,f(b)){ (B, f(b))}(B,f(b)) 做曲线切线, 再次与x轴相交,重复上述步骤N次(即迭代N次), 将会得到或是无限逼近 f(x)=0f(x) = 0f(x)=0的点,即解得方程.
数学表达式为:

A点的切线方程为:y=f(xA)+f(xA)(xxA){y = f(x_{A})+f'(x_{A}) * (x-x_{A})}y=f(xA​)+f′(xA​)∗(x−xA​)
B点坐标: f(xA)+f(xA)(xxA)=0{f(x_{A})+f'(x_{A}) * (x-x_{A}) = 0}f(xA​)+f′(xA​)∗(x−xA​)=0推出 xB=xAf(xA)/f(xA){x_{B} = x_{A} - f(x_{A}) / f’(x_{A})}xB​=xA​−f(xA​)/f’(xA​)
B点切线方程: y=f(xB)+f(xB)(xxB){y = f(x_{B})+f'(x_{B}) * (x-x_{B})}y=f(xB​)+f′(xB​)∗(x−xB​)

n点坐标xn=xn1f(n1)/f(n1){ x_{n} = x_{n-1} - f(n-1) / f'(n-1)}xn​=xn−1​−f(n−1)/f′(n−1)

五.评估指标

我们可以采用如下的指标来进行衡量。

MSE
RMSE
MAE

R2\pmb {R ^ {2}}R2R2R2

5.1 MSE
MSE(Mean Squared Error),平均平方误差,为所有样本误差(真实值与预测值之差)的平方和,然后取均值。
MSE=1mi=1m(y(i)y^(i))2 MSE=\frac1m∑_{i=1}^m(y^{(i)}−\hat y^{(i)})^2 MSE=m1​i=1∑m​(y(i)−y^​(i))2
5.2 RMSE
RMSE(Root Mean Squared Error),平均平方误差的平方根,即在MSE的基础上,取平方根。
RMSE=MSE=1mi=1m(y(i)y^(i))2 RMSE=\sqrt {MSE}=\sqrt {\frac1m∑_{i=1}^m(y^{(i)}−\hat y^{(i)})^2} RMSE=MSE​=m1​i=1∑m​(y(i)−y^​(i))2
5.3 MAE
MAE(Mean Absolute Error),平均绝对值误差,为所有样本误差的绝对值和。
MAE=1mi=1my(i)y^(i) MAE=\frac 1m∑_{i=1}^m∣y^{(i)}−\hat y^{(i)}∣ MAE=m1​i=1∑m​∣y(i)−y^​(i)∣

5.4 R2\pmb{ R^{2}}R2R2R2
R2\pmb{ R^{2}}R2R2R2为决定系数,用来表示模型拟合性的分值,值越高表示模型拟合性越好,最高为1,可能为负值。R2\pmb{ R^{2}}R2R2R2的计算公式为1减去RSS与TSS的商。其中,TSS(TotalSumofSquares)\pmb {TSS(Total Sum of Squares)}TSS(TotalSumofSquares)​TSS(TotalSumofSquares)​​TSS(TotalSumofSquares)为所有样本与均值的差异,是方差的m倍。而RSSResidualsumofsquares\mathbf { RSS(Residual sum of squares)}RSS(Residualsumofsquares)为所有样本误差的平方和,是MSE的m倍。
R2=1RSSTSS=1i=1m(y(i)y^(i))2i=1m(y(i)yˉ(i))2 \pmb{ R^{2}} = 1 - \frac {RSS}{TSS} = 1 - \frac {\sum_{i=1}^m(y^{(i)}-\hat y^{(i)})^2}{\sum_{i=1}^m(y^{(i)}-\bar y^{(i)})^2} R2R2R2=1−TSSRSS​=1−∑i=1m​(y(i)−yˉ​(i))2∑i=1m​(y(i)−y^​(i))2​
yˉ=1mi=1my(i) \mathtt {\bar y} = \frac 1m{\sum_{i=1}^my^{(i)}} yˉ​=m1​i=1∑m​y(i)
从公式定义可知,最理想情况,所有的样本的预测值与
真实值相同,即RSS为0,此时 R2\pmb{ R^{2}}R2R2R2 为1。

六.sklearn.linear_model.LinearRegression 参数详解

最小二乘法线性回归:sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)

主要参数说明:

fit_intercept:布尔型,默认为True,若参数值为True时,代表训练模型需要加一个截距项;若参数为False时,代表模型无需加截距项。

normalize:布尔型,默认为False,若fit_intercept参数设置False时,normalize参数无需设置;若normalize设置为True时,则输入的样本数据将(X-X均值)/||X||;若设置normalize=False时,在训练模型前, 可以使用sklearn.preprocessing.StandardScaler进行标准化处理。

属性:

coef_:回归系数(斜率)

intercept_:截距项

主要方法

①fit(X, y, sample_weight=None)

②predict(X)

③score(X, y, sample_weight=None),其结果等于1((ytrueypred)2)/((ytrueytrue.mean())2)1-\sum((y_{true} - y_{pred}) ^2)/ \sum((y_{true} - y_{true}.mean()) ^2)1−∑((ytrue​−ypred​)2)/∑((ytrue​−ytrue​.mean())2)

>>> import numpy as np
>>> from sklearn.linear_model import LinearRegression
>>> X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
>>> # y = 1 * x_0 + 2 * x_1 + 3
>>> y = np.dot(X, np.array([1, 2])) + 3
>>> reg = LinearRegression().fit(X, y)
>>> reg.score(X, y)
1.0
>>> reg.coef_
array([1., 2.])
>>> reg.intercept_ 
3.0000...
>>> reg.predict(np.array([[3, 5]]))
array([16.])
上一篇:关于购买Redis服务器:腾讯云、阿里云还是华为云?


下一篇:将电脑里大于1M的图片备份(C盘除外)