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使用urllib2获取网络资源实例讲解
Dec 02 Python
解读Django框架中的低层次缓存API
Jul 24 Python
详解python单例模式与metaclass
Jan 15 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
windows 下python+numpy安装实用教程
Dec 23 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
python3实现逐字输出的方法
Jan 23 Python
pandas删除指定行详解
Apr 04 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
django-allauth入门学习和使用详解
Jul 03 Python
python pandas 时间日期的处理实现
Jul 30 Python
Flask框架模板渲染操作简单示例
Jul 31 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(3)
2006/10/09 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
python之yield表达式学习
2014/09/02 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
解决Django连接db遇到的问题
2019/08/29 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
广告创意求职信
2014/03/17 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
三八妇女节标语
2014/10/09 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
员工担保书范本
2015/09/22 职场文书
《角的度量》教学反思
2016/02/18 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python