梯度下降法进行线性回归---------二维及多维
二维情况:y = theta0 + theta1*x
结果为:2.57549789814787, 0.613000580602551
代码如下:
from sympy import *
import mathX = [1.5, 2, 1.5, 2, 3, 3, 3.5, 3.5, 4, 4, 5, 5]
Y = [3, 3.2, 4, 4.5, 4, 5, 4.2, 4.5, 5, 5.5, 4.8, 6.5]J = 0 # 损失函数
theta0, theta1 = symbols('theta0, theta1') # 定义theta参数for i in range(len(X)): # 构造损失函数J += (theta0 + X[i]*theta1 - Y[i])**2
J *= 0.5
# print(J)alpha = 0.01 # 学习步长
epsilon = 0.0000000000001 # 迭代阀值,当两次迭代损失函数之差小于该阀值时停止迭代dtheta0 = diff(J, theta0) # 对theta0求偏导
dtheta1 = diff(J, theta1) # 对theta0求偏导
print('dthedat0=', dtheta0)
print('dthedat1=', dtheta1)theta0 = 0 # 初始化theta参数
theta1 = 0
while True:last0 = theta0last1 = theta1theta0 -= alpha * dtheta0.subs({'theta0': theta0, 'theta1': theta1})theta1 -= alpha * dtheta1.subs({'theta0': theta0, 'theta1': theta1})a = J.subs({'theta0': theta0, 'theta1': theta1})b = J.subs({'theta0': last0, 'theta1': last1})print("{}, {}, {}, {}".format(theta0, theta1, a, b))if math.fabs(J.subs({'theta0': theta0, 'theta1': theta1}) - J.subs({'theta0': last0, 'theta1': last1})) < epsilon:breakprint("{}, {}".format(theta0, theta1))
多维情况:y[i] = theta0 + theta1*x[i][0] + theta2*x[i][1] + theta3*x[i][2]
结果为:50.3097802023958, 47.7942911922764, -13.0287743334236, 1.13282147172682
代码如下:
from sympy import *
import mathX = [(1, 0., 3), (1, 1., 3), (1, 2., 3), (1, 3., 2), (1, 4., 4)]
Y = [95.364, 97.217205, 75.195834, 60.105519, 49.342380]J = 0 # 损失函数 和 theta参数
theta0, theta1, theta2, theta3 = symbols('theta0, theta1, theta2, theta3')for i in range(len(X)): # 构造损失函数J += (theta0 + X[i][0]*theta1 + X[i][1]*theta2 + X[i][2]*theta3 - Y[i])**2
J *= 0.5
# print(J)alpha = 0.01 # 学习步长
epsilon = 0.0000000000001 # 迭代阀值,当两次迭代损失函数之差小于该阀值时停止迭代dtheta0 = diff(J, theta0) # 对theta0求偏导
dtheta1 = diff(J, theta1) # 对theta1求偏导
dtheta2 = diff(J, theta2) # 对theta2偏导
dtheta3 = diff(J, theta3) # 对theta3求偏导
print('dthedat0=', dtheta0)
print('dthedat1=', dtheta1)
print('dthedat2=', dtheta2)
print('dthedat3=', dtheta3)theta0 = 0 # 初始化theta参数
theta1 = 0
theta2 = 0
theta3 = 0
while True:last0 = theta0last1 = theta1last2 = theta2last3 = theta3theta0 -= alpha * dtheta0.subs({'theta0': theta0, 'theta1': theta1, 'theta2': theta2, 'theta3': theta3})theta1 -= alpha * dtheta1.subs({'theta0': theta0, 'theta1': theta1, 'theta2': theta2, 'theta3': theta3})theta2 -= alpha * dtheta2.subs({'theta0': theta0, 'theta1': theta1, 'theta2': theta2, 'theta3': theta3})theta3 -= alpha * dtheta3.subs({'theta0': theta0, 'theta1': theta1, 'theta2': theta2, 'theta3': theta3})a = J.subs({'theta0': theta0, 'theta1': theta1, 'theta2': theta2, 'theta3': theta3})b = J.subs({'theta0': last0, 'theta1': last1, 'theta2': last2, 'theta3': last3})print("{}, {}, {}, {}, {}, {}".format(theta0, theta1, theta2, theta3, a, b))if math.fabs(J.subs({'theta0': theta0, 'theta1': theta1, 'theta2': theta2, 'theta3': theta3}) -J.subs({'theta0': last0, 'theta1': last1, 'theta2': last2, 'theta3': last3})) < epsilon:breakprint("{}, {}, {}, {}".format(theta0, theta1, theta2, theta3))
梯度下降法进行线性回归---------二维及多维相关推荐
- 基于matlab的梯度下降法实现线性回归
基于matlab的梯度下降法实现线性回归 1 绪论 1.1线性回归的定义 1.2单变量线性回归 1.3多变量线性回归 2 梯度下降 2.1 cost function 2.2 梯度下降:解决线性回归的 ...
- 梯度下降法求解线性回归
梯度下降法求解线性回归 通过梯度下降法求解简单的一元线性回归 分别通过梯度下降算法和sklearn的线性回归模型(即基于最小二乘法)解决简单的一元线性回归实际案例,通过结果对比两个算法的优缺. 通过最 ...
- 基于梯度下降法的——线性回归拟合
点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自数据分析挖掘与算法,禁二次转载 阅读本文需要的知识储备: 高等数学 运筹学 P ...
- 线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现
回归:在这类任务中,计算机程序需要对给定输入预测数值.为了解决这个任务,学习算法需要输出函数f:Rn→R.除了返回结果的形式不一样外,这类问题和分类问题是很像的.这类任务的一个示例是预测投保人的索赔金 ...
- python梯度下降法实现线性回归_梯度下降法的python代码实现(多元线性回归)
梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...
- 机器学习:用梯度下降法实现线性回归
之前在 机器学习算法数学基础之 -- 线性代数篇 中,总结过求解线性回归的两种方法: 最小二乘法 梯度下降法 这篇文章重点总结一下梯度下降法中的一些细节和需要注意的地方. 梯度下降法是什么 假设有一个 ...
- 利用梯度下降法实现线性回归--python实现
利用梯度下降法代替最小二乘法,求线性回归方程. 首先引用库 import numpy as np import matplotlib.pyplot as plt 定义相应的x和y np.random. ...
- tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)...
iris二分类 # Linear Support Vector Machine: Soft Margin # ---------------------------------- # # This f ...
- python梯度下降法实现线性回归_【机器学习】线性回归——多变量向量化梯度下降算法实现(Python版)...
[向量化] 单一变量的线性回归函数,我们将其假设为:hθ(χ)=θ0+θ1χh_\theta(\chi)=\theta_0+\theta_1\chihθ(χ)=θ0+θ1χ但是如果我们的变量个数 ...
最新文章
- golang 命令汇总
- [codevs3044][POJ1151]矩形面积求并
- sift分类java_使用SIFT / SURF进行特征匹配是否可以用于类似对象的分类?
- Linux系统(五)负载均衡LVS集群之DR模式
- kettle-实现每个分组的前N的数据
- mac 切换鼠标滚轮方向
- [论文阅读] Active Image Segmentation Propagation
- logback实现日志按天和大小切分
- java获取前台值_SpringMVC接收前台传递过来的值的实例
- Exchange Server 2010全新部署
- 【微信小程序学习】小程序API
- html 车牌号输入代码,html中车牌号省份简称输入键盘的示例代码(3)
- 李开复:移动互联网创业看趋势 看好Android
- php控制舵机,分享一个关于SG90舵机的实验(+串口控制)
- 阿里云OSS图片文件和html文件无法直接打开,只能下载
- eclipse中的图片路径 image
- 简单实现点击图片放大的功能
- 支付宝即时到账在线语音音效生成器html源码(地球最强装13)
- 《Google Android 开发入门与实战》
- 根据题目和摘要筛选合适SCI期刊的四种方式
热门文章
- ABAP 在字符串之间加入若干空格
- SAP 参照sto订单创建外向交货BAPI
- ABAP:Read_Text(SAVE_TEXT)函数的使用方法
- 从Tronbull引狂欢,看APENFT与波场带来的新可能
- 男性护肤热潮难以孕育下一个“完美日记”?
- python中的字符串是什么,一文秒懂Python中的字符串
- ad采集 cube配置 dma_【技术技巧】 使用MCC数据采集设备获取模拟波形
- 保险运用计算机的工作干什么,关于计算机在保险业务中的应用研究
- python注册人工智能专业_从专业程度上分析Python和人工智能(AI) 它们如何相关?...
- linux 匹配文本中的ip,linux文本三剑客匹配网卡IP地址大PK(CentOS 7系统)