梯度下降法实现-python[转载]
Python 实现 转载 梯度 下降
2023-09-14 09:11:24 时间
转自: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实现Fibonacci和二分法
- Python基于正则表达式实现文件内容替换的方法
- Python实现按照指定要求逆序输出一个数字的方法
- python数据结构之图的实现方法
- 组素数python实现
- Python编程:利用python编程实现对基于时间序列的数据(dataframe格式)按照指定时间范围进行单方向关联,不存在的日期补充为默认的NaN
- Python的IDE:基于Eclipse/MyEclipse软件的PyDev插件配置python的开发环境(不同python项目加载不同版本的python)—从而实现Python编程图文教程之详细攻略
- Python编程语言学习:python的列表的特殊应用之一行命令实现if判断中的两类判断
- Python:利用python语言实现18位身份证号码和15位身份证号码相互转换
- Python:利用python语言绘制多个子图经典案例、代码实现之详细攻略
- Python的IDE:基于Eclipse/MyEclipse软件的PyDev插件配置python的开发环境(不同python项目加载不同版本的python)—从而实现Python编程图文教程之详细攻略
- Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法
- Python之API:基于python语言调用华为云API(华为网站)实现特定功能
- Python 实现个人博客系统(附零基础python学习资料)
- Python教你爬取某团烤肉店铺数据信息并实现数据可视化,吃货还是更多的(内含完整代码)
- Python实现人工神经网络回归模型(MLPRegressor算法)并基于网格搜索(GridSearchCV)进行优化项目实战
- 【华为机试 Python实现】图的存储结构
- 【华为机试真题 Python实现】将整数倒序输出,剔除重复数据
- 【华为机试真题 Python实现】翻转单词
- Python: yield, python 实现tail -f
- python 实现nc功能 免杀案例——的确可以绕过奇安信,defender这些edr
- 利用python实现Ridge岭回归和Lasso回归
- 〖Python自动化办公篇⑳〗 - python实现邮件自动化 - 发送html邮件和带附件的邮件