python hstack_Python—线性回归

2a269dfe9bcd52993facb686bf1dfe41.gif

这是奔跑的键盘侠的第184篇文章

作者|我是奔跑的键盘侠 

来源|奔跑的键盘侠(ID:runningkeyboardhero)

转载请联系授权(微信ID:ctwott)

折腾了许久,觉得还是要记录点什么,不管是给有兴趣的小伙伴做参考,还是加深自己的学习理解,都是有一定裨益的。

不过,这个题目也是想了好一会,专业方向深度学习,当下啃机器学习,折磨了一个多月,才刚捋顺线性回归。

索性,就把这个系列放到Python里面吧。

当然,这个板块的内容必须是高能的!!!
反正这一个月时间,就耗这上面了,一个周学a,一个周学b,再花点时间捋顺整个过程……

基础内容直接放链接了:

Python-matplotlib画图(莫烦笔记) Chenkc,公众号:AI机器学习与深度学习算法用matplotlib简单绘图

知乎链接 https://www.zhihu.com/collection/260736383

深入浅出--梯度下降法及其实现,简书链接:https://www.jianshu.com/p/c7e642877b0e

有了前面2篇铺垫之后,就可以直接上代码了

#!/usr/bin/env python3.6# -*- coding: utf-8 -*-# @Time    : 2020-11-07 12:22# @Author  : Ed Frey# @File    : linear_regression.py# @Software: PyCharmimport matplotlib.pyplot as pltimport numpy as npm = 20X0 = np.ones((m, 1))X1 = np.arange(1, m + 1).reshape(m, 1)X = np.hstack((X0, X1))y = np.array([    3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12,    11, 13, 13, 16, 17, 18, 17, 19, 21]).reshape(m, 1)xx = X1.reshape(1, m)[0]yy = y.reshape(1, m)[0]fig = plt.figure(figsize=(12, 10), dpi=80)plt.ion()alpha = 0.01def error_function(theta, X, y):    diff = np.dot(X, theta) - y    return (1. / 2 * m) * np.dot(np.transpose(diff), diff)def gradient_function(theta, X, y):    diff = np.dot(X, theta) - y    return (1. / m) * np.dot(np.transpose(X), diff)def gradient_descent(X, y, alpha):    theta = np.array([1, 1]).reshape(2, 1)    gradient = gradient_function(theta, X, y)    i = 0    items = []    while not np.all(np.absolute(gradient) <= 1e-5):        theta = theta - alpha * gradient        gradient = gradient_function(theta, X, y)        u = np.linspace(-1, 22, 20)        v = theta[0][0] + theta[1][0] * u        i += 1        if i % 1000 == 1:            items.append(theta)    items.append(theta)    j = 0    for theta in items:        plt.cla()        j += 1        plt.title("linear %s" %j)        plt.scatter(xx, yy)        plt.grid(True)        ax = plt.gca()        ax.spines['right'].set_color('none')        ax.spines['top'].set_color('none')        ax.xaxis.set_ticks_position('bottom')        ax.spines['bottom'].set_position(('data', 0))        ax.yaxis.set_ticks_position('left')        ax.spines['left'].set_position(('data', 0))        plt.xlim(-2, 30, 20)        plt.ylim(-2, 30, 20)        u0 = 20        v0 = theta[0][0] + theta[1][0] * u0        plt.plot(u, v, linewidth=3.0, color='r')        plt.annotate(r'$%f*u + %f = v$' % (theta[1][0], theta[0][0]), xy=(u0, v0), xycoords='data',                     xytext=(-200, 20), textcoords='offset points', fontsize=16,                     arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))        plt.savefig(fname="scatter%s.png" %j)        plt.pause(1)    return thetaplt.ioff()plt.show()optimal = gradient_descent(X, y, alpha)print('optimal:', optimal)print('error function:', error_function(optimal, X, y)[0, 0])

代码就不过多解释了,基本都是简书上面拷贝过来的,简书上面解释已经足够详细了。对新手比较陌生的,是矩阵与坐标的表示形式,比如a和b两个N*1维矩阵,转成坐标以后,横坐标全在a里面,纵坐标全在b里。至于梯度下降法,是数学分析里面的基础部分。另外涉及到一丁点矩阵运算知识,当时还小卡了一下。

后面画图部分的代码,是我自己补充设计的,基本功能是:在不断迭代寻找目标最优解的过程中,将当前解的效果可视化,也就是可以通过图形查看当前参数对应的直线效果。

截取了其中输出的几幅效果图:

d5cc99764425c6e79e6d2bfa62947c30.png

d80bd33c9c7f64224460e084251cbd43.png

f78248afdbbd47410fcc16a1991a316f.png

13883f3ae4c26ab2636b1a1f22dd5c6b.png

dec739da1973a3b1f981bbb273245835.png

17a866613f10a2818d4f3e629c27f7c5.png

什么?看着没感觉?那再来一张动图吧ceede72cb39e7cc7c8f0422736359406.png

b471bbfbebc27ddbaed4223381421255.gif

-END-

9052ffeee4b839d6192de343723ef34c.gif

© Copyright 

奔跑的键盘侠原创作品 | 尽情分享朋友圈 | 转载请联系授权

5a706518de8c3f73310530a372cf7a29.png

经典回顾

整天碎碎念的按键精灵到底是个啥?

《按键精灵课程学习目录》

按键精灵

模拟发送qq消息给好友

找图功能改进版(循环找图)

冒泡提示脚本运行状态

直接打开网页、文件、程序的命令

大漠插件的图文识别应用

Python

微信好友云图怎么玩

四则运算(正则表达式的应用)

写一个完整的应用程序

量化分析怎么玩

《Python学习笔记目录》

5a706518de8c3f73310530a372cf7a29.png

选题/码字/coding/调试/编辑/排版/修订再修订/推送 

看起来简单,却远没有你想的那么轻松和容易 

「点赞+转发+留言」是最好的肯定与鼓励 

如果你来了,请让我知道至少 

你「在看

 68cb0547f1fcb3dbcc36fdd2db0b713a.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值