单变量线性回归问题:
1、假设
2、代价函数:
3、梯度下降算法:用于最小化任何代价函数
j 分别取 0 和 1 时,其导数如下:
---------------------------------------------------------------------------------------------------------------------------------
多变量线性回归问题:
1、假设
简化:
2、代价函数:
3、特征缩放:帮助梯度下降算法更快地收敛,特征需要具有相近的尺度
均值归一化:
其中 μi 是第 i 维所有取值的平均值。si 是第 i 维取值的范围(差值)或标准差
4、正规方程:假设代价函数 J(Θ) 的偏导数等于0,求解方程,得到使代价函数 J(Θ) 最小的参数 Θ。即求曲线的最低点(切线斜率为0)
求解:
python的实现代码:
1 import numpy as np
2 def normalEqn(X, y):
3 theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X 等价于 X.T.dot(X)
4 return theta
总结:
1、特征变量的数目 n 不大的时候,推荐使用正规方程。
2、n 比较大的时候(例如10000),考虑梯度下降。
3、某些算法(例如分类算法中的逻辑回归)不能使用正规方程法,只能使用梯度下降。
---------------------------------------------------------------------------------------------------------------------------------逻辑回归问题:
1、模型的假设:
𝑋 代表特征向量;𝑔 代表逻辑函数,其曲线如下:
2、代价函数:
即有以下规律:
Cost(hθ(x),y) = 0 if hθ(x)=y
Cost(hθ(x),y)→∞ if y=0 and hθ(x)→1
Cost(hθ(x),y)→∞ if y=1 and hθ(x)→0
3、简化代价函数:
向量的实现:
4、梯度下降:
向量化实现:
---------------------------------------------------------------------------------------------------------------------------------正则化线性回归:
1、代价函数:
2、梯度下降算法:
使用正规方程:
---------------------------------------------------------------------------------------------------------------------------------正则化逻辑回归模型:
1、代价函数:
加上正则之后:
python实现代价函数最小的代码:
import numpy as np
def costReg(theta, X, y, learningRate):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X*theta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T)))
reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:the
ta.shape[1]],2))
return np.sum(first - second) / (len(X)) + reg
---------------------------------------------------------------------------------------------------------------------------------