在了解了一下梯度下降的原理之后,如下有一个程序实现了两元的线性回归。按理说,那么要写多元线性回归,就是几维都可以处理的,应该只需要改一部分代码,多一个循环取值就可以了。但却出现了损失值越来越大的情况。折腾了很久,后来发现,加一步数据预处理-数据规范化,问题就解决了。(0 。0)
先上一开始的代码,可以求出有两个自变量x0,x1时的线性方程的两个未知参数theta0,theta1。
print "-------增量梯度下降(两个未知数)---------"
# 自变量x(x0, x1)
# 假设函数为:h(x) = theta0 * x[0] + theta1 * x[1]
# y为理想theta值下的真实函数值
x = [(1, 1.15), (1, 1.9), (1, 3.06), (1, 4.66), (1, 6.84), (1, 7.95)]
y = [1.37, 2.4, 3.02, 3.06, 4.22, 5.42]
# 两个终止条件:最大迭代次数,收敛精度
loop_max = 10000
epsilon = 0.0001
alpha = 0.005 # 步长
diff = 0 # 每一次测试时当前值与理想值的差距
error0 = 0 # 上一次目标函数之和
error1 = 0 # 当前次目标函数和
m = len(x) # 训练数据条数
count = 0 #
finish =