DataWhale-西瓜书+南瓜书第3章线性模型学习总结-Task02-202110

2023-12-27 21:58

本文主要是介绍DataWhale-西瓜书+南瓜书第3章线性模型学习总结-Task02-202110,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3.1 基本形式

样本\mathbf{x}=(x_1,x_2,\dots,x_d),其中x_i\mathbf{x}在第i个属性上的取值。线性模型试图学得一个通过属性得线性组合来进行预测得函数,即 

                                              \begin{equation} \begin{aligned} f(\mathbf{x})&=w_1x_1+w_2x_2+\dots+w_dx_d+b\\ &=\mathbf{w}^T\mathbf{x}+b \end{equation} \end{aligned}   

3.2 线性回归 

3.2.1 一元线性回归

均方误差\mathit{E}_{(w,b)}=\sum_{i=1}^m(y_i-wx_i-b)^2最小化,对w和b求导:

                                 \frac{\partial\mathit{E}}{\partial w}=2[w\sum_{i=1}^mx_i^2-\sum_{i=1}^m(y_i-b)x_i]

                                 \frac{\partial\mathit{E}}{\partial b}=2[mb-\sum_{i=1}^m(y_i-wx_i)]

上面两个方程等于0可以得到

                                w=\frac{\sum_{i=1}^m y_i(x_i-\bar{x})}{\sum_{i=1}^mx_i^2-\frac{1}{m}(\sum_{i=1}^mx_i)^2}

                                b=\frac{1}{m}\sum_{i=1}^m(y_i-wx_i)

3.2.2 多元线性回归

m个d个元素得示例,把数据集D表示为一个m\times(d+1)的大小的矩阵\mathbf{X}:

                 

 则均方误差为:

                             \mathit{E}_{\hat{\mathbf{w}}}=(\mathbf{y}-\mathbf{X}\hat{\mathbf{w}})^T(\mathbf{y}-\mathbf{X}\hat{\mathbf{w}})

\hat{\mathbf{w}}求导得到:

                               \frac{\partial\mathit{E_{\hat{\mathbf{w}}}}}{\partial\hat{\mathbf{w}}}=2\mathbf{X}^T(\mathbf{X}\hat{\mathbf{w}}-\hat{\mathbf{y}})

\mathbf{X}^T\mathbf{X}为满秩矩阵或正定矩阵时,上式为0可得:

                              \hat{\mathbf{w}}^*=(\mathbf{X^T}\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y}

代码实现1:

import numpy as np
class LinearRegression:def __init__(self):self._theta = Noneself.intercept_ = Noneself.coef_ = Nonedef fit(self,x_train,y_train):X_b = np.hstack([np.ones((len(x_train),1)), x_train])self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)self.intercept_ = self._theta[0]self.coef_ = self._theta[1:]return selfdef predict(self,x_predict):X_b = np.hstack([np.ones((len(x_predict),1)), x_predict])return X_b.dot(self._theta)

3.2.3 梯度下降法

因为

                                           \frac{\partial\mathit{E_{\hat{\mathbf{w}}}}}{\partial\hat{\mathbf{w}}}=2\mathbf{X}^T(\mathbf{X}\hat{\mathbf{w}}-\hat{\mathbf{y}})

所以

                                     \hat{\mathbf{w}}_{next}=\hat{\mathbf{w}}_{next}-\frac{\eta}{m}\mathbf{X}^T(\mathbf{X}\hat{\mathbf{w}}-\mathbf{y})

 代码实现如下:

import numpy as np alpha = 0.01def cost_function(theta, X, y):diff = np.dot(X, theta) - yreturn (1./(2*m)) * np.dot(np.transpose(diff), diff)def gradient_function(theta, X, y):diff = np.dot(X, theta) - yreturn (1./m) * np.dot(np.transpose(X), diff)def gradient_descent(X, y, alpha):theta = np.ones((X.shape[1]+1,1))gradient = gradient_function(theta, X, y)while not np.all(np.absolute(gradient) <= 1e-5):theta = theta - alpha * gradientgradient = gradient_function(theta, X, y)return theta

3.3 对数几率回归

对于二分类任务,

 使用对数几率函数可以得到:

                                                            y=\frac{1}{1+e^{-(\mathbf{w}^T\mathbf{x}+b)}}

变换后得到:

                                                           \ln\frac{y}{1-y}=\mathbf{w}^T\mathbf{x}+b

将y视为样本x作为正例的可能性,1-y是反例的可能性,则有

                                            p_1=p(y=1|x)=\frac{e^{w^Tx+b}}{1+e^{w^Tx+b}}

                                            p_0=p(y=0|x)=\frac{1}{1+e^{w^Tx+b}}  

为简便计算令\mathbf{\beta}=(\mathbf{w},b),\hat{\mathbf{x}}=(\mathbf{x},1),  对数回归模型的最大化似然函数为:

                                         \mathit{l}(\mathbf{\beta})=\sum_{i=1}^m\ln p(y_i|\hat{\mathbf{x}}_i,\mathbf{\beta})

带入p的表达式:

                         p(y_i|\hat{\mathbf{x}}_i,\mathbf{\beta})=y_ip_1(\hat{\mathbf{x}}_i,\mathbf{\beta})+(1-y_i)p_0(\hat{\mathbf{x}}_i,\mathbf{\beta})

可以得到:

                             \mathit{l}(\mathbf{\beta})=\sum_{i=1}^m[-y_i\beta^T\hat{\mathbf{x}}_i+\ln(1+e^{\beta^T\hat{\mathbf{x}}_i})]

利用这个表达式,可以用梯度下降法求解参数。

这篇关于DataWhale-西瓜书+南瓜书第3章线性模型学习总结-Task02-202110的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义