以下是数据样本的设定:
import matplotlib.pylab as plt
import numpy as np
import pandas as pd
from numpy import *
# 数据集大小 即20个数据点
path =open('D:/ex1-2.txt')
data2 = pd.read_csv(path, header=None, names=['Size', 'Bedrooms', 'Price'])
# x的坐标以及对应的矩阵
X1=data2['Size']
X2=data2['Bedrooms']
# 对应的y坐标
y=data2['Price']
data2.insert(0,'ones',1)
X0=data2['ones']
# 学习率
X0=np.matrix(X0).reshape(47,1)
X1=np.matrix(X1).reshape(47,1)
X2=np.matrix(X2).reshape(47,1)
X=np.hstack((X0,X1,X2))
Y=np.matrix(y).reshape(47,1)
alpha=0.01
#定义代价函数
def cost_function(theta, X, Y):
diff = dot(X, theta) - Y # dot() 数组需要像矩阵那样相乘,就需要用到dot()
return (1/(2*47)) * dot(diff.transpose(), diff)
# 定义代价函数对应的梯度函数
def gradient_function(theta, X, Y):
diff = dot(X, theta) - Y
return (1/47) * dot(X.transpose(), diff)
# 梯度下降迭代
def gradient_descent(X, Y, alpha):
theta = np.array([1,1,1]).reshape(3, 1)
gradient = gradient_function(theta, X, Y)
while not all(abs(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('cost function:', cost_function(optimal, X, Y)[0][0][0])
# 根据数据画出对应的图像
下面是出问题的地方:
def gradient_descent(X, Y, alpha):
theta = np.array([1,1,1]).reshape(3, 1)
gradient = gradient_function(theta, X, Y)
while not all(abs(gradient) <= 1e-5):
theta = theta - alpha * gradient
gradient = gradient_function(theta, X, Y)
return theta
显示
输出显示错误
具体原因不清楚,我也出现了这个问题,但是对数据归一化之后就好了
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
theta 和 alpha * gradient 是不是同一种数据结构或者类型,或者说两者的shape是否一致。我建议还是写个循环,逐个元素进行减法操作会更加清晰。