机器学习系列——线性回归1

线性回归1关:一元线性回归拟合模型 【代码】线性回归1关:一元线性回归拟合模型。 阅读详情

作为机器学习的第一课,先啰嗦地简单介绍一下,这是一个从公式推导到python实践的一门 “ 机器通俗演义 ” 系列课程(就是阐述一下自己的拙见),不定期更新,欢迎大家提出意见!
顺便推荐一下吴恩达老师的机器学习课程!(B站有资源)
(下面是正文部分)

线性回归模型

我们由浅入深,先从简单的二元线性回归模型开始。这节课从简单的二维x, y入手,如果对于数学公式推导有些障碍的,可以略过,关于里面每一个公式的 “ 实际意义 ” 会在之后的课程里介绍!

模型简介

在这里插入图片描述
有这么一副图,我们想要找到一条直线,让它可以尽可能的经过所有的点
在这里插入图片描述
就好像这两根线,我们就需要通过 “ 一番操作 ” 拟合出一条类似绿线那样尽可能经过所有点的线。

一次函数

首先让我们看一下我们从初中开始第一个接触的函数——一次函数!
y = f(x) = kx + b
很简单对不对?恭喜你,你已经会线性回归的绝大部分了!

代价函数(CostFunction)

刚才说“尽可能经过所有点的线”,我们可以看图得出结论,绿线比红线 “ 厉害 ” ,但是机器还不会这么高级的操作啊?所以,在数学上,我们就可以通过“距离”来评估一条直线的 “ 优劣程度 ” ,这个就是我们的代价函数——
J(w,b)=12m∑i=1m((w∗x(i)+b)−y(i))2 J(w, b) =\frac{1}{2m} \sum_{i=1}^{m} ( (w * x^{(i)}+ b) - y^{(i)})^2 J(w,b)=2m1i=1m((wx(i)+b)y(i))2
看起来有一点复杂,且听我逐步分解。
首先w, b,就是上面一次函数对应的 k, b; 然后 m 就是样本个数(简单理解为你有几个点,比如例图中就是m = 4)然后 x(i)x^{(i)}x(i) 就是每一个点的横坐标, y(i)y^{(i)}y(i) 就是每一个点的纵坐标 (其实 i 表示第 i 个样本)所以令
h(x)=wx+b h(x)=wx+b h(x)=wx+b
那么原式就可以写成
J(w,b)=12m∑i=1m(h(x(i))−y(i))2 J(w, b) =\frac{1}{2m} \sum_{i=1}^{m} (h(x^{(i)}) - y^{(i)})^2 J(w,b)=2m1i=1m(h(x(i))y(i))2
那么不是恰好是点纵向到线的距离吗?!在这里插入图片描述
即为途中蓝色虚线长度的平方,
我们把点到线的垂直距离求和,那么总和越小的,是不是就可以说明这根线就尽量贴合我们的数据了?所以这个就是代价函数的意义

模型简介之梅开二度

有了上面的铺垫,我们不难这么想——不断搜索着w, b的值,然后通过代价函数来评估出最好的那一条。于是就有如下过程

Step 1:
 Initialization(w, b)
 
Step 2:
	while(CostFunction(w, b) > 0.00001):  #--- 误差在0.00001以内的时候我们觉得差不多了, 停止训练
		Update(w, b)

那么如何Update呢?我们可以利用梯度下降来做,可能数学比较厉害的同志想到了,这种问题不是可以用 “ 最小二乘法 ” 来解决吗?是的,但是以后我们还要拓展到多元呢!最小二乘的复杂性就体现出来了

梯度下降

想象一下你站在高峰之巅,然后突然口渴想下山喝水,你要走那一条路呢?
在这里插入图片描述
显然得,我们这么走一定是最快的,但是为什么呢?
在这里插入图片描述
啊!因为这里的坡度最陡啊!
是的,这个就是梯度下降的精髓,每一次选取 “ 坡度 ” 最陡的地方往下走。根据数学知识可以得知,导数指示方向是增长方向,那么我们将其取负方向,不就是最陡的斜坡而下降吗?!于是有
Θi=Θi−1−α∇J(Θ) \Theta_i = \Theta_{i-1} - \alpha\nabla J(\Theta) Θi=Θi1αJ(Θ)
我们来举一个例子来理解
在这里插入图片描述
上图是一个经典的二次函数 f(x)=x2f(x)=x^2f(x)=x2,此时假设我们站在这里(x0=1x_0 = 1x0=1),我们要去往 “ 谷底 ” 在这里插入图片描述
先令 α=0.3\alpha = 0.3α=0.3 根据公式可以得到,迭代的x1=x0+0.3∗f′(x0)=1−0.3∗2=0.4x_1=x_0+0.3*f'(x_0) =1-0.3*2=0.4x1=x0+0.3f(x0)=10.32=0.4在这里插入图片描述
大概就是这个样子
同理,我们可以一直迭代,直到我们得到最低点——大概长这个样子(大家熟悉的图像)
在这里插入图片描述
这个就是我们的梯度下降法。

