机器学习————逻辑(logistic)回归

目录

一、logistics回归

1.1 概述

1.2 线性模型与回归

1.2 最小二乘法与参数求解

1.3 Sigmoid函数

1.4 梯度上升法

二、代码实现

2.1 数据集介绍

2.2 实现

2.3 结果

三、总结

3.1 优点

3.2 缺点

一、logistics回归

1.1 概述

logistic回归是一种二分类多分类概率型非线性回归模型,用于研究因变量与影响因素之间的关系。
主要思想是根据现有数据对分类边界线建立回归公式,从而进行分类。与线性回归不同的是,logistics回归的目标是找到最佳拟合参数,以便对不同特征赋予不同的权重

1.2 线性模型与回归

线性模型的一般形式为:

f(x)=w_1x_1+w_2x_2+...+w_dx_d+b


向量化表示为:

f(x)=w^Tx+b

其中x为d维属性描述样本为:

x=(x_1,x_2,\ldots\ldots,x_d)

目的
学习一个线性模型以尽可能准确预测实值输出

f(x)=wx_i+b\simeq y_i

1.2 最小二乘法与参数求解

线性回归目标:回归预测值与真实值的误差最小。公式表示为:

(w^*, b^*)=arg\min_{(w,b)}\sum_{i=1}^m(y_i-f(x_i))^2=arg\min_{(w,b)}\sum_{i=1}^m(y_i-wx_i-b)^2

分别对w和b求偏导得到

\frac{\partial E_{(w,b)}}{\partial w}=2(w\sum_{i=1}^mx_i^2-\sum_{i=1}^m(y_i-b)x_i)=0

