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

相关文章

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

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应