机器学习 之 python实现 多元线性回归 梯度下降 普适算法与矩阵算法

2023-10-27

介于网上的多元线性回归梯度下降算法多为固定数量的因变量,如三元一次函数 y = θ 1 x 1 + θ 2 x 2 + θ 3 y=\theta_1x_1+\theta_2x_2+\theta_3 y=θ1x1+θ2x2+θ3 ,或者四元一次函数 y = θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + θ 4 y=\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4 y=θ1x1+θ2x2+θ3x3+θ4。我决定用python手搓一个多元线性回归梯度下降,意思就是数据集可以是三元,可以是四元,可以是五元。

这里提供两种解法和思路。第一种是用for循环硬算,第二种是用矩阵运算。

  1. for循环:
    python代码如下,例子数据集用的是三元方程 y = 2 x + 4 z + 7 y = 2x + 4z + 7 y=2x+4z+7
    P 数据集元素为 [ x , z , 1 , y ] [x,z,1,y] [x,z,1,y] ,中间的1代表常数项。
    a 为学习率(需要调整),step为迭代次数。
# 多元线性梯度下降

import matplotlib.pyplot as plt
import numpy as np
# P = np.loadtxt("PV.csv", delimiter=",")


# y = 3x - 2k + 7z - 3
# P = [[1,1,1,1,5],[2,1,2,1,15],[3,0,1,1,13],[0,1,2,1,9]]


# y = 2x + 4k + 7

P = [[1,1,1,13],[2,3,1,23],[4,2,1,23],[3,3,1,25],[2,2,1,19]]


# y = -13 x + 9
# P = [[1,1,-4],[0,1,9],[-1,1,22],[2,1,-17]]


m = len(P)  					# how many scatters
n = len(P[0])					# how many features

a = 0.1							# learning rate
step = 1000
thre = 0.0009

para=[]
para2=[]

for i in range (0,n-1):
	para.append(1)              # set all parameters to 1
	para2.append(0)

def Cost(P, para, n, j): 		# Single point's parameter cost value
	S = 0
	J = []
	for i in range (0,n-1):		# calculate hyypothsis sum
		t = para[i]*P[j][i]
		S += t
	for i in range (0,n-1):		# calculate each parameter's derivative
		J.append((S - P[j][n-1])*P[j][i]) 
	return J

def Jump(j,t,k,n,thre):
	if abs(t) <= thre:
		k = 1 					# k is a judging parameter
	else:
		k = 0
	if j == n-2 and k == 1:
		return 1
	else:
		return 0

for i in range (0,step):		# repeat to adjust the parameters
	k = 0
	p = 0
	for j in range (0,n-1):		# reset the Cost function each turn
		para2[j]=0
	for j in range (0,m): 		# different points' parameters' derivative
		c = Cost(P,para,n,j)
		for j in range(0,n-1):	# add different points derivative together
			para2[j] += c[j]	
	for j in range(0,n-1):		# adjust the parameters
		t = a*para2[j]/m
		para[j] = para[j] - t
		if Jump(j,t,k,n,thre)==1:
			p = 1
	if p == 1:
		print ("\n$$$$$$$$$$$$$$$$$$$$$$$$$$$\nFunction is converged\n$$$$$$$$$$$$$$$$$$$$$$$$$$$")
		print ("\nFunction is:  \n h(x) = ", end="")
		for j in range(0,n-1):
			if j == n-2:
				print ("(",para[j],")","\n")
			else:
				print ("(",para[j],")x",j+1,"+", end="")
		break
	print(i,para)
 
  1. 矩阵运算
# 多元线性梯度下降

import matplotlib.pyplot as plt
import numpy as np
# P = np.loadtxt("PV.csv", delimiter=",")


# y = 3x - 2k + 7z - 3
P = np.array([[1,1,1,1],[2,1,2,1],[3,0,1,1],[0,1,2,1]])
Y = np.array([[5],[15],[13],[9]])

# y = 2x + 4k + 7

# P = np.array([[1,1,1],[2,3,1],[4,2,1],[3,3,1],[2,2,1]])
# Y = np.array([[13],[23],[23],[25],[19]])


# y = -13 x + 9
# P = np.array([[1,1],[0,1],[-1,1],[2,1]])
# Y = np.array([[-4],[9],[22],[-17]])

para = (np.ones((1,len(P[0]))))

a = 0.01							# learning rate
step = 500
thre = 0.0009

for i in range (0,step):
	para = para - a*len(P)*(para@P.T-Y.T)@P

	print (para)

以上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习 之 python实现 多元线性回归 梯度下降 普适算法与矩阵算法 的相关文章

