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使用arp欺骗伪造网关的方法
Apr 24 Python
Python使用Tkinter实现机器人走迷宫
Jan 22 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 Python
Python 监测文件是否更新的方法
Jun 10 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
python如何统计代码运行的时长
Jul 24 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
python 通过文件夹导入包的操作
Jun 01 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
python实战之用emoji表情生成文字
May 08 Python
Python几种酷炫的进度条的方式
Apr 11 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面向对象学习之parent::关键字
2017/01/18 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
php图片裁剪函数
2018/10/31 PHP
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python 统计代码行数简单实例
2017/05/04 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
阿波罗盒子:Apollo Box
2017/08/14 全球购物
心理健康教育心得体会
2013/12/29 职场文书
医德医风演讲稿
2014/05/20 职场文书
公司运动会策划方案
2014/05/25 职场文书
自荐信格式范文
2015/03/04 职场文书
大学生英文求职信范文
2015/03/19 职场文书
党员承诺书格式范文
2015/04/28 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
大学入学感言
2015/08/01 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL