骚气的Python之线性回归

 

公式1

公式2

# -*- coding: utf-8 -*-
import numpy as np
import pylab

def comput(x,y,time,rate):

    b = 0.0
    m = 0.0
    n = float(len(x))

    for i in xrange(time):
        b_gradient = -2/n * ( y-( m*x+b ))   #公式1
        b_gradient = np.sum(b_gradient)
        m_gradient = -2/n * x * ( y-( m*x+b ))   #公式2
        m_gradient = np.sum(m_gradient)
        b = b - (b_gradient * rate)
        m = m - (m_gradient * rate)

    y_predict = m*x+b
    pylab.plot(x,y,'o')
    pylab.plot(x,y_predict,'k-')
    pylab.show()
    
# 随机数据一组坐标
def randomData(amount=100):
    x = np.array([i for i in range(amount)])
    m = 1
    b = (np.random.rand(amount) - 0.5) * 10
    y = m * x + b
    return np.array([x,y])


def main():
    # 一组坐标,需要注意如果数据过多后面计算数值会溢出,所以这里设置20,超出50可能就会出错
    data = randomData(20)
    x = data[0]
    y = data[1]
    # 梯度下降次数
    time = 100000
    # 控制步长
    rate = 0.001

    comput(x,y,time,rate)



if __name__ == '__main__':
    main()
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值