02_有监督学习--简单线性回归模型(梯度下降法代码实现)

有监督学习--简单线性回归模型(梯度下降法代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.定义模型的超参数4.定义核心梯度下降模型函数5.测试:运行梯度下降算法,计算最优的 w 和 b6.画出拟合曲线7.附录-测试数据


有监督学习--简单线性回归模型(梯度下降法代码实现)

0.引入依赖

import numpy as npimport matplotlib.pyplot as plt

1.导入数据(data.csv)

points = np.genfromtxt(‘data.csv‘, delimiter=‘,‘)

# points# 提取 points 中的两对数据,分别作为 x, y# points[0][0]  等价于# points[0,0]  # 第一行第一列数据# points[0,0:1] # array([32.50234527])# points[0,0:2] # 第一行数据 array([32.50234527, 31.70700585])# points[0,0:] # 第一行数据 array([32.50234527, 31.70700585])x = points[:,0] # 第一列数据y = points[:,1] # 第二列数据

# 用 scatter 画出散点图plt.scatter(x, y)plt.show()

作图如下:

2.定义损失函数

# 损失函数是模型系数的函数,还需要传入数据的 x,ydef compute_cost(w, b, points):    total_cost = 0    M = len(points)    # 逐点计算【实际数据 yi 与 模型数据 f(xi) 的差值】的平方,然后求平均    for i in range(M):        x = points[i, 0]        y = points[i, 1]        total_cost += (y - w * x - b) ** 2

    return total_cost / M

3.定义模型的超参数

alpha = 0.0001initial_w = 0initial_b = 0num_iter = 10

4.定义核心梯度下降模型函数

def grad_desc(points, initial_w, initial_b, alpha, num_iter):    w = initial_w    b = initial_b    # 定义一个list保存所有的损失函数值,用来显示下降的过程    cost_list = []

    for i in range(num_iter):        # 先计算初始值的损失函数的值        cost_list.append(compute_cost(w, b, points))        w, b = step_grad_desc(w, b, alpha, points)

    return [w, b, cost_list]

def step_grad_desc(current_w, current_b, alpha, points):    sum_grad_w = 0    sum_grad_b = 0    M = len(points)

    # 对每一个点带入公式求和    for i in range(M):        x = points[i, 0]        y = points[i, 1]        sum_grad_w += (current_w * x + current_b - y) * x        sum_grad_b += (current_w * x + current_b - y)

    # 用公式求当前梯度    grad_w = 2 / M * sum_grad_w    grad_b = 2 / M * sum_grad_b

    # 梯度下降,更新当前的 w 和 b    updated_w = current_w - alpha * grad_w    updated_b = current_b - alpha * grad_b

    return updated_w, updated_b

5.测试:运行梯度下降算法,计算最优的 w 和 b

w, b, cost_list = grad_desc(points, initial_w, initial_b, alpha, num_iter)

print(‘w is:‘, w)print(‘b is:‘, b)

cost = compute_cost(w, b, points)print(‘cost is:‘, cost)

plt.plot(cost_list)plt.show()

输出结果如下:

w is: 1.4774173755483797b is: 0.02963934787473238cost is: 112.65585181499748

作图如下:

6.画出拟合曲线

# 先用 scatter 画出2维散点图plt.scatter(x, y)

# 针对每一个x,计算出预测的值pred_y = w * x + b# 再用 plot 画出2维直线图plt.plot(x, pred_y, c=‘r‘)plt.show()

作图如下:

7.附录-测试数据

测试数据 data.csv 如下:

32.502345269453031,31.7070058465699253.426804033275019,68.7775959816389161.530358025636438,62.56238229794580347.475639634786098,71.54663223356777759.813207869512318,87.23092513368739355.142188413943821,78.21151827079923252.211796692214001,79.6419730498087439.299566694317065,59.17148932186950848.10504169176825,75.33124229706305652.550014442733818,71.30087988685035345.419730144973755,55.16567714595912354.351634881228918,82.47884675749791944.164049496773352,62.00892324572582558.16847071685779,75.39287042599495756.727208057096611,81.4361921588786448.955888566093719,60.72360244067396544.687196231480904,82.89250373145371560.297326851333466,97.37989686216607845.618643772955828,48.84715331735507238.816817537445637,56.87721318626850666.189816606752601,83.87856466460276365.41605174513407,118.5912173025224947.48120860786787,57.25181946226896941.57564261748702,51.39174407983230751.84518690563943,75.38065166531235759.370822011089523,74.76556403215137457.31000343834809,95.45505292257473763.615561251453308,95.22936601755530746.737619407976972,79.05240616956558650.556760148547767,83.43207142132371252.223996085553047,63.35879031749787835.567830047746632,41.41288530370056342.436476944055642,76.61734128007404458.16454011019286,96.76956642610819957.504447615341789,74.08413011660252345.440530725319981,66.58814441422859461.89622268029126,77.76848241779302433.093831736163963,50.71958891231208436.436009511386871,62.12457081807178137.675654860850742,60.81024664990221144.555608383275356,52.68298336638778143.318282631865721,58.56982471769286750.073145632289034,82.90598148507051243.870612645218372,61.42470980433912362.997480747553091,115.2441528007952932.669043763467187,45.57058882337608540.166899008703702,54.08405479622361253.575077531673656,87.99445275811041333.864214971778239,52.72549437590042564.707138666121296,93.57611869265824138.119824026822805,80.16627544737096444.502538064645101,65.10171157056032640.599538384552318,65.56230126040037541.720676356341293,65.28088692082282351.088634678336796,73.43464154632430155.078095904923202,71.1397278586189441.377726534895203,79.10282968354985762.494697427269791,86.52053844034715349.203887540826003,84.74269780782621841.102685187349664,59.35885024862493341.182016105169822,61.68403752483362750.186389494880601,69.84760415824918352.378446219236217,86.09829120577410350.135485486286122,59.10883926769964333.644706006191782,69.8996816436276339.557901222906828,44.86249071116439856.130388816875467,85.49806777884022357.362052133238237,95.53668684646721960.269214393997906,70.25193441977158735.678093889410732,52.72173496477498831.588116998132829,50.39267013507989653.66093226167304,63.64239877565775346.682228649471917,72.24725106866236543.107820219102464,57.81251297618140270.34607561504933,104.2571015854382244.492855880854073,86.64202031882200657.50453330326841,91.48677800011013536.930076609191808,55.23166088621283655.805733357942742,79.55043667850760938.954769073377065,44.84712424246760156.901214702247074,80.20752313968276356.868900661384046,83.1427497920434634.33312470421609,55.72348926054391459.04974121466681,77.63418251167786457.788223993230673,99.05141484174826954.282328705967409,79.12064627468002751.088719898979143,69.58889785111847550.282836348230731,69.51050331149438944.211741752090113,73.68756431831728538.005488008060688,61.36690453724013132.940479942618296,67.17065576899511853.691639571070056,85.66820314500154268.76573426962166,114.8538712339139446.230966498310252,90.12357206996742368.319360818255362,97.91982103524284850.030174340312143,81.53699078301502849.239765342753763,72.11183246961566350.039575939875988,85.23200734232567348.149858891028863,66.22495788805463225.128484647772304,53.454394214850524

原文地址:https://www.cnblogs.com/chenmingjun/p/10884542.html

时间: 2024-11-06 09:48:15

02_有监督学习--简单线性回归模型(梯度下降法代码实现)的相关文章

01_有监督学习--简单线性回归模型(最小二乘法代码实现)

有监督学习--简单线性回归模型(最小二乘法代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.定义模型拟合函数4.测试:运行最小二乘算法,计算 w 和 b5.画出拟合曲线6.附录-测试数据 有监督学习--简单线性回归模型(最小二乘法代码实现) 0.引入依赖 import numpy as npimport matplotlib.pyplot as plt 1.导入数据(data.csv) points = np.genfromtxt('data.csv', delimite

03_有监督学习--简单线性回归模型(调用 sklearn 库代码实现)

有监督学习--简单线性回归模型(调用 sklearn 库代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.导入机器学习库 sklearn4.测试:运行算法,从训练好的模型中提取出系数和截距5.画出拟合曲线6.附录-测试数据 有监督学习--简单线性回归模型(调用 sklearn 库代码实现) 0.引入依赖 import numpy as npimport matplotlib.pyplot as plt 1.导入数据(data.csv) points = np.genfro

Stanford机器学习课程笔记——单变量线性回归和梯度下降法

Stanford机器学习课程笔记--单变量线性回归和梯度下降法 1. 问题引入 单变量线性回归就是我们通常说的线性模型,而且其中只有一个自变量x,一个因变量y的那种最简单直接的模型.模型的数学表达式为y=ax+b那种,形式上比较简单.Stanford的机器学习课程引入这个问题也想让我们亲近一下machine learning这个领域吧~吴恩达大神通过一个房屋交易的问题背景,带领我们理解Linear regression with one variable.如下: 不要看这个问题简答,大神就是大神

线性回归与梯度下降法

前言 最近在看斯坦福的<机器学习>的公开课,这个课程是2009年的,有点老了,不过讲的还是很好的,廓清了一些我以前关于机器学习懵懂的地方.我的一位老师曾经说过: 什么叫理解?理解就是你能把同一个事情用自己的语言表达出来,并且能让别人听得懂. 本着这样的原则,同时也为了证明自己是”理解”的,于是决定打算在学习<机器学习>公开课的时候,写一些系列文章类巩固学到的东西.机器学习中的很多内容都是和数学推导相关的,而我本人的数学功底并不扎实,所以文章也许会写得比较慢.另外,这个系列的文章大体

机器学习(Andrew Ng)笔记(二):线性回归模型 &amp; 梯度下降算法

线性回归模型 回忆一下第一节课提出的预测房屋每平方单位价格的例子.在这个例子中,我们可以画一条直线,尽量符合数据点的分布趋势.我们已经知道这是一个回归问题,即预测连续值的输出.实际上,这是一个典型的线性回归模型.之所以这样定义,大概是因为回归方程可以用一个线性函数来表示. 我们可以假设这个线性函数为: 这是一个关于x的一元一次方程.其中两个参数的值我们还不知道,要根据训练集中的数据求解出来.这里要定义几个概念,我们已经有的数据,即房屋面积与单价的对应数据对,被称作训练集.x作为房屋面积,称作输入

逻辑回归模型梯度下降法跟牛顿法比较

1.综述 机器学习的优化问题中,梯度下降法和牛顿法是常用的两种凸函数求极值的方法,他们都是为了求得目标函数的近似解.梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值.在逻辑回归模型的参数求解中,一般用改良的梯度下降法,也可以用牛顿法. 2 梯度下降法 2.1算法描述 1.确定误差范围和下降的步长,确定函数的导函数 2.while(|新值 -旧值| >误差) 3.       旧值=新值 4.       新值=初始值-步长*导函数

1、回归 一元线性回归 代价函数 梯度下降法

1.回归是达尔文表弟发现的,就是说人类总体有一个平均身高.那个高个子生的孩子都个高,矮的孩子生的矮.但是他们的下一代大部分都往平均身高长,也就是说特别高的人,他们的孩子会很高,但是往往比他们自己矮.特别矮的人他们生的孩子会矮一些,但是会比自己的父母高,他们都有这种趋势.表弟管这个叫做回归. 2.一元线性回归 指的是一个自变量对应一个因变量的 一元函数.当平面坐标系中 有些散列的点的时候,我们往往想找到一条直线去拟合他们的回归线.我们管这条直线叫做一元线性回归 假定这个函数为我们要求的就是这个函数

线性回归和梯度下降代码demo

线性回归 决定系数越接近一那么预测效果越好 对于多元线性回归和一元线性回归推导理论是一致的,只不过参数是多个参数而已 梯度下降 梯度下降法存在局部最小值 太小迭代次数多,太大将无法迭代到最优质 梯度下降发容易到达局部最小值 凸函数使用局部下降法一定可以到全部最小值,所以不存在局部最小值才可以 下面两个demo是一元函数的拟合 1使用梯度下降法的数学公式进行的机器学习代码 1 import numpy as np 2 from matplotlib import pyplot as plt 3 #

简单线性回归(sklearn + tensorflow)

概述 最近学习机器学习(和深度学习),入门第一个接触的便是简单线性回归.所谓线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法.其形式可表示为:y = w1x1 + w2x2 + w3x3 + ... + w_nx_n + b而简单线性回归,是其最简单的形式:y = wx + b,即我们所熟知的一次函数,理解为给定权重w和偏置(或称为截距)b,结果y随变量x的变化而变化. 简单线性回归 机器学习中的简单线性回归,个人理解为给定一系列的x值和对应的y