正规化方程Normal Equations解析

2023-11-02 00:41

本文主要是介绍正规化方程Normal Equations解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  如果需要代做算法,可以联系我...博客右侧有联系方式。

一、正规化方程概念

  假设我们有m个样本。特征向量的维度为n。因此,可知样本为{(x(1),y(1)), (x(2),y(2)),... ..., (x(m),y(m))},其中对于每一个样本中的x(i),都有x(i)={x1(i), xn(i),... ...,xn(i)}。令 H(θ)=θ+ θ1x1 +θ2x+... + θnxn,则有

  若希望H(θ)=Y,则有

  X · θ = Y

  我们先来回忆一下两个概念:单位矩阵 和 矩阵的逆,看看它们有什么性质。

  (1)单位矩阵E

  AE=EA=A

  (2)矩阵的逆A-1

  要求:A必须为方阵

  性质:AA-1=A-1A=E

  再来看看式子 X · θ = Y

  若想求出θ,那么我们需要做一些转换:

  step1:先把θ左边的矩阵变成一个方阵。通过乘以XT可以实现,则有

  XTX · θ = XTY

  step2:把θ左边的部分变成一个单位矩阵,这样就可以让它消失于无形了……

  (XTX)-1(XTX) · θ = (XTX)-1XTY

  step3:由于(XTX)-1(XTX) = E,因此式子变为

  Eθ = (XTX)-1XTY

  E可以去掉,因此得到

  θ = (XTX)-1XTY

  这就是我们所说的Normal Equation了。

二、Normal Equation VS Gradient Descent

  Normal Equation 跟 Gradient Descent(梯度下降)一样,可以用来求权重向量θ。但它与Gradient Descent相比,既有优势也有劣势。

  优势:Normal Equation可以不在意x特征的scale。比如,有特征向量X={x1, x2}, 其中x1的range为1~2000,而x2的range为1~4,可以看到它们的范围相差了500倍。如果使用Gradient Descent方法的话,会导致椭圆变得很窄很长,而出现梯度下降困难,甚至无法下降梯度(因为导数乘上步长后可能会冲出椭圆的外面)。但是,如果用Normal Equation方法的话,就不用担心这个问题了。因为它是纯粹的矩阵算法。

  劣势:相比于Gradient Descent,Normal Equation需要大量的矩阵运算,特别是求矩阵的逆。在矩阵很大的情况下,会大大增加计算复杂性以及对计算机内存容量的要求。

  什么情况下会出现Normal Equation,该如何应对?

  (1)当特征向量的维度过多时(如,m <= n 时)

   解决方法:① 使用regularization方式

     or ②delete一些特征维度

  (2)有redundant features(也称为linearly dependent feature)

  例如, x1= size in feet2

    x2 = size in m2

  feet和m的换算为 1m≈3.28feet所以,x1 ≈ 3.28* x2, 因此x1和x2是线性相关的(也可以说x1和x2之间有一个是冗余的)

  解决方法:找出冗余的特征维度,删除之。

三、例子

  y(i)表示价格,x(i)表示房屋面积和房间数:

  样本数m=47。

  step1:对数据进行预处理

  给每一个x向量,都增加一个x0=1的分量。

m = 47;
x=[ones(m,1),ex3x];

  查看x矩阵:

  step2:带入normal equation公式θ = (XTX)-1XTY,求解权重向量。

 y=ex3y;theta = inv(x'*x)*x'*y;

求得θ向量为

  如果我想预计“1650-square-foot house with 3 bedrooms”的价格,那么由X * θ = Y可知:

price = [1,1650,3]* theta ;

  我们取消matlab中的科学计数法,看看price的价格是多少:

>> format long g
>> price

  price =  293081.464334897

  我们在给出的样本中,找一个接近的样本比比看:

  23号样本的房屋面积为1604,房间数也为3,它的价格为

  我们可以尝试画出H(θ)函数的图像看看:

  先分别用min和max函数找出房屋面积(x1)和房间个数(x2)的最大和最小值,有

  x1∈[852,4478]

  x2∈[1,5]

x1=linspace(852,4478,47);
x2=linspace(1,5,47);
[xx1,xx2]=meshgrid(x1,x2);
h_theta = theta(1)*ones(47,47) + theta(2)*xx1 + theta(3)*xx2;
surf(xx1,xx2,h_theta);

  可以看到H(θ)为如下平面:

   梯度下降需要预先确定学习速率、迭代次数,和数据规范化  Feature Scaling。

这篇关于正规化方程Normal Equations解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/326922

相关文章

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

java中的HashSet与 == 和 equals的区别示例解析

《java中的HashSet与==和equals的区别示例解析》HashSet是Java中基于哈希表实现的集合类,特点包括:元素唯一、无序和可包含null,本文给大家介绍java中的HashSe... 目录什么是HashSetHashSet 的主要特点是HashSet 的常用方法hasSet存储为啥是无序的

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用