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之变量和参数
Oct 10 Python
Python中if __name__ == "__main__"详细解释
Oct 21 Python
深入浅析python with语句简介
Apr 11 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
什么是Python变量作用域
Jun 03 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
python lambda的使用详解
Feb 26 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 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
php简单的会话类代码
2011/08/08 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
解析link_mysql的php版
2013/06/30 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
Display SQL Server Version Information
2007/06/21 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
js实现日期级联效果
2014/01/23 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
Python多继承原理与用法示例
2018/08/23 Python
Python实现把多维数组展开成DataFrame
2019/11/30 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
如何将整数int转换成字串String
2014/03/21 面试题
大学社团活动策划书
2014/01/26 职场文书
政工师工作总结2015
2015/05/26 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL