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 相关文章推荐
web.py在模板中输出美元符号的方法
Aug 26 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
python+pandas分析nginx日志的实例
Apr 28 Python
解决python中使用plot画图,图不显示的问题
Jul 04 Python
通过python爬虫赚钱的方法
Jan 29 Python
python操作日志的封装方法(两种方法)
May 23 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
python如何建立全零数组
Jul 19 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
python函数指定默认值的实例讲解
Mar 29 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新手上路(三)
2006/10/09 PHP
一个PHP模板,主要想体现一下思路
2006/12/25 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
基于jquery的图片懒加载js
2010/06/30 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
python处理按钮消息的实例详解
2017/07/11 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
使用python画社交网络图实例代码
2019/07/10 Python
python logging.info在终端没输出的解决
2020/05/12 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
教育实习生的自我评价分享
2013/11/21 职场文书
党性分析材料格式
2014/12/19 职场文书
仓管员岗位职责
2015/02/03 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
500字作文之周记
2019/12/13 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python