美文网首页
python线性回归基本实现

python线性回归基本实现

作者: hirolin | 来源:发表于2018-06-14 23:48 被阅读0次

    通过这个笔记记录以下学习的过程。
    在使用python实现机器学习,可以使用anaconda (清华镜像下载)去实现。
    线性回归是常见的拟合算法,本文通过梯度下降实现数据拟合。

    1.到入库
    import numpy as np #导入数据处理模块numpy
    import matplotlib.pyplot as plt #绘图模块
    
    2. 产生随机数据
    x = np.arange(-2, 2, 0.1) # -2到2按照0.1为步距
    length = len(x)
    y = 2*x+4+(np.random.random(length)-0.5)*3 #y=2*x+4 加上随机数
    x = x.reshape(length, 1)
    y = y.reshape(length, 1)
    plt.figure()
    plt.scatter(x, y)
    plt.show()
    

    效果图:


    image.png
    3.梯度下降

    (这一块内容推荐看吴恩达视频分析。)
    在求取线性回归的过程中,最主要步骤是使得预测值和样本值之间的差异最小,如下公式表示样本和预测值之间的差值平方。1/2参数是为了求导时与平方2约去。


    image.png

    对m b进行求导


    image.png

    记err = h(x[i]) - y[i],则得到:
    m,b的导数分别时 err*x 和 err
    得到导数之后,就需要使得m,b朝着使得ERROR值小的方向变化。下面结合代码分析:

    m = 1 #m, b初始化 一般用随机值
    b = 0
    learning_rate = 0.005 #学习率
    def gredient(x, y, m, b) :
        
        for i in range(0, length) :
            err = (m*x[i] + b) - y[i]
            m -= err * x[i] * learning_rate
            b -= err * learning_rate
        return [m, b]
    
    #训练次数
    times = 100
    for i in range(times) :
        m, b = gredient(x, y, m, b)
        print(m, b)
    
    #绘制最终结果
    x_b = [-2,2]
    y_b = [-2*m + b,2*m +b]
    plt.figure()
    plt.plot(x_b, y_b)
    plt.scatter(x, y)
    plt.show()
    

    对样本进行遍历时,更新m,b的值,这个变化的值由导数(理解为斜率)和learning_rate(理解为斜率方向移动步长)组成。
    实验结果:


    image.png
    image.png

    相关文章

      网友评论

          本文标题:python线性回归基本实现

          本文链接:https://www.haomeiwen.com/subject/ombueftx.html