<think>我们被要求生成支持向量回归(SVR)的示意图,并参考了提供的引用内容。根据引用[2]和引用[3],支持向量回归的核心思想是构建一个间隔带(通常称为ε-管道),在这个间隔带内的点被视为预测正确,而位于间隔带之外的点则为支持向量,并计入损失。 引用[2]中描述:“以f(x)为中心,构建了一个宽为ε的间隔带,若训练样本落在此间隔带中,则认为被预测正确。”同时,引用[3]提供了更详细的支持向量分类:管道内的样本(对应a=0,非支持向量)、位于管壁上的边界支持向量(0<a<ε)和管道之外的非边界支持向量(a>ε)。 因此,我们需要绘制一个示意图来展示: 1. 回归线(即模型预测函数f(x)) 2. 上间隔边界(f(x)+ε)和下间隔边界(f(x)-ε)构成的间隔带 3. 数据点,并标注:位于间隔带内的点(非支持向量),位于间隔带边界上的点(边界支持向量),以及位于间隔带外的点(非边界支持向量,这些点将产生损失) 由于我们无法直接绘图,我们将用文字描述示意图的内容,并建议使用绘图工具(如matplotlib)生成类似引用[5]中的图,但引用[5]中的图是不同参数下的SVR拟合效果,并不是标准的SVR示意图。 为了更直观,我们可以参考如下描述绘制: 示意图描述: - 横轴为特征x,纵轴为目标y。 - 绘制一条平滑的曲线(或直线,如果是线性核)作为回归线(f(x))。 - 在回归线的上方距离ε处绘制一条平行线(上边界),在下方距离ε处绘制一条平行线(下边界),这两条线构成一个间隔带。 - 绘制一些数据点: 1. 大部分点位于间隔带内(这些点没有损失,非支持向量)。 2. 一些点正好落在上边界或下边界上(边界支持向量)。 3. 少数点位于间隔带之外,这些点将引起损失(非边界支持向量),并且我们使用松弛变量ξ(或ξ_i, ξ_i^*)来衡量这些点到间隔带的距离。 注意:在SVR中,每个在间隔带外的点都会有两个松弛变量(一个对应上界,一个对应下界),但在图示中,我们通常只画出点到间隔带的垂直距离。 由于引用[3]提到,位于“管道”内样本对应a=0(非支持向量);位于“管壁”上的为边界支持向量(0<a<ε);位于“管道”之外的为非边界支持向量(a>ε)。这里a指的是拉格朗日乘子。 因此,我们可以生成一个简单的示意图(用文字描述,并建议用绘图代码生成)。 另外,引用[5]提供了使用sklearn的SVR进行回归并绘图的Python代码,我们可以调整代码来生成一个示意图,但需要调整参数以突出间隔带和支持向量。 由于我们无法实际运行代码,我们将提供一段修改后的代码,用于生成支持向量回归的示意图,并标注支持向量和间隔带。 修改引用[5]的代码,增加显示间隔带和支持向量: ```python import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVR # 生成样本数据 np.random.seed(0) X = np.sort(5 * np.random.rand(40, 1), axis=0) y = np.sin(X).ravel() # 添加噪声 y[::5] += 3 * (0.5 - np.random.rand(8)) # 创建SVR模型,使用线性核以便清晰显示间隔带,但实际常用RBF核,这里为了演示清晰,我们使用线性核 # 也可以尝试RBF核,但线性核的间隔带是直线,更易理解 svr = SVR(kernel='linear', C=100, epsilon=0.2) # 设置间隔带宽度为0.2 y_svr = svr.fit(X, y).predict(X) # 获取支持向量 support_vectors = svr.support_vectors_ # 计算间隔带的上边界和下边界 # 对于线性核,我们可以直接得到w和b w = svr.coef_[0] b = svr.intercept_[0] # 计算上下边界:f(x)±epsilon upper_bound = np.dot(X, w) + b + svr.epsilon lower_bound = np.dot(X, w) + b - svr.epsilon # 绘制数据点 plt.scatter(X, y, color='darkorange', label='data') # 绘制回归线 plt.plot(X, y_svr, color='blue', lw=2, label='SVR regression line') # 绘制上边界(虚线) plt.plot(X, upper_bound, 'k--', lw=1, label='upper bound (f(x))') # 绘制下边界(虚线) plt.plot(X, lower_bound, 'k--', lw=1, label='lower bound (f(x))') # 填充间隔带 plt.fill_between(X.ravel(), lower_bound.ravel(), upper_bound.ravel(), alpha=0.2, color='gray') # 标记支持向量 plt.scatter(support_vectors, svr.predict(support_vectors), color='red', s=100, facecolors='none', edgecolors='r', label='support vectors') plt.xlabel('data') plt.ylabel('target') plt.title('Support Vector Regression') plt.legend() plt.show() ``` 注意:上述代码使用线性核,因为线性核的间隔带是两条平行直线,容易理解。但在实际问题中,我们可能使用非线性核(如RBF)。使用非线性核时,间隔带不再是平行线,而是曲线。但示意图的原理相同。 运行上述代码将得到: - 蓝色实线:回归线(即f(x)) - 灰色虚线:上下边界(间隔带边界) - 灰色填充:间隔带(ε-管道) - 红色圆圈:支持向量(位于间隔带外或边界上的点) 这样,我们就生成了支持向量回归的示意图。 然而,请注意,由于SVR的间隔带宽度是2ε(因为上下边界各偏离回归线ε),所以整个管道的宽度是2ε。 另外,引用[4]提到了SVR的原始问题和对偶问题,以及松弛变量ξ_i, ξ_i^*,但在示意图中我们主要关注间隔带和支持向量的位置。 因此,我们通过文字描述和示例代码,展示了支持向量回归的示意图。 §§相关问题§§ 1. 支持向量回归中ε参数的作用是什么? 2. 如何选择支持向量回归的核函数? 3. 支持向量回归中的松弛变量有什么作用? </think> ### 支持向量回归示意图解析 支持向量回归(SVR)的核心是构建一个宽度为 $\epsilon$ 的**间隔带**($\epsilon$-管道),示意图的关键要素如下(基于引用[2][3][4]): 1. **回归线(决策函数)** 中心蓝色实线表示回归函数 $f(x) = \mathbf{w} \cdot \mathbf{x} + b$,即预测值。 2. **间隔带边界** - 上边界:$f(x) + \epsilon$(虚线) - 下边界:$f(x) - \epsilon$(虚线) - 间隔带宽度固定为 $2\epsilon$,由 $\epsilon$ 参数控制。 3. **样本点分类** - ✅ **非支持向量**:位于间隔带内($\left| y_i - f(x_i) \right| \leq \epsilon$) $\to$ 无损失,对应拉格朗日乘子 $\alpha_i = 0$[^3]。 - ⚠️ **边界支持向量**:位于间隔带边界上($\left| y_i - f(x_i) \right| = \epsilon$) $\to$ $0 < \alpha_i < \epsilon$[^3]。 - ❌ **非边界支持向量**:位于间隔带外($\left| y_i - f(x_i) \right| > \epsilon$) $\to$ 产生松弛变量 $\xi_i > 0$,损失计入优化目标[^4]。 ```mermaid graph LR A[输入数据] --> B[构建间隔带 f(x)±ε] B --> C{样本位置判断} C -->|间隔带内| D[非支持向量 α=0] C -->|间隔带边界| E[边界支持向量 0<α<ε] C -->|间隔带外| F[非边界支持向量 α>ε] F --> G[引入松弛变量ξ>0] ``` ### 示意图示例(Python代码) 以下代码生成SVR示意图(修改自引用[5]): ```python import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVR # 生成样本数据 X = np.sort(5 * np.random.rand(40, 1), axis=0) y = np.sin(X).ravel() y[::5] += 0.5 * np.random.randn(8) # 添加噪声 # 训练SVR模型(ε=0.2) svr = SVR(kernel='rbf', C=100, epsilon=0.2) svr.fit(X, y) y_pred = svr.predict(X) # 计算间隔带边界 epsilon = svr.epsilon upper_bound = y_pred + epsilon lower_bound = y_pred - epsilon # 绘制示意图 plt.figure(figsize=(10, 6)) plt.scatter(X, y, c='darkorange', label='样本点') plt.plot(X, y_pred, 'b-', lw=2, label='回归线 f(x)') plt.plot(X, upper_bound, 'k--', lw=1, label=f'上边界 f(x)(ε={epsilon})') plt.plot(X, lower_bound, 'k--', lw=1, label=f'下边界 f(x)-ε') plt.fill_between(X.ravel(), lower_bound, upper_bound, alpha=0.2, color='gray', label='ε-间隔带') # 标记支持向量 plt.scatter(svr.support_vectors_, svr.predict(svr.support_vectors_), s=100, facecolors='none', edgecolors='r', label='支持向量') plt.xlabel('特征 x') plt.ylabel('目标值 y') plt.title('支持向量回归 (SVR) 示意图') plt.legend() plt.show() ``` **输出效果**: ![SVR示意图](https://via.placeholder.com/600x400?text=SVR示意图示例) *(实际运行会显示:蓝色回归线、灰色间隔带、红色圈出的支持向量)* ### 关键特性说明 1. **间隔带原理** 仅当 $|f(x_i) - y_i| > \epsilon$ 时计算损失,避免对微小误差敏感[^2]。 2. **松弛变量 $\xi$** 间隔带外的点需满足: $y_i - f(x_i) \leq \epsilon + \xi_i$ $f(x_i) - y_i \leq \epsilon + \xi_i^*$ $\xi_i, \xi_i^* \geq 0$[^4] 3. **支持向量作用** 只有边界内外的样本(支持向量)参与确定回归线,其他点不影响模型[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值