二维情况: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))

梯度下降法进行线性回归---------二维及多维相关推荐

  1. 基于matlab的梯度下降法实现线性回归

    基于matlab的梯度下降法实现线性回归 1 绪论 1.1线性回归的定义 1.2单变量线性回归 1.3多变量线性回归 2 梯度下降 2.1 cost function 2.2 梯度下降:解决线性回归的 ...

  2. 梯度下降法求解线性回归

    梯度下降法求解线性回归 通过梯度下降法求解简单的一元线性回归 分别通过梯度下降算法和sklearn的线性回归模型(即基于最小二乘法)解决简单的一元线性回归实际案例,通过结果对比两个算法的优缺. 通过最 ...

  3. 基于梯度下降法的——线性回归拟合

    点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自数据分析挖掘与算法,禁二次转载 阅读本文需要的知识储备: 高等数学 运筹学 P ...

  4. 线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现

    回归:在这类任务中,计算机程序需要对给定输入预测数值.为了解决这个任务,学习算法需要输出函数f:Rn→R.除了返回结果的形式不一样外,这类问题和分类问题是很像的.这类任务的一个示例是预测投保人的索赔金 ...

  5. python梯度下降法实现线性回归_梯度下降法的python代码实现(多元线性回归)

    梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...

  6. 机器学习:用梯度下降法实现线性回归

    之前在 机器学习算法数学基础之 -- 线性代数篇 中,总结过求解线性回归的两种方法: 最小二乘法 梯度下降法 这篇文章重点总结一下梯度下降法中的一些细节和需要注意的地方. 梯度下降法是什么 假设有一个 ...

  7. 利用梯度下降法实现线性回归--python实现

    利用梯度下降法代替最小二乘法,求线性回归方程. 首先引用库 import numpy as np import matplotlib.pyplot as plt 定义相应的x和y np.random. ...

  8. tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)...

    iris二分类 # Linear Support Vector Machine: Soft Margin # ---------------------------------- # # This f ...

  9. python梯度下降法实现线性回归_【机器学习】线性回归——多变量向量化梯度下降算法实现(Python版)...

    [向量化] 单一变量的线性回归函数,我们将其假设为:hθ(χ)=θ0+θ1χh_\theta(\chi)=\theta_0+\theta_1\chihθ​(χ)=θ0​+θ1​χ但是如果我们的变量个数 ...

最新文章

  1. golang 命令汇总
  2. [codevs3044][POJ1151]矩形面积求并
  3. sift分类java_使用SIFT / SURF进行特征匹配是否可以用于类似对象的分类?
  4. Linux系统(五)负载均衡LVS集群之DR模式
  5. kettle-实现每个分组的前N的数据
  6. mac 切换鼠标滚轮方向
  7. [论文阅读] Active Image Segmentation Propagation
  8. logback实现日志按天和大小切分
  9. java获取前台值_SpringMVC接收前台传递过来的值的实例
  10. Exchange Server 2010全新部署
  11. 【微信小程序学习】小程序API
  12. html 车牌号输入代码,html中车牌号省份简称输入键盘的示例代码(3)
  13. 李开复:移动互联网创业看趋势 看好Android
  14. php控制舵机,分享一个关于SG90舵机的实验(+串口控制)
  15. 阿里云OSS图片文件和html文件无法直接打开,只能下载
  16. eclipse中的图片路径 image
  17. 简单实现点击图片放大的功能
  18. 支付宝即时到账在线语音音效生成器html源码(地球最强装13)
  19. 《Google Android 开发入门与实战》
  20. 根据题目和摘要筛选合适SCI期刊的四种方式

热门文章

  1. ABAP 在字符串之间加入若干空格
  2. SAP 参照sto订单创建外向交货BAPI
  3. ABAP:Read_Text(SAVE_TEXT)函数的使用方法
  4. 从Tronbull引狂欢,看APENFT与波场带来的新可能
  5. 男性护肤热潮难以孕育下一个“完美日记”?
  6. python中的字符串是什么,一文秒懂Python中的字符串
  7. ad采集 cube配置 dma_【技术技巧】 使用MCC数据采集设备获取模拟波形
  8. 保险运用计算机的工作干什么,关于计算机在保险业务中的应用研究
  9. python注册人工智能专业_从专业程度上分析Python和人工智能(AI) 它们如何相关?...
  10. linux 匹配文本中的ip,linux文本三剑客匹配网卡IP地址大PK(CentOS 7系统)