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统计列表中的重复项出现的次数的方法
Aug 18 Python
用Python编写脚本使IE实现代理上网的教程
Apr 23 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
对python制作自己的数据集实例讲解
Dec 12 Python
python实现从ftp服务器下载文件
Mar 03 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
python 利用zmail库发送邮件
Sep 11 Python
python获得命令行输入的参数的两种方式
Nov 02 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实现专业获取网站SEO信息类实例
2015/04/02 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
小程序实现长按保存图片的方法
2019/12/31 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
中国央视网签名寄语
2014/01/18 职场文书
节能环保家庭事迹材料
2014/08/27 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
2014年化验员工作总结
2014/11/18 职场文书
2014年老干部工作总结
2014/11/21 职场文书
测量员岗位职责
2015/02/14 职场文书
质量负责人岗位职责
2015/02/15 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python