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调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
利用Python爬取可用的代理IP
Aug 18 Python
python字符串的方法与操作大全
Jan 30 Python
Python编程argparse入门浅析
Feb 07 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
启动Atom并运行python文件的步骤
Nov 09 Python
Python语言快速上手学习方法
Dec 14 Python
在django-xadmin中APScheduler的启动初始化实例
Nov 15 Python
浅谈Python协程
Jun 17 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 Python
python urllib库的使用详解
Apr 13 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中source #N问题的解决方法
2014/01/27 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
php源码的使用方法讲解
2019/09/26 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
JavaScript闭包详解
2015/02/02 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
elementui实现预览图片组件二次封装
2020/12/29 Javascript
Python使用sorted排序的方法小结
2017/07/28 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
影视艺术学院毕业生自荐信
2013/11/13 职场文书
电气工程师岗位职责
2014/01/01 职场文书
财务出纳岗位职责
2014/02/03 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
经济贸易系求职信
2014/08/04 职场文书
五四演讲稿范文
2014/09/03 职场文书
铣工实训报告
2014/11/05 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
Python编写nmap扫描工具
2021/07/21 Python
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