线性回归的SGD和Normal Equation求系数方法总结
你好! 这是我第一次写博客,目前开始学习机器学习,这里主要是吴恩达 的机器学习课程:https://www.bilibili.com/video/av9912938?p=32,学习了线性回归的梯度下降和Normal Equation用于求解线性回归中的系数,这种方法是有区别的,接下来,我们一起回顾一下:
线性回归
线性回归是指对A数据产生B结果的线性曲线进行拟合,以便用于对不同的A进行预测B结果。(例如房价预测问题,y = kx + b),线性回归要做的就是根据数据准确的找出k 和 b。
Normal Equation
import numpy as np
def normal_equation(x,y):
X = np.array(x)
Y = np.array(y)
theta = np.dot(np.dot(np.linalg.inv(np.dot(np.transpose(X),X)), np.transpose(X)),Y)
print(theta)
梯度下降
import numpy
def error_function(theta, x, y):
X = np.array(x)
Y = np.array(y)
diff = np.dot(X, theta) - Y
return (1./2*m)*np.dot(np.transpose(diff), diff)
def grand_function(theta, x, y):
X = np.array(x)
Y = np.array(y)
diff = np.dot(X, theta) - Y
return (1./2)*np.dot(np.transpose(X), diff)
def gradient_descent(x, y, theta):
gradient = grand_function(theta, x, y)
while not np.all(np.absolute(gradient) <= 1e-5):
theta = theta - alpha * gradient
gradient = gradient_function(theta, X, y)
return theta
def __name__ == '__main__':
x = [[1, 0],
[1, 1]]
y = [[0],
[2]]
alpha = 0.001
theta = np.array([[1], [1]])
m = 2
optimal = gradient_descent(x, y, theta)
error = error_function(optimal, x, y)
print(error)
小结
1.梯度下降和标准差方程的优势
梯度下降:
1优点: 速度快,加上向量化的数据,可以并行处理进一步加 快求解速度,适用于数据特征大于10000的数据集
2 缺点:有可能求得的解是局部最优解,而且需要手动设置alpha(梯度下降速度,一般是0.001到0.01之间)。
标准差方程:
1 优点:求解的值是绝对经过每一个数据点的准确的解
2 缺点:数据特征大于10000的时候,速度很慢,O(n^3),适用于特征数较小的数据
3.深度学习框架笔记:
1在使用cuda 的时候,电脑的算力需要大于3
2在标准差方程里面使用的是广义逆矩阵求解theta,这个广义逆矩阵比逆矩阵求解的范围大。