回归问题

在回归问题中,我们具体要预测的是一个具体的数值,而不是分类。

对于回归问题,比如,我们可以根据房屋的大小预测房屋的价格,在这里只有一个样本特征,就是房屋的大小,为了实现这个,我们需要在两维空间中表示。如横轴代表房屋大小,纵轴就是房屋的价格,也就是我们要预测的数值。但是在分类问题里,假如样本有两维特征,如鸢尾花花瓣的大小与叶子的宽度,我们只需要二维空间中就能将它们分类,只需把用不同颜色的点来标记不同的类别的样本。而回归问题中,如果我们有二维特征,那么就需要在三维的空间里进行回归。

Simple Linear Regression就是指只有一个特征,能在二维平面上显示的回归问题。

线性回归算法的基本思路

定义一个损失函数,时这个损失函数的值尽可能小。
损失函数代表损失的那一部分,而效用函数代表真正有用的那一部分。

下面是一类机器学习算法的基本思路,近乎所有参数学习算法都是这种套路(e.g. 线性回归、多项式回归、逻辑回归、SVM、神经网络etc.)

[机器学习] 线性回归算法 (Linear Regression)
最小化上面的损失函数就是典型的最小二乘法问题:最小化误差的平方

最小二乘法

要使损失函数最小,最直观的一个方法就是对函数的各个未知分量分别求导并使导数等于0。
[机器学习] 线性回归算法 (Linear Regression)
过程略。

实现Simple Linear Regression

导入库和原始数据

[机器学习] 线性回归算法 (Linear Regression)

根据最小二乘法得到的a和b的计算方法,来计算a和b

[机器学习] 线性回归算法 (Linear Regression)

写出回归方程并预测新的数据样本相应的值

[机器学习] 线性回归算法 (Linear Regression)

如果将Simple Linear Regression进行向量化,计算会更快一些,特别是方便a的计算方式,因为for循环运算效率比较低。

向量化

由于向量点乘就是向量各项分别相乘再相加。在numpy中使用向量运算比使用for循环要快很多倍。
只需把上面for循环的部分改成:
[机器学习] 线性回归算法 (Linear Regression)
需要注意的是,使用.dot方法必须保证进行运算的是向量,而之前上面定义的x_i不是向量,具体使用的时候要注意一下。

衡量线性回归法的指标:MSE,RMSE和MAE

均方误差MSE

使得衡量标准与测试样本无关。[机器学习] 线性回归算法 (Linear Regression)
还有一个问题是量纲,有时候量纲可能会带来麻烦。采用均方根误差(RMSE)能解决这个问题。
[机器学习] 线性回归算法 (Linear Regression)[机器学习] 线性回归算法 (Linear Regression)
还有一种评测标准是平均绝对误差MAE。

之前在最小二乘法中我们没有使用绝对值是因为绝对值不能保证函数处处可导。因此我们在评价一个算法时的标准和我们在最初优化目标函数可以是不一致的。

实例:波士顿房产数据

导入数据集,打印数据文档

[机器学习] 线性回归算法 (Linear Regression)

选取属性RM,并绘制关于这个属性的原始数据

[机器学习] 线性回归算法 (Linear Regression)

处理可能干扰结果的数据

[机器学习] 线性回归算法 (Linear Regression)

使用简单线性回归法

切分成训练集和测试集
[机器学习] 线性回归算法 (Linear Regression)
用Linear Regression去fit数据,得到参数a,b的值,形成一个线性回归模型, 打印回归直线,预测测试集x_test中每个样本相对应的y
[机器学习] 线性回归算法 (Linear Regression)

用MSE, RMSE, MAE计算误差来评测模型好坏

MSE, RMSE, MAE内部代码实现
[机器学习] 线性回归算法 (Linear Regression)
scikit-learn中的MSE和MAE
[机器学习] 线性回归算法 (Linear Regression)
可见scikit-learn和我们实现的代码结果是一样的。

相关文章: