计算代价函数 𝐽(𝜃)=1/2𝑚Σ(ℎ𝜃(𝑥(𝑖))−𝑦(𝑖))2
首先我们要知道ℎ𝜃(𝑥(𝑖))等于什么,它的意思是θ^T乘以X,X是一个向量,如果用等式表达的话就是 θ0𝑥0 + θ1𝑥1 + θ2𝑥2+...+θ𝑛𝑥𝑛 ,当然θ也是一个向量,而且是一维的,python里面有一个库叫numpy,专门做矩阵运算的,我们使用就可以了,我们先初始化X,y,还有θ吧
X = np.random.randint(low=10,size=(3,4))
# array([[1, 5, 0, 6],
# [8, 8, 0, 7],
# [3, 1, 6, 8]])
y = np.random.randint(low=10,size=(3,1))
#array([[3],
# [3],
# [9]])
theta = np.random.rand(4,1)
#array([[0.41442622],
# [0.27145503],
# [0.21513389],
# [0.61862962]])
先随机初始化,这些东西应该不需要讲,randint是随机整数,rand是小数,然后low参数代表你的随机数上界,size就是维度,初始化完成后就开始运算。
求和公式里面的运算
( (h(θ) = Xtheta^T) - y )^2*
我想这些应该不难,就是(X * theta.T - y),平方的话用np的power()函数。
inner = np.power((X * theta.T - y),2),第二个参数就是平方数
然后我们就可以计算求和公式外面的了,这个m代表着X矩阵的行数,对应的就是X的
向量个数,
np.sum(inner,axis=None)
最后再除以两倍的x向量个数即可,就是1 / len(X) * 2为什么是两倍呢,因为它求了偏导数,所以就是2了,好了,把它们整理一下写成函数吧
def computeCost(X,y,theta):
inner = np.power((X * theta.T - y),2)
return np.sum(inner,axis=None) / (len(X) * 2)