SGD和NormalEquation

线性回归的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)
Created with Raphaël 2.2.0 开始 梯度下降 误差小于1e-5? 结束 yes no

小结

1.梯度下降和标准差方程的优势

梯度下降:
                1优点: 速度快,加上向量化的数据,可以并行处理进一步加	   快求解速度,适用于数据特征大于10000的数据集
                2 缺点:有可能求得的解是局部最优解,而且需要手动设置alpha(梯度下降速度,一般是0.001到0.01之间)。
                
标准差方程:
				1 优点:求解的值是绝对经过每一个数据点的准确的解
				2 缺点:数据特征大于10000的时候,速度很慢,O(n^3),适用于特征数较小的数据

3.深度学习框架笔记:
1在使用cuda 的时候,电脑的算力需要大于3
2在标准差方程里面使用的是广义逆矩阵求解theta,这个广义逆矩阵比逆矩阵求解的范围大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值