softmax分类器_[ML] 逻辑回归与 Softmax 回归

Logistic Regression (LR) 译为逻辑回归,但实际上这是一种分类模型(二分类或多分类)。下面精要地把模型中的核心概念、推导梳理一下。本文主要内容如下:

  1. 逻辑回归的概率模型
  2. 逻辑回归的含义
  3. 逻辑回归损失函数的由来
  4. 逻辑回归模型的求解方法 :牛顿法、梯度下降法
  5. 多分类问题的一般处理方法
  6. 多分类逻辑回归的概率模型
  7. Softmax 回归形式推导
  8. 逻辑回归与 Softmax 回归的联系
  9. 过拟合问题的处理

模型引入

二分类问题的 LR 模型是如下的条件概率分布:

实际上,又可以写成:

我们称如下形式的函数为 Sigmoid 函数:

b17fd6f2df5310d5b8bd16c2c399adc6.png

建立模型

实际上,LR 模型是用线性回归模型的结果逼近真实标记 (

) 的对数几率
(log odds,logit). 所谓的几率表示 事件发生的概率
与事件不发生的概率
之比

那么对数几率就是对几率取自然对数的结果

因此,在周老师的西瓜书中称该模型为“对数几率回归”(对率回归).

给定一组训练数据,要求解上述的条件概率分布,可以应用极大似然估计法 (Maximum Likelihood Estimation, MLE) 估计模型的参数。极大似然估计,即是对样本的似然函数

进行求参.

,似然函数为

对数似然函数(求最大化):

其中 ,

,
.

最后的优化问题(转化为最小化):

针对上述最小化问题,采用 Newton method,quasi-Newton method (BFGS, L-BFGS) , conjugate gradient 或者梯度下降法 (引入超参数

) , SGD 等等求都可以。

下面求带正则项 (考虑结构风险) 的目标函数:

最后,有决策函数:

另外,我们称

为 Cross-entropy loss, or log loss.

d5f15a8808ce278dba5110aab5d0ebc1.png

模型求解

牛顿法

其中,

其中,

梯度下降法


K分类问题

多分类问题常用的策略

  • One vs. One

类两两配对,共
个而分类问题,测试新样本的时候,输入到所有的分类器中,得到
个分类结果,结果通过投票产生.
  • One vs. Rest (更适用于类别不互斥情形)

每次取一类做为正类余下样例作为反例来训练

个分类器,即为每个类别
预测
的概率:

最后当输入新的样例

时,选择使得概率最大的类别
作为输出

  • Many vs. Many

每次将若干个类作为正类,若干其他类作为反类。


Multinomial Logistic Regression

更适用于类别互斥情形 (logically separate categories),例如血型,党派

The observed outcomes are the party (Y) chosen by a set of people in an election, and the explanatory variables are the demographic characteristics (X) of each person (e.g. sex, race, age, income, etc.). The goal is then to predict the likely vote of a new voter with given characteristics.

训练

个独立的二分类 LR 模型,选第
类为“pivot”

两边作取指数

各类条件概率之和为1

因此

其中,

,到此为止上式即为《统计学习方法, p80》中所提到的多项 LR 模型.

Softmax Regression

这里我们不用线性回归模型表示对数几率,而是用如下对数线性模型 (log-linear)

其中的

为规范化因子,以确保概率之和为1,两边取指数运算可得

由概率和性质

因此

最后模型为

写成我们常见的形式如下(

替换):

一般将参数

写出矩阵形式:

,
表示数据的维度,
表示类别总数

Softmax Regression 代价函数

其中,

表示指示函数,
为真时取1否则取0.

Softmax Regression 与 logistic regression 的联系

标准的 Softmax 函数定义如下:

而 Softmax 函数可以近似为如下指示函数:

于是

那 Softmax 和我们在 Multinomial Logistic Regression 部分得到的模型是不是等价的呢?答案是的。首先我们有如下的关于 Softmax 函数的旋转不变性质

那么,取

因此

可以转换成

显然这里得到的模型与多项逻辑回归模型一致。


过拟合问题

当讨论到模型的过拟合问题时,不妨对算法的期望泛化误差进行讨论。我们已经知道:泛化误差可以分解为 bias, variance, noise 之和。

偏差 (bias) 衡量模型的期望预测与真实结果的偏离程度(模型的 拟合能力);方差 (variance) 衡量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动(数据变化对模型预测能力)所造成的影响(或者理解为在测试集上的表现)。噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界, 即刻画了学习问题本身的 难度
  • 过拟合:low bias, high variance
  • 欠拟合:high bias, low varience

一般处理方法

  1. 减少特征的数量:人工筛选特征、嵌入式选择
  2. 正则化: 保持所有特征当时减小或者增大特征参数
    ,使得所有变量对最终的预测只贡献一点比例

这里一般采用L1或L2正则化:(损失函数推导见拓展部分)

扩展&总结

二分类问题 LR

Hypothesis function

Cost function

其中


两外还有一种常见的损失函数的形式:([2,3])

需要记住的是,这里的

,用上述极大似然估计推导类似.


Softmax Regression

hypothesis function

决策函数为:


参考文献

[1]李航. 统计学习方法[M]. 清华大学出版社, 2012, p77.

[2] Scikitlearn - LogisticRegression

[3] 沙伊・沙莱夫-施瓦茨, 沙伊・本-戴维. 深入理解机器学习:从原理到算法[M]. 机械工业出版社, 2016, p72.

[4] UFLDL Tutorial - SoftmaxRegression

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,那我们就来实现一个使用softmax逻辑回归的莺尾花分类器。 首先,我们需要导入所需的库和数据集。我们将使用Python的NumPy和Pandas库来处理数据,使用Sklearn库来调用莺尾花数据集。 ```python import numpy as np import pandas as pd from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target ``` 接下来,我们需要将数据集分成训练集和测试集,以便我们可以训练模型并测试其准确性。我们将使用Sklearn库的train_test_split函数进行此操作。 ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 然后,我们需要对输入数据进行标准化处理,以便模型可以更好地学习和收敛。我们将使用Sklearn库的StandardScaler函数来标准化数据。 ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) ``` 现在,我们可以开始构建我们的模型了。我们将使用softmax逻辑回归预测莺尾花的类别。我们将使用Sklearn库的LogisticRegression函数来实现此操作。 ```python from sklearn.linear_model import LogisticRegression model = LogisticRegression(multi_class='multinomial', solver='lbfgs') model.fit(X_train, y_train) ``` 最后,我们可以使用测试集来评估模型的性能。 ```python from sklearn.metrics import accuracy_score y_pred = model.predict(X_test) acc = accuracy_score(y_test, y_pred) print("Accuracy:", acc) ``` 这就是完成了,我们现在可以将所有代码整合到一起。 ```python import numpy as np import pandas as pd from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score iris = load_iris() X = iris.data y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) model = LogisticRegression(multi_class='multinomial', solver='lbfgs') model.fit(X_train, y_train) y_pred = model.predict(X_test) acc = accuracy_score(y_test, y_pred) print("Accuracy:", acc) ``` 希望这可以帮助你开始构建基于softmax逻辑回归分类器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值