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中的数学运算操作符使用进阶
Jun 20 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
Python接口自动化判断元素原理解析
Feb 24 Python
Python递归实现打印多重列表代码
Feb 27 Python
django正续或者倒序查库实例
May 19 Python
浅谈Python中的字符串
Jun 10 Python
python 怎样进行内存管理
Nov 10 Python
如何使用Python实现一个简易的ORM模型
May 12 Python
python opencv通过按键采集图片源码
May 20 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 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创建PDF中文文档
2006/10/09 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
php模板引擎技术简单实现
2016/03/15 PHP
新手入门常用代码集锦
2007/01/11 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
vue-hook-form使用详解
2017/04/07 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
Python使用剪切板的方法
2017/06/06 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
python用post访问restful服务接口的方法
2018/12/07 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
美国第一香水网站:Perfume.com
2017/01/23 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
string = null 和string = ''的区别
2013/04/28 面试题
期末总结的个人自我评价
2013/11/02 职场文书
开学典礼主持词
2014/03/19 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
应急管理工作总结2015
2015/05/04 职场文书
爱心捐助活动总结
2015/05/09 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
电力培训学习心得体会
2016/01/11 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书