在完成视频中的函数整理之后,决定用python对视频中的例子进行转写,先从简单的开始。
首先就是寻找python中的函数是否可以替代上一篇文章中所整理的函数fminunc(),最终参考了作者为csdn_inside 这篇文章,感谢大神!
文章链接:https://www.twblogs.net/a/5bf35646bd9eee37a142e45a/zh-cn
视频中Octave代码如下:
python转写如下:
import numpy as np
import scipy.optimize as op
def costFunction(theta, X, Y):
jVal = np.square((theta[0] - Y)) + np.square((theta[1] - Y));
gradient = np.zeros([2,1]);
gradient[0] = X * (theta[0] - Y);
gradient[1] = X * (theta[1] - Y);
return jVal
if __name__ == "__main__":
X = 2
Y = 5
initial_theta = np.zeros([1,2]);
result = op.minimize(fun=costFunction, x0=initial_theta, args=(X, Y), method='SLSQP',options= {'maxiter': 100})
print(result)
scipy.optimize.
minimize
(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)
官方网址:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
总结一下我写代码是所出现的问题:
- 没有仔细看help文档:其中fun要求输入的是一维数组,并且要求返回的是一个float类型的值,由于我的不仔细(我一直按照视频中返回的是jVal和gradient),程序一直出错: TypeError: unsupported operand type(s) for -: 'tuple' and 'tuple'。最后去掉gradient,程序就可以正常运行了。
- 在得到运行结果之后,theta的值可以得到和视频中的一样,但是对于fun的值,即cost的值,无论我试了各种函数结果都跟视频中的不同,这个问题一直没有解决掉。如果各位大神发现问题,请给予指正,谢谢。上述代码结果如下(视频中cost=1.5777e-030,theta:5,5):
今天在写练习的时候发现我的梯度函数并没有使用,所以加入梯度函数,但是cost值依然不同
"""
Created on Tue Nov 5 14:15:42 2019
@author: lonely_hanhan
"""
import numpy as np
#import pandas as pd
import scipy.optimize as op
def costFunction(theta, X, Y):
jVal = np.square((theta[0] - Y)) + np.square((theta[1] - Y));
return jVal
def gradient(theta, X, Y):
grad = np.zeros([2,1]);
grad[0] = X * (theta[0] - Y);
grad[1] = X * (theta[1] - Y);
return grad.flatten()
if __name__ == "__main__":
X = 2
Y = 5
initial_theta = np.zeros([1,2]);
result = op.minimize(fun=costFunction, x0=initial_theta, args=(X, Y), method='TNC', jac=gradient, options= {'maxiter': 100})
print(result)
为了记录自己的学习进度同时也加深自己对知识的认知,刚刚开始写博客,如有错误或者不妥之处,请大家给予指正。