梯度下降法实现-python[转载]
转自:https://www.jianshu.com/p/c7e642877b0e
梯度下降法,思想及代码解读。
import numpy as np # Size of the points dataset.
m = 20 # Points x-coordinate and dummy value (x0, x1).
X0 = np.ones((m, 1))#返回一个m行1列的矩阵
X1 = np.arange(1, m+1).reshape(m, 1)#相当于是转置了
X = np.hstack((X0, X1))#要求行数必须相同 # Points y-coordinate
y = np.array([
3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12,
11, 13, 13, 16, 17, 18, 17, 19, 21
]).reshape(m, 1) # The Learning Rate alpha.
alpha = 0.01 def error_function(theta, X, y):
'''Error function J definition.'''#定义损失函数
diff = np.dot(X, theta) - y #m行1列的列向量
return (1./2*m) * np.dot(np.transpose(diff), diff) def gradient_function(theta, X, y):
'''Gradient of the function J definition.'''#定义梯度函数
diff = np.dot(X, theta) - y
return (1./m) * np.dot(np.transpose(X), diff) def gradient_descent(X, y, alpha):
'''Perform gradient descent.'''
theta = np.array([1, 1]).reshape(2, 1)
gradient = gradient_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 optimal = gradient_descent(X, y, alpha)
print('optimal:', optimal)
print('error function:', error_function(optimal, X, y)[0,0])
梯度的方向即函数上升最快的方向。而加上负号表示朝着相反的方向前进。
初学python语法解读:
1.numpy.ones(shape,dataType,order='C')
其中shape=一个int数或者一个int数序列。dataType一般不选吧,可选的是np.int或者np.float。order:是否将多维数据存储在存储器中的C或FORTRAN连续(行或列)顺序中。(order一般编程不用考虑吧)
栗子1:x=np.ones((3,2))
print(x) 输出:
[[1. 1.]
[1. 1.]
[1. 1.]]#输出全为1的float型的吧。
栗子2:x=np.ones(3)
print(x)
输出:
[1. 1. 1.] #也就是说只有一个int的时候输入就是行向量,输入的int表示有几列。
2.numpy.arange([start,]stop,[step,]dataType=None)
start就是开始,stop是结束。用[]括起来的意思是可选的,不是非必需的参数。step默认是1.关于dataType如果没有指定则和输入的数据类型一致。
#注意这个函数不是arrange,是a range合起来。范围是左闭右开。最后输出的是一个数组,行向量,返回ndarray。
x=np.arange(3)
print(x) #output[0 1 2]
x=np.arange(1,3,0.5)
print(x) #output:[1. 1.5 2. 2.5]
3.np.ndarray.reshape(shape,order='C')
对ndarray返回一个shape型的矩阵。
m=3
X1 = np.arange(1, m+1).reshape(m, 1)#变成一个3行一列的列向量
print(X1) 输出:
[[1]
[2]
[3]]
4.np.hstack(tup)
就是将两个相同形状的矩阵在列上水平方向上合并起来。
a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])
c=np.hstack((a,b))
print(c)
#a,b是两行两列的矩阵,在水平方向上合并,在行上合并,即水平方向上。
输出:
[[1 2 5 6]
[3 4 7 8]]
5.np.dot(a,b,out=None)
对于二维的来说就是矩阵a,b的乘积,对于一维来说就是向量的内积。
a = [[1, 0], [0, 1]]
b=[[4, 1], [2, 2]]
print(np.dot(a,b)) 输出:
[[4 1]
[2 2]]
6.np.transpose(a,axis=None)
顾名思义就是转置矩阵。
a = np.arange(4).reshape((2,2))
print(np.transpose(a)) 输出:
[[0 2]
[1 3]]
梯度下降法实现-python[转载]的更多相关文章
- 梯度下降法的python代码实现(多元线性回归)
梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...
- (转)梯度下降法及其Python实现
梯度下降法(gradient descent),又名最速下降法(steepest descent)是求解无约束最优化问题最常用的方法,它是一种迭代方法,每一步主要的操作是求解目标函数的梯度向量,将当前 ...
- 固定学习率梯度下降法的Python实现方案
应用场景 优化算法经常被使用在各种组合优化问题中.我们可以假定待优化的函数对象\(f(x)\)是一个黑盒,我们可以给这个黑盒输入一些参数\(x_0, x_1, ...\),然后这个黑盒会给我们返回其计 ...
- paper 166:梯度下降法及其Python实现
参考来源:https://blog.csdn.net/yhao2014/article/details/51554910 梯度下降法(gradient descent),又名最速下降法(steepes ...
- 简单线性回归(梯度下降法) python实现
grad_desc .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...
- Gradient Descent 梯度下降法-R实现
梯度下降法: [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 应用:求线性回归方程的系数 目标:最小化损失 ...
- 梯度下降法VS随机梯度下降法 (Python的实现)
# -*- coding: cp936 -*- import numpy as np from scipy import stats import matplotlib.pyplot as plt # ...
- 梯度下降法原理与python实现
梯度下降法(Gradient descent)是一个一阶最优化算法,通常也称为最速下降法. 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离 ...
- 最小二乘法 及 梯度下降法 运行结果对比(Python版)
上周在实验室里师姐说了这么一个问题,对于线性回归问题,最小二乘法和梯度下降方法所求得的权重值是一致的,对此我颇有不同观点.如果说这两个解决问题的方法的等价性的确可以根据数学公式来证明,但是很明显的这个 ...
随机推荐
- 为什么WAN口IP和外网IP不一样(不一致)?
正常的网络应该是动态公网ip,也就是路由器里面的WAN口IP与www.ip138.com上面显示的是一致的,不一致的话则说明该网络被电信或者联通做了NAT转发,导致您获取到了一个虚假的IP地址,无法用 ...
- C++中的异常安全性【转】
原文写的非常好,来自这里 一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源:2.不允许破坏数据. 我们先通过两个反面的例子开始. 第一个是造成资源泄漏的例子.一个类Type ...
- Word 2010 小技巧篇
1.选择文本的妙招
- Linux下重启mysql的时候出现 start: Job failed to start
mysql进程自己退出了,使用如下指令确认mysql进程不在了. ps -ef | grep mysql 看不到mysql进程 mysql进程不在,尽快回复服务的想法,就是重启服务 /etc/init ...
- 部署OpenStack问题汇总(六)-- OpenStack入门需要知道的概念
本博客已经添加"打赏"功能,"打赏"位置位于右边栏红色框中,感谢您赞助的咖啡. 一.网络问题-network 更多网络原理机制可以参考<OpenStack ...
- Laya 位图字体制作(失败...)
参考: 官网教程-位图字体的制作与使用 一.下载字体并安装字体 从站长字体下载了液晶数字字体,将TTF文件拖入C盘windows/Font文件夹,则字体会自动安装 二.下载字体制作工具 Bitmap ...
- jmeter中Implementation中几个选项的区别
在jmeter发送http请求时,Implementation下拉框中有几个选项,如下: 那到底有什么区别呢?发送http请求改用哪种方法呢.百度后查之,没答案.我们还是看官方文档吧.官方文档解释如下 ...
- FZU 2252 Yu-Gi-Oh!(枚举+贪心)
Problem 2252 Yu-Gi-Oh! Accept: 105 Submit: 628 Time Limit: 1000 mSec Memory Limit : 32768 KB ...
- 为什么用VUE,而不用Jquery了?
在没有任何前端框架之前,我们写代码,只能用原生的JS,进行数据的处理,DOM的操作,譬如对一个id 为txtName 的文本框进行赋值,我们是这样的 document.getElementById(' ...
- SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)
SQL Fundamentals || Oracle SQL语言 一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查 ...