对于CostFunction的梯度下降

这里给出推导过程(如果不感兴趣可以直接看结论)
J(w,b)=12m∑i=1m((w∗x(i)+b)−y(i))2 J(w, b) =\frac{1}{2m} \sum_{i=1}^{m} ( (w * x^{(i)} + b) - y^{(i)})^2 J(w,b)=2m1i=1m((wx(i)+b)y(i))2

g(x)=x2 g(x) = x^2g(x)=x2
h(x)=(w∗x(i)+b)−y(i) h(x) = (w * x^{(i)} + b) - y^{(i)}h(x)=(wx(i)+b)y(i)

J(w,b)=12m∑i=1mg(h(x))J(w, b)=\frac{1}{2m}\sum_{i=1}^{m}g(h(x))J(w,b)=2m1i=1mg(h(x))
根据链式法则得到
∂J(w,b)∂w=12m∑i=1mg′(h(w))h′(w) \frac{\partial J(w, b)}{\partial w}=\frac{1}{2m}\sum_{i=1}^{m} g'(h(w))h'(w)wJ(w,b)=2m1i=1mg(h(w))h(w)
把除 www 外所有字母看成参数,代入
∂J(w,b)∂w=12m∑i=1m2∗((w∗x(i)+b)−y(i))∗x(i)\frac{\partial J(w, b)}{\partial w}=\frac{1}{2m}\sum_{i=1}^{m} 2*((w * x^{(i)} + b) - y^{(i)})*x^{(i)}wJ(w,b)=2m1i=1m2((wx(i)+b)y(i))x(i)
∂J(w,b)∂w=1m∑i=1m((w∗x(i)+b)−y(i))∗x(i)\frac{\partial J(w, b)}{\partial w}=\frac{1}{m}\sum_{i=1}^{m} ((w * x^{(i)} + b) - y^{(i)})*x^{(i)}wJ(w,b)=m1i=1m((wx(i)+b)y(i))x(i)
同理可得
∂J(w,b)∂b=1m∑i=1m((w∗x(i)+b)−y(i))\frac{\partial J(w, b)}{\partial b}=\frac{1}{m}\sum_{i=1}^{m} ((w * x^{(i)} + b) - y^{(i)})bJ(w,b)=m1i=1m((wx(i)+b)y(i))

代码实现

综上所述,最后一番梳理,只要按步骤来逐个计算,就可以得到最终我们的模型了—— Python代码送的上(numpy)

import numpy as np
#--- Step 0: 定义真实函数 (y)
def RealFunction(x):                            
    return 0.5 * x - 4.3

start = 5    
#--- Step 1: 设置数据集(刚才例子里的点集)
trainX = np.array([i for i in range(start, start + n)], dtype = np.float32)           
trainY = np.array([RealFunction(i) for i in range(start, n + start)], dtype = np.float32) 

#--- Step 2: 设置超参数
np.random.seed(1)
w, b = np.random.uniform(-1, 1, (2))            # --- 初始化 w, b
n = 20                                          # --- 样本数 (m)

esp = 100000                                    # --- 训练次数
alpha = 0.003                                   # --- 学习速率

#--- Step 3: 定义CostFunction, 即误差Loss
def Loss(x, y):                                 # --- 返回误差
    return sum((w * x + b - y) ** 2) / float(n * 2)

#--- Step 4: 定义训练框架
def Train(x, y):
    global w, b

    for i in range(esp):     
        if(Loss(x, y) < 0.000001):				# --- 误差太小不继续训练
            break

        predictY = w * x + b					# --- 预测的结果

        deltaW = np.dot(x, (predictY - y)) / float(n) 
        deltaB = np.sum(predictY - y) / float(n)

        w = w - alpha * deltaW
        b = b - alpha * deltaB

        if (i + 1) % 1000 == 0:					# --- 查看更新的 w, b
            print(w, b)
    print("Loss:", Loss(x, y))   
