实验1:线性回归及岭回归
介绍
在本实验中,你将实现线性回归及岭回归并了解其在数据上的工作原理。
本次实验需要用到的数据集包括:
- ex1data1.txt -单变量的线性回归数据集
- ex1data2.txt -多变量的线性回归数据集
评分标准如下:
- 要点1:计算损失-------------------------------(20分)
- 要点2:单变量线性回归梯度下降----------(20分)
- 要点3:数据标准化----------------------------(20分)
- 要点4:多变量线性回归梯度下降----------(20分)
- 要点5:线性回归闭式解----------------------(10分)
- 要点6:岭回归闭式解-------------------------(10分)
1 单变量线性回归
在该部分实验中,将实现单变量线性回归并用来预测餐车的利润。
假设你是一家餐厅的领导,正在考虑在不同的城市开设新的分店。该连锁店已经在不同的城市有了餐车,并且你能够获得每个城市的人口和利润数据。
现在需要使用这些数据来帮助你选择下一个被扩展的城市。
文件ex1data1.txt
包含线性回归问题的数据集。第一列数据对应城市人口,第二列数据对应那座城市的餐车的利润。利润为负时表示亏损。
1.1 绘制数据
在开始进入实验之前,对数据进行可视化通常很有用。对于该数据集,可以使用散点图进行可视化,因为它只有两个属性(人口、利润)。
# 引入所需要的库文件
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
%matplotlib inline
# 数据存储路径
path = 'ex1data1.txt'
# 读入相应的数据文件
data = pd.read_csv(path, header=None,names=['Population','Profit'])
#查看数据的前五条
data.head(5)
Population | Profit | |
---|---|---|
0 | 6.1101 | 17.5920 |
1 | 5.5277 | 9.1302 |
2 | 8.5186 | 13.6620 |
3 | 7.0032 | 11.8540 |
4 | 5.8598 | 6.8233 |
# 数据可视化
data.plot(kind='scatter', x='Population', y='Profit',c='red', figsize=(9,6))
1.2 梯度下降
在该部分中,将使用梯度下降来选择合适的线性回归参数 w \mathbf{w} w用以拟合给定数据集。
说明:为编写方便,偏置项 b b b可被作为权重向量 w \mathbf{w} w的第一个分量 w 0 w_0 w0。
1.2.1 目标函数
线性回归的目的是最小化目标函数:
E ( w ) = 1 2 m ∑ i = 1 m ( w T x i − y i ) 2 E(\mathbf{w}) = \frac{1}{2m} \sum_{i=1}^m \left( \mathbf{w}^T\mathbf{x}_i - y_i\right)^2 E(w)=2m1i=1∑m(wTxi−yi)2
其中 w \mathbf{w} w为权重参数。上述目标函数也可写成如下矩阵形式:
E ( w ) = 1 2 m ∥ X w − y ∥ 2 2 E(\mathbf{w}) = \frac{1}{2m} \|\mathbf{X}\mathbf{w}-\mathbf{y}\|_2^2