Linear Regression 实现 (Python)

来源:互联网 发布:mysql数据库 pdf 编辑:程序博客网 时间:2024/06/04 23:28

matrix 是观测数据

result 是观测结果数据

theta是h = a1*x1+a2*x2中的[a1,a2]

什么都不说了直接上代码

批量梯度下降

import math
#h(x) = a*x1 + b*x2
#矩阵代表自变量
matrix = [[1,4],[2,5],[5,1],[4,2]]
#结果矩阵
result = [19,26,19,20]
#设开始系数为theta
theta = [2,5]
#误差设置
loss = 1000.0000
#控制系数控制迭代次数
learning_rate = 0.01
i = 0
while (i<100 and loss>0.0001):
error_sum = 0.0
for j in range(4):
h = 0.0
for k in range(2):
h += matrix[j][k]*theta[k]
error_sum = result[j]-h
for k in range(2):
theta[k] += learning_rate*(error_sum)*matrix[j][k]
print "*******%d iter*******" %(i)
print "theta now:%f,%f\n" %(theta[0],theta[1])
loss = 0.0
for j in range(4):
total = 0.0
for k in range(2):
total += matrix[j][k]*theta[k]
loss += (total-result[j])*(total-result[j])
print "loss now : %f\n" %(loss)
i += 1



随机梯度下降

import math

matrix = [[1,4],[2,5],[5,1],[4,2]]
result = [19,26,19,20]
theta = [2,5]
loss = 1000.0000
i = 0
while (i<100 and loss> 0.001):
error_sum = 0.0
    #import random
#j = random.randint(0,99) or random.choice(result)
#此处也可使用随机函数来处理 但是%4是必须的因为实际观测值有四个
j = i%4
h = 0.0
for k in range(2):
h += matrix[j][k]*theta[k]
error_sum = result[j]-h
for k in range(2):
theta[k] += 0.01*(error_sum)*matrix[j][k]
print "****%d iter**** \n" %(i)
print "theta[0]:%f , theta[1]:%f \n" %(theta[0],theta[1])
loss = 0.0
for j in range(4):
total = 0.0
for k in range(2):
total += matrix[j][k]*theta[k]
loss += (total-result[j])*(total-result[j])
print "loss:%f \n" %(loss)

i=i+1

具体可以参考Jerrylead的相关博客

0 0
原创粉丝点击