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实现简单HTML表格解析的方法
Jun 15 Python
详解django.contirb.auth-认证
Jul 16 Python
python实现简易动态时钟
Nov 19 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
keras模型可视化,层可视化及kernel可视化实例
Jan 24 Python
python中sort sorted reverse reversed函数的区别说明
May 11 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
用python绘制樱花树
Oct 09 Python
python 实时调取摄像头的示例代码
Nov 25 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 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下实现农历日历的代码
2007/03/07 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
php调整服务器时间的方法
2015/04/03 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python将图片文件转换成base64编码的方法
2015/03/14 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
python 实现线程之间的通信示例
2020/02/14 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
文员个人的求职信范文
2013/09/26 职场文书
家长学校工作方案
2014/05/07 职场文书
争先创优演讲稿
2014/09/15 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
学生保证书
2015/01/16 职场文书
运动会广播稿100字
2015/08/19 职场文书