#--- Step 5: 运行
if __name__ == '__main__':
    Train(trainX, trainY)

已知上面的 w = 0.5, b = -4.3,运行结果如下所示——
在这里插入图片描述
可以看到误差已经非常小了!说明算法的正确性,确实收敛了

总结回顾

首先我们提出了 “ 拟合绿线问题 ” ,接着利用梯度下降法来优化算法。后面的课程会具体介绍里面的每一个小步骤,并且介绍它在现实生活中的运用,并且提出一些问题——比如:为什么可以用梯度下降法优化问题?如果陷入局部最优解怎么办?如何判断算法优劣?究竟什么才是人工智能?以及微积分线性代数的补充知识,推广线性回归模型等,也许会在将来更新!

设置悬念,尽情期待!

我是Machillka,蒟蒻一枚。如果有说错的地方,各位大神千千万万要指出来。
谢谢大家!欢迎各位神犇指点!
(转载请标注出处与博主姓名)
(QQ:2437844684)
(欢迎各位大牛评论)
——————都看到这里了,不点个赞是不是也觉得不好意思呀~

机器学习 --- 线性回归(第一关-第四关) 线性回归是属于机器学习里面的监督学习,与分类问题不同的是,在回归问题中,其目标是通过对训练样本的学习,得到从样本特征到样本标签直接的映射,其中,在回归问题中,样本的标签是连续值。线性回归是一类重要的回归问题。在线性回归中,目标值与特征直接存在线性关系。 本实训项目介绍线性回归模型的类别和性能度量等知识,并基于sklearn线性回归面向解决房价预测问题。 第二关 #encoding=utf8 import numpy as np def mse_score(y_predict,y_test): '' 阅读详情

相关推荐

头歌线性回归案例- 波斯顿房价预测

波斯顿房价数据集共有506条波斯顿房价的数据,每条数据包括对指定房屋的13项数值型特征和目标房价组成。用数据集的80%作为训练集,数据集的20%作为测试集,训练集和测试集中都包括特征和目标房价。#获取训练数据#获取训练标签#获取测试数据。

2302_80089843的博客 1435

机器学习系列2:从线性方程的角度看的线性回归1

迭代法是一种用于解线性方程组的数值方法。基本思路是通过先猜测解并逐步调整来逼近精确解。下面将介绍一种广泛使用的迭代法——雅可比迭代法,用于解$n$个方程和$n$个未知数的线性方程组。

gongdiwudu的专栏 4823

python机器学习 一元线性回归 梯度下降法的实现 【Python机器学习系列(四)】_一元线性回归python梯度下降法(1)

print(f"迭代{n_iterables}次后:截距b={b},斜率k={k},损失={compute_mse(b,k,x_data,y_data)}”)print(f"开始:截距b={b},斜率k={k},损失={compute_mse(b,k,x_data,y_data)}“)print(“开始迭代”)# 初始化b、k的偏导。

2401_84615650的博客 329

机器学习--线性回归

所谓回归分析(regression analysis),是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,也就是研究当自变量x变化时,因变量y以何种形式在变化。在机器学习领域,回归应用于被预测对象具有连续值特征的情况(如客流量、降雨量、销售量等)。在机器学习线性回归分析中,如果只包括一个自变量(特征x)和一个因变量(标签y),且两者的关系可用一条直线近似表示,这种回归分析就称为分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为分析。

y江江江江的博客 1313

机器学习——线性回归(头歌实训)

【头歌实训】代码、答案,机器学习——线性回归

HL031125的博客 1万+

机器学习系列1线性回归LinearRegression——数学推导和纯Numpy实现

目录数学推导notationsobjective functionpartial derivativematrix version手动实现线性回归训练器 train思路代码实现预测器 predict思路代码评价器 evaluation思路代码数据处理代码与sklearn比较完整代码 这一系列是学习公众号“机器学习实验室”的笔记,跟着大佬的脚步一个个实现。 数学推导 notations X={xi⃗...

occamo的博客 1014

快速入门机器学习系列1)--线性回归及代码

机器学习系列1)--线性回归 线性回归: 目标值预期是输入变量的线性组合。 简单来说, 就是选择一条线性函数来很好的拟合已知数据并预测未知数据。经典的线性回归模型主要用来预测一些存在着线性关系的数据集。 回归模型可以理解为: 存在一个点集, 用一条曲线去拟合它分布的过程。 如果拟合曲线是一条直线, 则称为线性回归。 如果是一条二次曲线, 则被称为二次回归。 如果包括两个或两个以上的自变量, 且因变量和自变量之间是线性关系, 则称为多元线性回归线性回归是回归模型中最简单的一种。 例如下图: 很

