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使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
Python线程同步的实现代码
Oct 03 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
python linecache 处理固定格式文本数据的方法
Jan 08 Python
Django 全局的static和templates的使用详解
Jul 19 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
jupyter notebook中美观显示矩阵实例
Apr 17 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
什么是Python中的匿名函数
Jun 02 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
通过实例了解Python异常处理机制底层实现
Jul 23 Python
python pygame入门教程
Jun 01 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
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
php foreach 参数强制类型转换的问题
2010/12/10 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
javascript类型转换示例
2014/04/29 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
jQuery基础知识小结
2014/12/22 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
JavaScript阻止表单提交方法(附代码)
2017/08/15 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
pandas值替换方法
2018/07/10 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
原告离婚代理词
2015/05/23 职场文书
企业培训简报范文
2015/07/20 职场文书
2015年教师国培感言
2015/08/01 职场文书