python实现机器学习之多元线性回归


Posted in Python onSeptember 06, 2018

总体思路与一元线性回归思想一样,现在将数据以矩阵形式进行运算,更加方便。
一元线性回归实现代码
下面是多元线性回归用Python实现的代码:

import numpy as np

def linearRegression(data_X,data_Y,learningRate,loopNum):
 W = np.zeros(shape=[1, data_X.shape[1]])
 # W的shape取决于特征个数,而x的行是样本个数,x的列是特征值个数
 # 所需要的W的形式为 行=特征个数,列=1 这样的矩阵。但也可以用1行,再进行转置:W.T
 # X.shape[0]取X的行数,X.shape[1]取X的列数
 b = 0

 #梯度下降
 for i in range(loopNum):
  W_derivative = np.zeros(shape=[1, data_X.shape[1]])
  b_derivative, cost = 0, 0

  WXPlusb = np.dot(data_X, W.T) + b # W.T:W的转置
  W_derivative += np.dot((WXPlusb - data_Y).T, data_X) # np.dot:矩阵乘法
  b_derivative += np.dot(np.ones(shape=[1, data_X.shape[0]]), WXPlusb - data_Y)
  cost += (WXPlusb - data_Y)*(WXPlusb - data_Y)
  W_derivative = W_derivative / data_X.shape[0] # data_X.shape[0]:data_X矩阵的行数,即样本个数
  b_derivative = b_derivative / data_X.shape[0]


  W = W - learningRate*W_derivative
  b = b - learningRate*b_derivative

  cost = cost/(2*data_X.shape[0])
  if i % 100 == 0:
   print(cost)
 print(W)
 print(b)

if __name__== "__main__":
 X = np.random.normal(0, 10, 100)
 noise = np.random.normal(0, 0.05, 20)
 W = np.array([[3, 5, 8, 2, 1]]) #设5个特征值
 X = X.reshape(20, 5)  #reshape成20行5列
 noise = noise.reshape(20, 1)
 Y = np.dot(X, W.T)+6 + noise
 linearRegression(X, Y, 0.003, 5000)

特别需要注意的是要弄清:矩阵的形状

在梯度下降的时候,计算两个偏导值,这里面的矩阵形状变化需要注意。

梯度下降数学式子:

python实现机器学习之多元线性回归 

以代码中为例,来分析一下梯度下降中的矩阵形状。
代码中设了5个特征。

python实现机器学习之多元线性回归

WXPlusb = np.dot(data_X, W.T) + b

W是一个1*5矩阵,data_X是一个20*5矩阵
WXPlusb矩阵形状=20*5矩阵乘上5*1(W的转置)的矩阵=20*1矩阵

W_derivative += np.dot((WXPlusb - data_Y).T, data_X)

W偏导矩阵形状=1*20矩阵乘上 20*5矩阵=1*5矩阵

b_derivative += np.dot(np.ones(shape=[1, data_X.shape[0]]), WXPlusb - data_Y)

b是一个数,用1*20的全1矩阵乘上20*1矩阵=一个数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python pickle 和 shelve模块的用法
Sep 16 Python
Python中os和shutil模块实用方法集锦
May 13 Python
Python实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
Python中max函数用于二维列表的实例
Apr 03 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
详解python深浅拷贝区别
Jun 24 Python
python同步两个文件夹下的内容
Aug 29 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
Python学习之os模块及用法
Jun 03 Python
python实现简单的三子棋游戏
Apr 28 Python
python实现机器学习之元线性回归
Sep 06 #Python
Python import与from import使用及区别介绍
Sep 06 #Python
用python实现k近邻算法的示例代码
Sep 06 #Python
python K近邻算法的kd树实现
Sep 06 #Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 #Python
Python多线程编程之多线程加锁操作示例
Sep 06 #Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 #Python
You might like
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
进一步理解Python中的函数编程
2015/04/13 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
python实发邮件实例详解
2019/11/11 Python
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
测绘工程专业个人自我评价
2013/12/01 职场文书
成人继续教育实施方案
2014/03/01 职场文书
入党个人总结范文
2015/03/02 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
总结Python变量的相关知识
2021/06/28 Python
教你nginx跳转配置的四种方式
2022/07/07 Servers