qq_43544150的博客 521

Spark2.0机器学习系列12: 线性回归及L1、L2正则化区别与稀疏解

我的博客中参考了大量的文章或者别的作者的博客,有时候疏忽了并未一一标注,本着分享交流知识的目的,如果侵犯您的权利,这并非我的本意,如果您提出来,我会及时改正。概述      线性回归拟合一个因变量与一个自变量之间的线性关系y=f(x)y=f(x)。       Spark中实现了:       (1)普通最小二乘法       (2)岭回归(L2正规化)       (3)Lasso(L1

qq_34531825的博客 1万+

机器学习系列1):线性回归(regression)和梯度下降(gradient descent)

前言:最近打算把机器学习的基本算法再梳理一下,看看能不能给我正在研究的Deep Learing找点突破口。这一篇主要介绍回归模型和梯度下降。             PS:由于本人比较懒,所以直接在纸上写下来了!O(∩_∩)O~   大家要是有什么问题请留言给我,希望大家共同学习! 正文:

hanzihan123的专栏 2182

机器学习(二)】模型描述与代价函数

本文是以吴恩达机器学习系列课程为学习对象而作的学习笔记。

PuddleRubbish的博客 263

ML_note_4

YZJincsdn的博客 194

educoder机器学习 --- 线性回归

1关:简单线性回归与多元线性回归 1、BC 2、ABC 3、A 第2关:线性回归的正规方程解 #encoding=utf8 import numpy as np def mse_score(y_predict,y_test): ''' input:y_predict(ndarray):预测值 y_test(ndarray):真实值 ouput:mse(float):mse损失函数值 ''' #********* Begin *********

木右加木 就是木木 5585

机器学习算法之一:线性回归算法

本文系统介绍了线性回归的理论基础与优化方法。主要内容包括:1)回归问题建模基础,区分分类与回归任务,建立线性模型向量化表示;2)误差衡量标准,重点讲解均方误差(MSE)及其数学推导,补充MAE、MAPE等指标;3)损失函数与优化目标,推导梯度下降更新公式,分析学习率影响;4)深入解析最大似然估计与损失函数的关系。文章从数学原理出发,完整呈现了线性回归的理论框架,为理解这一基础机器学习算法提供了扎实的理论基础。

heimaoaitangguo的博客 838

机器学习 --- 线性回归

线性回归是属于机器学习里面的监督学习,与分类问题不同的是,在回归问题中,其目标是通过对训练样本的学习,得到从样本特征到样本标签直接的映射,其中,在回归问题中,样本的标签是连续值。线性回归是一类重要的回归问题。在线性回归中,目标值与特征直接存在线性关系。 本实训项目介绍线性回归模型的类别和性能度量等知识,并基于sklearn线性回归面向解决房价预测问题。 第1关:简单线性回归与多元线性回归 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握:1.简单线性回归

学习日常分享 1万+

线性回归(一)

①特征:预测所依据的自变量称为特征或协变量②标签:试图预测的目标称为标签或目标。

hello_world_juns的博客 975

机器学习——线性回归

线性回归机器学习中最基础且最常用的算法之一,广泛应用于数据建模和预测问题中。线性回归是一种监督学习算法,用于解决回归问题。什么情况下用线性回归呢?那肯定是你发现一类问题的结果数据与受这个问题影响因素呈现线性关系,比如说一般情况下,大部分人在未成年之前的身高受年龄影响且年龄越大身高越高,又比如说企业中广告支出与收入间的关系,等等。

CYTLOVELY的博客 1673

数据挖掘——决策树和K近邻

决策树和K近邻一、线性回归(房价预测)第1关:线性回归算法思想(一)相关知识1>简单线性回归2>多元线性回归(二)编程要求(三)参考答案第2关:动手实现线性回归(一)相关知识1>数据集介绍2>线性回归算法原理模型训练流程正规方程解3>线性回归算法流程(二)编程要求(三)参考代码第3关:衡量线性回归的性能指标(一)相关知识1>前言2>MSE3>RMSE4>MAE5>R-Squared(二)编程要求(三)参考代码二、决策树第1关:决策树算法思想(一)相

zkinglin's blog 4044
上一篇: 最小生成树Kruskal
MichaelSenta
博客等级 码龄6年 14粉丝 8原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值