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基础语法(Python基础知识点)
Feb 28 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
Python自定义线程类简单示例
Mar 23 Python
python占位符输入方式实例
May 27 Python
python的sorted用法详解
Jun 25 Python
python计算二维矩形IOU实例
Jan 18 Python
python连接PostgreSQL过程解析
Feb 09 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
python实现人机五子棋
Mar 25 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
Python re.sub 反向引用的实现
Jul 07 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 简单数组排序实现代码
2009/08/05 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
学python安装的软件总结
2019/10/12 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
python3字符串输出常见面试题总结
2020/12/01 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
Unix如何添加新的用户
2014/08/20 面试题
工程专业毕业生自荐信范文
2013/12/25 职场文书
爱情保证书范文
2014/02/01 职场文书
学习保证书范文
2014/04/30 职场文书
企业安全生产承诺书
2014/05/22 职场文书
化妆品活动策划方案
2014/05/23 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
党委工作总结2015
2015/04/27 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
Java详细解析==和equals的区别
2022/04/07 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android