python实现机器学习之多元线性回归
作者:婉如 发布时间:2022-09-04 01:42:49
标签:python,多元线性回归
总体思路与一元线性回归思想一样,现在将数据以矩阵形式进行运算,更加方便。
一元线性回归实现代码
下面是多元线性回归用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)
特别需要注意的是要弄清:矩阵的形状
在梯度下降的时候,计算两个偏导值,这里面的矩阵形状变化需要注意。
梯度下降数学式子:
以代码中为例,来分析一下梯度下降中的矩阵形状。
代码中设了5个特征。
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矩阵=一个数
来源:https://blog.csdn.net/zhangergou0628/article/details/80455596


猜你喜欢
- 本篇文章通过使用python实现对计算机摄像头的调用从而实现摄像监控的功能。利用opencv的图像处理功能可以轻松对计算机摄像头的调用实现实
- 很多web开发者或许都遇到过这样的问题,程序莫名奇怪出现“不能执行已释放Script的代码”,错误行1,列1.对于这种消息描述不着边,行列描
- 创建变长数组类型CREATE TYPE varray_type AS VARRAY(2) OF VARCHAR2(50);这个变长数组最多可
- 表结构很简单CREATE TABLE `oplogs` (`id` int(10) unsigned NOT NULL AUTO_INCRE
- 一、利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码:$urlToEnco
- 之前写了个python脚本用selenium+phantomjs爬新帖子,在循环拉取页面的过程中,phantomjs总是block住,使用W
- Python 类Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用
- 前言OpenCV是图像处理常用的库,作为初学者,往往从图片的读取、保存、查询图片的信息开始,下面将分享Python下OpenCV的一些基本使
- 1、copy.copy()函数可用于复制列表或字典等可变值,复制后的列表和原列表是两个独立的列表。import copyorigin = [
- 模板图片如下:需识别的图片如下:一、模板预处理1.将模板设置为二值图2.检测模板的轮廓3.对模板轮廓排序,并将数字和轮廓一一对应,以字典存储
- 本文实例讲述了redis数据库及与python交互用法。分享给大家供大家参考,具体如下:redis数据操作1.string类型:主要存储字符
- 接上一篇内容:https://www.jb51.net/article/249934.htm一、聚簇索引其实之前内容中介绍的 B+ 树就是聚
- 哈希数据类型的创建与数据的添加 - hmset利用 “redis-py” 模块实现 &ldq
- js的成员和方法好象没有private和public之分,列一下public的成员和方法成员:name 控件的名字,既这个控件的变量名(必选
- Chrome的CSS支持程度 :Green / √ means current support.Orange / Δ means that
- 目录概述索引数据结构二叉树红黑树B-TreeB+TreeHash索引InnoDB 索引实现(聚集)索引文件和数据文件是分离的(非聚集)聚集索
- 一.准备工作首先,本文使用的技术为 python+requests+bs4,没有了解过可以先去了解一下。我们的需求是将博客园问题列表中的所有
- 一、Requests库的7个主要的方法1.request()构造请求,支撑以下的基础方法2.get()获取HTML页面的主要方法,对应于ht
- 前言:WebDriver提供了两个关闭浏览器的方法,一个是前边使用quit()方法,另一个是close()方法close():关闭当前窗口q
- 本文实例代码主要实现python编程测试电脑开启最大线程数,具体实现代码如下。#!/usr/bin/env python #co