目录
前言
线性回归(Linear Rrgresson)是最简单的机器学习算法之一,是绝大部分萌新入坑机器学习的第一个算法,相当于机器学习界的"Hello World"。为了让大家更好地学习线性回归,因此笔者将使用numpy(手写)批量梯度下降法实现线性回归的代码。
一、线性回归是什么?
关于线性回归,网络上有许多相关资料,譬如维基百科,百度百科,MBA智库百科上的“线性回归”条目,吴恩达的机器学习lecture2~4以及其他CSDN bloger写的文章,相信大部分人写的都比笔者要好,所以对于原理部分笔者将不再赘述。
二、引用资料
吴恩达《Machine Learning|Coursera》课件中的Lecture2~Lecture4部分
三、实现步骤
代码如下
1.引入库
首先引入numpy库
import numpy as np
2.搭建LR(线性回归)类,并设定超参数
这里,由于计算精度的问题,优化器要迭代至完全0误差需要很多的步数,或者说周期数,故设定阈值。即若误差小于阈值,将停止迭代 (之前的文章【随学随想】自适应过滤法预测时间序列 有提到过)
class LR:
def __init__(self, variable, label, alpha=0.0001, max_epoch=100):
self.variable = np.array(variable, dtype=float) # 特徵
self.label = np.array(label) # 標簽值
self.num_sample = self.variable.shape[0] # 樣本數
self.num_variable = self.variable.shape[1] # 特徵數,用其確定參數(假設函數權重)的個數
self.alpha = alpha # 學習率
self.threshold = 0.0001 # 均方誤差變化閾值
self.theta = np.random.normal(size=(1, self.num_variable)).T.flatten() # 初始權重
self.max_epoch = max_epoch # 最大迭代數
3.构建假设函数
假设函数表达式如下: h θ = ∑ i = 0 n θ i x i h_\theta=\sum^{n}_{i=0}\theta_{i}x_{i} hθ=i=0∑n