# 实现并对比线性分类器与非线性分类器
## 一、分类器简述
### 1.1 线性分类器
分类器将原始数据映射到类别分数的函数(Score Function)上,然后通过损失函数(Loss Function)量化预测分数和真实值标签的差异,再将此转换为一个最小化损失函数的优化问题。
我们假设每一个原始训练数据 $\mathbf{x}^{(i)} \in R_{N,D}$ 都有对应标签 $y_i \in \{1...K\}$,一个原始数据是数据集 $R$ 上的一个有 $D \times 1$ 的向量,标签用一个整数表示,$N$ 时数据样本的个数,$D$ 是一个样本的维度,$K$ 是类别的总数。
首先定义关于分数的函数 $f$,该函数将原始数据映射到每个类的置信度分数上。对于线性分类器(Linear Classifier),这个函数可以表示为:
$$
f(\mathbf{x}^{(i)}, \mathbf{W}, \mathbf{b}) = \mathbf{W}\mathbf{x}^{(i)} + \mathbf{b}
$$
其中 $\mathbf{W}$ 是一个 $K \times D$ 的权重矩阵(Weights),$\mathbf{b}$ 是一个 $K \times 1$ 的偏移向量(Bias Vector),计算结果 $\mathbf{y}$ 同样是一个 $K \times 1$的向量,$y_j$ 表示 $\mathbf{x}^{(i)}$ 对应类别 $j$ 的分数。
线性分类器的训练过程就是通过训练集出一个 $\mathbf W$ 和 $\mathbf b$,测试过程就是测试集使用 $f$ 来得到一个分类分数,再经过一些处理(例如 Softmax)来选出预测的标签。
在实现时,做一个矩阵乘法后添加一个偏置向量相当于给所有输入向量添加一个常数为1的偏置维数,得到 $\mathbf{x'}$ ,它是一个 $(D + 1) \times 1$ 的向量,并将权矩阵扩展一个偏置列得到新矩阵 $\mathbf{W'}$,其大小为 $K \times (D + 1)$ 。因此,在实现时我们可以通过在所有向量上附加一个值为1的维度,就可以只学习一个矩阵,而不是权重矩阵和偏移向量。
![](https://www.writebug.com/myres/static/uploads/2022/9/8/40f8303dde2577a64b063cc51e82af7a.writebug)
### 1.2 Softmax函数和交叉熵损失
首先引入独热向量(One-hot Vector):对一个有 $K$ 中标签的数据集,标签 $y = i$ 可以表示为一个 $K \times 1$ 的向量,其第 $i$ 个位置为 $1$,其余位置为 $0$。
引入 Softmax 函数,它取一个任意分数的向量,将其映射成在0和1之间、总和为1的向量。
$$
softmax_j(\mathbf{z}) = \frac{e^{\mathbf{z}_j}}{\sum_ke^{\mathbf{z}_k}}
$$
得到一种概率上的表示:样本 $\mathbf{x}$ 的标签是 $i$ 的概率为:
$$
f_i(\mathbf{x}) = softmax_j(\mathbf{x'W'}) = \frac{e^{\mathbf{x'W'}_j}}{\sum_ke^{\mathbf{x'W'}_k}}
$$
我们使用交叉熵损失(Cross-Entropy Loss)来衡量样本的损失,其有以下形式,对于样本 $i$:
$$
L(\mathbf{W'}) = -\frac1n\sum_{i=1}^n\sum_{j=1}^Ky_j^{(i)}\log softmax_j(\mathbf{x}'^{(i)}\mathbf{W'})
$$
其中 $y_j^{(i)}$ 指第 $i$ 个样本的标签(独热向量)的第 $j$ 个元素。
### 1.3 随机梯度下降
为了优化 $\mathbf{W'}$,我们使用随机梯度下降(SGD),其原理为:
$$
\frac{df(x)}{dx} = \lim_{h\to 0}\frac{f(x+h)-f(x)}{h}
$$
为提高计算速度,每次选取一部分样本进行梯度计算,即在计算 $f(\mathbf{x}_i, \mathbf{W})$ 时每次只选择一部分样本而非全部样本。
梯度的更新公式为:
$$
\mathbf{W'} = \mathbf{W'} - l \times \frac{\part L(\mathbf{W'})}{\mathbf{W'}}
$$
其中 $l$ 为学习率,可以理解为每一次进行梯度下降的步长,在实际应用中,一般采用自适应的学习率算法如Ada算法或Adam算法而非使用固定学习率。
### 1.4 梯度推导
问题整理如下:
$$
\mathbf{z}^{(n)} = \mathbf{W'x}'^{(n)}\\
softmax_i^{(n)} = \frac{e^{z_i^{(n)}}}{\sum_{j = 1}^Ke^{z_j^{(n)}}} \\
L = \frac1N\sum_{k=1}^{N}L^{(n)} = -\frac1N\sum_{k=1}^{N}\sum_{i = 1}^K y_i^{(n)} \ln(softmax_i^{(n)})
$$
需要计算梯度:
$$
\frac{\part L(\mathbf{W'})}{\part \mathbf{W'}}
$$
根据链式法则:
$$
\frac{\part L(\mathbf{W'})}{\mathbf{W'}} = \frac{\part L}{\part \mathbf{softmax}} \times \frac{\part \mathbf{softmax}}{\part \mathbf{z}} \times \frac{\part\mathbf{z}}{\part\mathbf{W'}}
$$
首先计算$\frac{\part L^{(n)}}{\part softmax_i^{(n)}}$:
$$
\frac{\part L^{(n)}}{\part softmax_j^{(n)}} = \frac{\part(\sum_j y_j^{(n)} \ln softmax_j^{(n)})}{\part softmax_j^{(n)}} = -\sum_jy_j^{(n)}\frac1{softmax_j^{(n)}}
$$
其次计算$\frac{\part softmax_j^{(n)}}{\part z_i^{(n)}}$:
$$
\frac{\part softmax_j^{(n)}}{\part z_i^{(n)}} = \frac{\part(\frac{e^{z_i^{(n)}}}{\sum_ke^{z_k^{(n)}}})}{\part z_i^{(n)}} =
\begin{cases}
\frac{\sum_k e^{z_k^{(n)}}e^{z_i^{(n)}} - (e^{z_i^{(n)}})^2}{\sum_k(e^{z_k^{(n)}})^2} = softmax_i^{(n)}(1-softmax_i^{(n)}), & i = j \\
-\frac{e^{z_j^{(n)}}e^{z_i^{(n)}}}{\sum_k(e^{z_k^{(n)}})^2} = -softmax_i^{(n)}softmax_j^{(n)}, & i \ne j \\
\end{cases}
$$
有$\frac{\part L^{(n)}}{\part z_i^{(n)}}$:其中 $\mathbf{y}^{(n)}$ 是独热向量,有 $\sum_i y_i^{(n)} = 1$
$$
\frac{\part L^{(n)}}{\part z_i^{(n)}} = \sum_jy_j\frac1{softmax_j^{(n)}}\frac{\part softmax_j^{(n)}}{\part z_i^{(n)}}\\
= y_i^{(n)}\frac1{softmax_i^{(n)}}softmax_i^{(n)}(1-softmax_i^{(n)}) + \sum_{j\ne i}\frac{y_j^{(n)}}{softmax_j^{(n)}}softmax_i^{(n)}softmax_j^{(n)}\\
= -y_i^{(n)} + y_i^{(n)}softmax_i^{(n)} +\sum_{i \ne j}y_j^{(n)}softmax_i^{(n)} \\
= -y_i^{(n)}+softmax_i^{(n)}\sum_jy_j = softmax_i^{(n)} - y_i^{(n)}
$$
故有:$\frac{\part L^{(n)}}{\part \mathbf{z}^{(n)}} = \mathbf{softmax}^{(n)} - \mathbf{y}^{(n)} \in \mathbb{R}_{(1 \times K)}$,$\frac{\part L}{\part \mathbf{z}} = \mathbf{softmax} - \mathbf{y} \in \mathbb{R}_{(N \times K)}$
计算$\frac{\part\mathbf{z}}{\part\mathbf{W'}}$:
$$
\frac{\part\mathbf{z}}{\part\mathbf{W'}} = \mathbf{X^T} \in \mathbb{R}_{(K \times D)}
$$
最后计算得到:
$$
\frac{\part L(\mathbf{W'})}{\mathbf{W'}} = \frac1N\mathbf{X}^T (\mathbf{softmax} - \mathbf{y}) \in \mathbb{R}_{(N \times D)}
$$
### 1.5 基于基函数的非线性分类器
可以使用基函数将线性分类器转化为非线性分类器,非线性化后会增加权重矩阵 $\mathbf{W'}$ 的维度,例如基函数:$[\mathbf{x}] \to [\mathbf{x}, \mathbf{x}^2, \mathbf{x}^3]$,权重的大小会从线性的 $(D + 1) \times K$ 增大到 $(3D + 1) \times K$。
将线性分类器通过基函数转化成非线性分类器后,梯度和损失函数的计算没有变化,因为权重参数仍是线性的。
### 1.6 过拟合与正则化
使用正则化(Regularization)的目的是避免对模型对训练数据集过拟合而导致在测试集上的效果变差,常用的正则化方法有L1正则化和L2正则化。
* **L2**:$R(\mathbf{W}) = \sum_k\sum_l \mathbf{W'}_{k,l}^2$
* **L1**:$R(\mathbf{W}) = \sum_k\sum_l |\mathbf{W'}_{k,l}|$
增加正则化的损失函数如下,引入超参数 $\lambda$(正则化强度)
$$
L(\mathbf{W'}) = \frac1N\sum_{i = 1}^N L^{(i)}(f(\mathbf{x}^{(i)},\mathbf{W'}), \mathbf{y}^{(i)}) + \lambda R(\mathbf{W'})
$$
引入正则化后修改梯度的计算:
* **L2**:$\frac{\part L(\mathbf{W'})}{\mathbf{W'}} = \frac1N\mathbf{X}^T (\mathbf{softmax} - \mathbf{y}) + 2\lambda \mathbf{W'} \in \mathbb{R}_{(N \times D)}$
* **L1**:$\frac{\part L(\mathbf{W'})}{\mathbf{W'}} = \frac1N\mathbf{X}^T (\mathbf{softmax} - \mathbf{y}) + \lambda \frac{\mathbf{W'}}{|\mathbf{W'}|} \in \mathbb{R}_{(N \times D)}$
## 二、分类器实现
### 2.1 线性分类器
代码文件:`Code/Classifiers/softmax_classfier.py`。
* **训练函数** `train` 关键代码
``` python
# 为训练集增加偏置维度
bias_x = np.ones(X.shape[0]).reshape(-1, 1)
X = np.concatenate((X, bias_x), axis=1)
loss_history = []
train_num, train_dim = X.shape
class_num = np.max(y) + 1
if self.W is None:
# 初始化时为权重矩阵赋随机值
self.W = np.random.randn(train_dim, class
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
实验实现了Softmax线性分类器和基于基函数的非线性分类器,对于非线性分类器,我们选择了三阶非线性和五阶非线性来进行实验,并对三个数据集 DryBean、RedWine、Obesity进行了各个方面的测试。
资源推荐
资源详情
资源评论
收起资源包目录
基于Python实现并对比线性分类器与非线性分类器【100011718】 (132个子文件)
ObesityDataSet_raw_and_data_sinthetic.arff 257KB
Dry_Bean_Dataset.csv 2.36MB
winequality-white.csv 258KB
ObesityDataSet_raw_and_data_sinthetic.csv 255KB
winequality-red.csv 82KB
Homework1.iml 441B
wb.jpeg 82KB
imagemap.jpg 74KB
LICENSE 1KB
README.md 42KB
winequality.names 3KB
Report.pdf 3.46MB
t_sne_white_wine.png 115KB
t_sne_wine.png 81KB
bean_weight_x5.png 77KB
obes_weight_x5.png 75KB
obes_weight_x5-164769864338610.png 75KB
obes_weight_x3.png 70KB
t_sne_bean.png 67KB
bean_weight_x3.png 66KB
t_sne_obesity.png 58KB
obes_loss_x5.png 53KB
obes_x5_l1_acc.png 48KB
bean_loss.png 47KB
obes_x5_l2_acc.png 47KB
obes_x5_l0_acc.png 46KB
obes_weight.png 46KB
bean_weight-16476977212219.png 45KB
bean_weight.png 45KB
obes_loss_3.png 44KB
obes_loss.png 41KB
CrVad_on_white_nor_nonlinear_x3.png 40KB
obes_x3_l2_acc.png 40KB
wine_x3_l2_acc.png 40KB
obes_x3_l0_acc.png 40KB
wine_x5_l1_acc.png 39KB
CrVad_on_Wine_nor_nonlinear_x5.png 39KB
CrVad_on_Wine_nor_nonlinear_x5-16476963272538.png 39KB
CrVad_on_Wine_nor_linear.png 39KB
CrVad_on_Obes_nor_nonlinear5.png 39KB
CrVad_on_Wine_nor_nonlinear_x3.png 39KB
CrVad_on_Wine_nor_nonlinear_x3-16476963237467.png 39KB
CrVad_on_Bean_nor_nonlinear_x5-16476962583306.png 39KB
CrVad_on_Bean_nor_nonlinear_x5.png 39KB
CrVad_on_Obes_nor_nonlinear_x3.png 39KB
wine_x3_l1_acc.png 39KB
CrVad_on_white_nor_nonlinear_x5.png 38KB
wine_x5_l0_acc.png 38KB
CrVad_on_white_nor_linear.png 38KB
wine_x5_l2_acc.png 37KB
CrVad_on_Obes_lr_linear.png 36KB
obes_x3_l1_acc.png 36KB
CrVad_on_white_lr_nonlinear_x5.png 36KB
bean_loss_x5.png 36KB
wine_x3_l0_acc.png 36KB
wine_l1_acc.png 36KB
wine_l0_acc.png 35KB
bean_x3_l0_acc.png 35KB
CrVad_on_Obes_lr_nonlinear_x5.png 35KB
CrVad_on_Bean_lr_linear-16476956704223.png 34KB
CrVad_on_Obes_nor_nonlinear.png 34KB
obes_l1_acc.png 34KB
obes_l0_acc.png 34KB
bean_x5_l2_acc.png 34KB
wine_l2_acc.png 34KB
bean_loss_x3.png 34KB
obes_softmax_l1.png 34KB
CrVad_on_Bean_lr_nonlinear_x3-16476958010014.png 33KB
CrVad_on_white_lr_nonlinear_x3.png 33KB
CrVad_on_Wine_lr_linear.png 33KB
CrVad_on_Obes_lr_nonlinear_x3.png 33KB
CrVad_on_Wine_lr_nonlinear_x5.png 33KB
CrVad_on_Bean_nor_nonlinear_x3.png 33KB
CrVad_on_Bean_lr_nonlinear_x5-16476961197095.png 33KB
CrVad_on_Bean_nor_linear.png 33KB
CrVad_on_white_lr_linear.png 33KB
CrVad_on_Wine_lr_nonlinear_x3.png 33KB
CrVad_on_Bean_lr_nonlinear_x3.png 32KB
obes_l2_acc.png 32KB
CrVad_on_Bean_lr_linear.png 32KB
bean_softmax_l1.png 31KB
CrVad_on_Bean_lr_nonlinear_x5.png 30KB
Figure_2.png 29KB
bean_x5_l0_acc.png 29KB
Figure_1.png 29KB
bean_x5_l1_acc.png 29KB
obes_x5_pre.png 29KB
obes_x5_pre-16477475774292.png 28KB
obes_x5_rec.png 28KB
obes_softmax_l2.png 28KB
Figure_3.png 28KB
obes_rec.png 28KB
bean_x3_l1_acc.png 28KB
bean_softmax.png 27KB
obes_x3_rec.png 27KB
obes_softmax.png 27KB
obes_pre.png 27KB
obes_x3_pre.png 27KB
bean_softmax_l2.png 27KB
bean_x3_l2_acc.png 27KB
共 132 条
- 1
- 2
资源评论
神仙别闹
- 粉丝: 2672
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学生成绩管理系统-C++版本
- 吉林大学离散数学2笔记.pdf
- 通道处理过程的模拟通常涉及对通道处理机制的理解与实现.txt
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功