自用-线性回归

绘图: 

​​​​​​​matplotlib.pyplot的使用总结大全(入门加进阶) (zhihu.com)

数学公式(from 老师):

code:

import pandas as pd
import matplotlib.pyplot as plt
import copy




def f(curcan,x):
    """
    求 y=kx+b
    其中参数k,b用curcan数组表示,x为自变量,y为因变量
    """
    return curCan[0]*x+curCan[1]

#读csv文件
data=pd.read_csv('../data/test.csv')


x=data["x"]
y=data["y"]
#数据对总数
dataCount=x.size
#初始参数
can=[0.0,0.0]

#步长
step=0.0005

#第一层循环,进行数据量/10次梯度下降
for i in range(1,dataCount,10):
    #防止过程中原函数中参数被修改
    curCan=copy.deepcopy(can)
    #对各个参数进行梯度下降法修改
    for j in range(2):
        pash=0
        #如果是k的话
        if j==0:
            for k in range(i,i+9):
                pash+=(f(can,x[k])-y[k])*x[k]
        #如果是b的话
        else :
            for k in range(i,i+9):
                pash+=(f(can,x[k])-y[k])
        curCan[j]-=step/10.0*pash
    #集中处理各参数值
    can=copy.deepcopy(curCan)
#输出k、b
print(can[0],can[1])


#散点图、直线图
xp=[0,100]
yp=[ f(can,xi) for xi in xp]
plt.scatter(x,y)
# plt.show()
plt.plot(xp,yp,color="pink",linewidth=8)

plt.show()


​​​​​​​结果:

还算ok?

tips:步长不能太长,不然直接越梯度下降越bt。参数-= 的时候记得保留原始参数,防止出现奇怪情况(锁住!)。计算机之最还是数学!

刚入门,没用矩阵等高级的东东,争取以后学会!

————————————————————————————————————————

后记:步长太长导致结果太差的原因找到:当第n次开始,步长长到一下迈到比自己还高的对岸去,梯度将继续变大,导致下一步路程n+1->n+2远于n->n+1,以至于永远无法回到第n步的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值