Stanford机器学习__Lecture notes CS229. Linear Regression(3)
来源:互联网 发布:java ringbuffer 编辑:程序博客网 时间:2024/05/23 00:59
多项式线性拟合:
前面我们建立假设H0(θ) = θ0 + θ1x对数据进行了简单线性回归的拟合。
但事实上这样的假设存在着极大的主观性,从数据分布上来看(人工数据,从开始我就知道假设H0不可能满足分布)。为了得到更合适的回归拟合,我们提出了三种不同的特征的选择方式,结果如下:
左图,假设为H0(θ) = θ0 + θ1x ,我们可以看到数据不能很好的和数据相吻合。
假设变量y与x的关系为n次多项式,且在xi处对yi的随机误差 εi (i=1,2,…,n)服从正态分布N(0, σ2),则:
Hn - 1(θ) = θ0 + θ1x + θ2x2 + ……+θnxn + ε可以看到我们构建了几个新的特征x2,……xn
令:
x = p1, x2 = p2,…,xn = pn则上述非线性的多项式模型就转化为多元线性模型:
H1(θ) = θ0 + θ1p1 + θ2p2 + ……+θnpn + ε这样我们就可以用前面介绍的线性回归分析的方法来解决上述问题了。
事实上H0(θ)可以被认为是y关于x的n次多项式。
中图,假设为:H1(θ) = θ0 + θ1x + θ2x2
右图,一共6个数据点,所以用5阶多项式就可以做到所有的数据点都在曲线上了,假设为
5阶多项式把所有的误差一起计算在内,得到了一个看似很perfect的回归拟合曲线,但是我们不认为这是一个很好的假设,因为它无法做到很好的预测。
我们称左图的拟合效果为 underfitting(欠拟合),数据中的明显的结构关系没有被模型所捕获。 称右图的拟合效果为 overfitting(过拟合),这种假设只是用于特定的数据,预测效果不好 。
从效果上来看,y关于x的2次多项式能更好的拟合并泛化数据。
我们会在Bias-Variance Tradeoff(权衡偏差与方差) 这一部分来说明一下如何用期望泛化误差MSE来判断哪个拟合效果更好.
局部加权线性回归
那么我们在实线过程中,关于这类的线性回归的拟合总不能对多项式的假设一个一个尝试,感觉不开森。那有没有自动选择特征集的算法,或者是让特征的选择对结果影响不那么大?
接下来我们要引入的就是Locally weighted linear regression (LWR),它可以弱化特征的选择对结果影响。
在最初的线性回归算法中,对于输入变量 ,我们要预测 ,我们通常要做的:
相对而言,对于局部加权线性回归,我们要做:
对应简单线性回归的Normal Equation,这里我们的局部Ө 估计:
Ө=(XTWX)-1XTWY
这里需要注意,由于我们引入了局部回归的概念,所以在数据开始训练之前,我们需要预先对数据进行某种排序。
比如,我有原始数据datasets[0]表示自变量,datasets[1]表示应变量:
datasets = [[1838, 895, 889, 2117, 1606, 1577, 1445, 852, 1544, 2042, 1396,
1381, 2166, 560, 1912, 1835, 1842, 1386, 1133, 661],[1057981, 1737435, 1478503, 1760282, 1481681, 2475224, 2474398,
1888622, 1822441, 1879343, 2678768, 1892778, 2037657, 2016359,
1692353, 2205109, 2066814, 1860923, 1716627, 1546378]]
现在我需要对自变量进行排序,同时时应变量对应到各自的自变量上去datasets = np.array(sorted(np.array(datasets).T, key = itemgetter(0)))
在代码过程中,(XTWX)需要求逆,注意这里的X并不生指整个训练集,而是x周围的部分点,阈值自拟。
同时在代码过程中,由于数据跨域较大,使得x周围没有点,这时在计算(XTWX),会发现该矩阵不可逆,所以在计算矩阵的逆之前判断周围点集的个数,当发现仅仅包含x时,我们直接返回其对应的y值。
我们可以看到局部加权线性回归里面多了一个权值项ω(i) 。直观上, ω(i) 的值越大,它所对应的(y(i) - ӨTx(i))2越大,反之越小。
我们选择ω(i)的形式如下:
其中的 x就是我们要预测的输入变量。为了理解,看下图:
显然,当|x(i) - x|足够小时,ω(i)近似为1;当|x(i) - x|足够大时,ω(i)近似为0;也就是说离x很近的样本会得到接近为1的权值,很远的样本权值近乎为0。
在让我们来看一下ω(i)的形式,和高斯函数形式很像,但其实二者并没有什么关系。
我们的小标题中局部加权线性回归。从上面我们已经知道”局部“,”加权“的来源,那这个线性体现在哪呢?我们想一想,从上面的局部加权回归的两步的第2步我们能够看出,在预测x对应的输出时,我们采用的仍然是线性回归的方式,只是不像初始的线性回归,局部加权线性回归是在”局部“采用线性回归。从下图可能看到更仔细。
假如给定x=10,要预测对应的y值,如果用线性拟合的方法拟合会得到的是图中的绿线,那么对应的点将在该直线上。但如果是局部加权,也就是只考虑(主要)两条虚线之间,也就是圆圈之内的四个点来进行线性拟合,那么得到的是那条红线,对应的点在这条红线上相对的y值就是预测值,从直观上来看就可以认为这种预测会更准确。
介绍到这里似乎没有体现出机器学习的意思,仔细观察就会发现K是一个很重要的东西,我们还是举之前的那组数据为例:
我们需要拟合的数据样本
很明显,这是一个非线性关系的样本数据,我们先用普通最小二乘回归来处理这个问题:
以看到,要用直线来拟合非线性关系非常牵强。
下面我们用刚才介绍的局部加权线性回归来拟合一下这个模型,简单回顾一下过程:
1.用高斯核函数计算出第i个样本处,其它所有样本点的权重W2.用权重w对第i个样本作加权线性回归,得到回归方程,即拟合的直线方程3.用刚才得到的经验回归直线计算出xi处的估计值y^i4.重复一至三步,得到每个样本点的估计值
这里作加权线性回归时,我使用的是把加权最小二乘转换为普通最小二乘的方法。
刚才说到,k是一个很关键的参数,我们从高斯函数的形式可以看出,k取非常大的时候,每个样本点的权重都趋近于1,我们可以先取k很大,检验一下是否正确。
k = 1000.0
k = 100.0
k = 10.0
可以看到,当k越小时,拟合的效果越好。
代码:
https://code.csdn.net/snippets/1855028.git
小结:
LWR算法是我们遇到的第一个non-parametric(非参数)学习算法,而线性回归则是我们遇到的以一个parametric(参数)学习算法。
局部加权回归在每一次预测新样本时都会重新的确定参数,从而达到更好的预测效果当数据规模比较大的时候计算量很大,学习效率很低。并且局部加权回归也不是一定就是避免underfitting。
对于线性回归算法,一旦拟合出适合训练数据的参数Ө,保存这些参数Ө,对于之后的预测,不需要再使用原始训练数据集,所以是 参数学习算法 。
对于局部加权线性回归算法,每次进行预测都需要全部的训练数据(每次进行的预测得到不同的参数Ө),没有固定的参数Ө,所以是 非参数算法 。也就是说,当训练集的容量较大时,非参数学习算法需要占用更多的存储空间,计算速度也较慢。
Stanford机器学习__Lecture notes CS229. Linear Regression(2)
参考:
http://m.blog.csdn.net/article/details?id=16370245
https://zhuanlan.zhihu.com/p/22064801
- Stanford机器学习__Lecture notes CS229. Linear Regression(3)
- Stanford机器学习__Lecture notes CS229. Linear Regression(1)
- Stanford机器学习__Lecture notes CS229. Linear Regression(2)
- Stanford机器学习__Lecture notes CS229. Logistic Regression(逻辑回归)(1)
- Stanford机器学习__Lecture notes CS229. Logistic Regression(逻辑回归)(2)Perceptron Learning Algorithm
- Stanford机器学习__Lecture notes CS229.Regularization and model selection(规则化和模型选择)
- Stanford 机器学习 Week2 作业: Linear Regression
- 【Andrew NG 机器学习公开课】CS229:Introduction、Linear Regression
- Stanford机器学习---第一讲. Linear Regression with one variable
- Stanford机器学习---第一讲. Linear Regression with one variable
- Stanford机器学习---第一讲. Linear Regression with one variable
- Stanford机器学习---第一讲. Linear Regression with one variable
- Stanford 机器学习练习 Part 1 Linear Regression
- Stanford机器学习课程-week1-Introduction & Linear Regression
- Stanford机器学习---第一讲. Linear Regression with one variable
- Stanford机器学习---第一讲. Linear Regression with one variable
- Stanford机器学习---第一讲. Linear Regression with one variable
- Stanford机器学习---第一讲. Linear Regression with one variable
- 解决mac tmux vim显示异常问题
- java/android 设计模式学习笔记(18)---中介者模式
- android按钮点击——implements View.OnClickListener
- Android:Intent传递数据的几种类型和源码实现
- sizeof 和 strlen用法
- Stanford机器学习__Lecture notes CS229. Linear Regression(3)
- 测试Atlas的分表功能
- 利用手摇法实现原地归并排序
- Sourceinsight最佳配色方案及颜色字体调整方法
- 浅谈TCP/IP协议栈(七)网络层常见协议汇总
- 进程间通信笔记(2)—管道和FIFO
- UML 时序图
- Java基础知识点整理Day_03
- 艺术风格转换之《A Neural Algorithm of Artistic Style》