python线性回归基本实现

通过这个笔记记录以下学习的过程。
在使用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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 注:题中所指的『机器学习』不包括『深度学习』。本篇文章以理论推导为主,不涉及代码实现。 前些日子定下了未来三年左右...
    我偏笑_NSNirvana阅读 40,296评论 12 145
  • AI人工智能时代,机器学习,深度学习作为其核心,本文主要介绍机器学习的基础算法,以详细线介绍 线性回归算法 及其 ...
    erixhao阅读 14,743评论 0 36
  • 电影《国王的演讲》述说了现任英国女王的父亲克服困难成功地在公众面前演讲的故事。 这部获得十二个奥斯卡提名,勇夺四项...
    温其言阅读 4,357评论 0 4
  • 生活中的我可以过的很粗糙,同时也可以很细腻,主要看自己,看心情,看环境,看天气,好吧,一句话就是任性!早上抓住最后...
    熤妞阅读 1,800评论 0 0
  • 总是觉得日子还长不需要急着去做想做的事情,理想,愿望构成了我们太多的精神生活。曾经认为没有什么事情是我们不可能完成...
    王i阅读 1,261评论 0 0