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脚本来获取Google搜索结果的示例
May 04 Python
在Django的视图(View)外使用Session的方法
Jul 23 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
python2与python3共存问题的解决方法
Sep 18 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
关于Django Models CharField 参数说明
Mar 31 Python
python,Java,JavaScript实现indexOf
Sep 09 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
微信小程序表单弹窗实例
2018/07/19 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
Python字符串逐字符或逐词反转方法
2015/05/21 Python
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
一张图带我们入门Python基础教程
2017/02/05 Python
用python实现百度翻译的示例代码
2018/03/09 Python
Django开发中复选框用法示例
2018/03/20 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
如何基于Python实现自动扫雷
2020/01/06 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
python 实现多维数组(array)排序
2020/02/28 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
个人简历自我评价范文
2014/02/04 职场文书
刊首寄语大全
2014/04/11 职场文书
教师节祝酒词
2015/08/11 职场文书
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript