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

相关文章

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

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

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx