1.线性回归
(1)单变量线性回归
线性回归才是真正用于回归的,而不像logistic回归是用于分类,其基本思想是用梯度下降法对最小二乘法形式的误差函数进行优化。
假设函数:
代价函数:
即每一个点的预测值和真实值的差距都要小,故可用求方差的方法,将每一个点的预测值与真实值的差求平方和后再除以数据样本的个数。值越小说明方程越能反映真实情况,把这个方程中的参数看做未知数,则变成了参数的方程,求方程最小值J时,两个变量θ0和θ1参数即可确定。
梯度下降:
用梯度下降法找到让代价函数最小的参数θ值。在单变量线性回归中,只存在两个变量θ0和θ1,因此用梯度下降公式求出两个变量θ0和θ1。
最后选定一个起点,如θ0=0,θ1=0,带入上式迭代即可
(2)多变量线性回归
假设函数:
有多个变量,其中x0=1,
代价函数
和单变量的代价函数格式一样
def cost(X, theta, y):#损失函数/代价函数
m = X.shape[0]
temp = X.dot(theta) - y
return temp.T.dot(temp) / (2 * m)
多变量梯度下降:
找出来求θ的通用表达形式
def gradient_descent(X, theta, y, alpha, iterations):#梯度下降函数
m = X.shape[0]#X.shape=(47,3)
c = [] # 存储计算损失值
for i in range(iterations):
theta -= (alpha / m) * X.T.dot(X.dot(theta) - y)
c.append(cost(X, theta, y))
return theta, c
归一化
归一化是一种无量纲处理手段,使物理系统数值的绝对值变成某种相对值关系,也就是变成一种比例关系。
①线性归一化,也称min-max标准化、离差标准化;是对原始数据的线性变换,使得结果值映射到[0,1]之间。转换函数如下:
②均值归一化。
μ—训练集中x的平均值,
σ-------该特征值x的范围,即最大值减去最小值。
转化函数为:
正规方程法
在线性回归中,正规方程法是比梯度下降更快的方法,但是不适用于样本属性特别多的场合,一般认为超过10000就要考虑使用梯度下降,因为正规方程法要计算逆矩阵,就会导致计算量大。另外在一些其他模型中,正规方程法也可能不适用
def normal_equation(X, y):#正规方程
return np.linalg.pinv(X.T.dot(X)).dot(X.T).dot(y)