随机推荐

  • 旋转数组的最小值(二分法)

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾 我们称之为数组的旋转 输入一个非减排序的数组的一个旋转 输出旋转数组的最小元素 例如数组 3 4 5 1 2 为 1 2 3 4 5 的一个旋转 该数组的最小值为1 NOTE 给出的所有
  • 一个抓取阿里云GEOJSON地图区域数据的NODEJS脚本

    中国的区域划分大致是这么个结构 中国 gt 省 gt 市 gt 区 gt 县 gt 镇 gt 乡 对于我们一般的开发者或者中小型企业 要我们自己来收集这些区域信息 显然是不可能的 这个时候我们就得借助一些成熟的地图数据 比如百度地图 高德地
  • 增强现实python

    本博文用来记录使用python实现增强现实 增强现实技术 即实时地计算摄影机影像的位置及角度并加上相应图像 视频 3D模型的技术 这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动 主要工作 实现动态的放置虚拟模型 本文实现了在自己上
  • IHS 禁用SSLV2 启用SSLV3

    昨天完成了PCI第二季度的ASV扫描 也扫出几个问题 主是IHS SSL加密比较弱 1 PCI ASV扫描出来的两个问题 1 38140 SSL Server Supports Weak Encryption Vulnerability 2
  • FastReport VCL 6.7.6 For Delphi10.4.2 安装图解教程

    FastReport VCL 6 7 6 For Delphi10 4 2 安装图解教程 Fastreport控件的安装 一步一步按说明来 不难搞 1 先关闭Delphi 2 右键 以管理员身份运行 对应版本的recompile exe 2
  • 图片情感分析(2):图像情感分析模型

    图像情感分析模型是基于卷积神经网络建立的 卷积神经网络的构建用了keras库 具体代码实现以及代码运行在下一篇贴出 模型包括3个卷积层 2个池化层 4个激活函数层 2个Dropout层 2个全连接层 1个Flatten层和最终分类层 图片初
  • Java创建数组的四种方式

    1 使用默认值来初始化 语法 数组元素类型 数组名称 new 数组元素类型 数组长度 EG int nums new int 5 创建了一个类型为int 名字为nums 长度为5的数组 2 先声明一个数组 再给值 语法 数据元素类型 数组名
  • 37 年来首次 FSF 允许非正式会员提名董事会候选人;Linux RamFS 文件系统移植到 Rust;Git 2.35 发布

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 成立 37 年来首次 FSF 允许
  • Spring boot配置logback日志打印到指定路径文件

    在实际项目开发中 一般都是使用log打印日志到指定路径 生成文件 而平时使用的System out pring 只能输出日志到控制台 当我们把项目打成war包部署到服务器上 会有不用的用户使用我们的应用 这个时候如果一个客户端出现了问题 那
  • 断弧图片数据集 数据集扩充 增强

    图像处理可以用到的数据 这是原始图像总共1356张 对应的XML文件是它的标签 此数据可以用来做图像目标检测 YOLOv4 v3 SSD faster rcnn 数据集增广 数据集扩充 数据集增强的常用方法与软件 https blog cs
  • 修改pycharm缓存文件路径

    Pycharm在使用过程中 Pycharm会生成大量缓存文件 而这些缓存文件默认存储在C盘的用户目录里面 导致C盘空间被占用 目标 将C盘用户目录下的 Pycharm2019转移到D盘 D cache pycharm 文件夹下 如下图 解决
  • div设置边角小三角形

    div class leftmsg div div class rightmsg div
  • 使用NCNN的INT8量化方式进行推理

    本文以NCNN框架为例 实践量化在推理中的巨大作用 加深对神经网络量化的理解 NCNN当前版本只支对称量化 下面以INT8精度为例介绍NCNN的量化使用方式 编译NCNN mkdir build cd build cmake 进入到buil
  • Java面试--常见集合

    Java面试 基础 ArrayList ArrayList的扩容机制 FailFast和FailSafe ArrayList和LinkedList HashMap 介绍一下put方法流程 1 7和1 8有何不同 负载因子默认值为何是0 75
  • CSDN编程竞赛 ——— 第六期之python

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 请不要删掉此地址 目录 前言 背景 大赛简介 参赛流程 参赛经历 解题思路 经验心得 资料分享 前言 背景 目前为止共参加过三次 不过没拿到
  • 20201013 矩阵2范数matlab求解

    这里是引用n norm X 返回矩阵 X 的 2 范数或最大奇异值 该值近似于 max svd X 示例 n norm X p 返回矩阵 X 的 p 范数 其中 p 为 1 2 或 Inf https ww2 mathworks cn he
  • java导出Excel增加下拉框选项,解决小数据量和大数据量下拉框选项的问题

    文章目录 java导出Excel增加下拉框选项 一 小数据量情况 二 大数据量情况 java导出Excel增加下拉框选项 java结合easyExcel 添加传参模型ConsumablesAddDTO 一 小数据量情况 仅供参考 二 大数据
  • 鸿蒙系统怎么退出,华为鸿蒙2.0系统升级了怎么退回EMUI11系统?操作教程详解[多图]...

    华为鸿蒙2 0系统升级了怎么退回EMUI11系统 很多用户升级了又不知道如何才能退回到原来的系统 下面就让安卓乐园小编为大家带来 2 0系统升级退回EMUI11系统操作教程详解 这次开启华为鸿蒙2 0系统手机开发者beta版公测招募的机型有
  • 遗传算法最通俗的讲解案例

    遗传算法 遗传算法求全局最优解或者近似优解 遗传算法GA可以用到数据挖掘领域 由于缺少一些详细的例子 导致难以理解 以下是一个大牛的遗传算法的详细例子 通过这个例子 我们可以详细而且直观的加深对遗传算法的理解 遗传算法的有趣应用很多 诸如寻
  • 机器学习 之 python实现 多元线性回归 梯度下降 普适算法与矩阵算法

    介于网上的多元线性回归梯度下降算法多为固定数量的因变量 如三元一次函数 y 1 x 1