逻辑回归

本文本文所述内容,参考了机器学习实战:基于Scikit-Learn和TensorFlow一书。
从上往下,本文的代码可完整运行。

逻辑回归(Logistic回归,也称为罗吉思回归)被广泛用于估算一个实例属于某个特定类别的概率。

概率估算

  1. 逻辑回归模型概率估算(向量化形式)
    y ∧ = h θ ( X ) = σ ( θ T ⋅ X ) \mathop y\limits^ \wedge = {h_\theta }(X) = \sigma ({\theta ^T} \cdot X) y=hθ(X)=σ(θTX)
  2. 逻辑函数
    σ ( t ) = 1 1 + exp ⁡ ( − t ) \sigma (t) = {1 \over {1 + \exp ( - t)}} σ(t)=1+exp(t)1
    逻辑函数
  3. 逻辑回归模型预测
    逻辑回归模预测当t<0时,σ(t)<0.5;当t≥0时,σ(t)≥0.5。所以如果θT·x是正类,逻辑回归模型预测结果是1,如果是负类,则预测为0。

训练和成本函数

  1. 单个训练实例的成本函数
    单个实例的成本函数
  2. 逻辑回归成本函数(log损失函数)
    逻辑回归成本函数
  3. 逻辑回归成本函数偏导数
    ∂ ∂ θ j J ( θ ) = 1 m ∑ i = 1 m ( σ ( θ T ⋅ X ( i ) ) − y ( i ) ) x j ( i ) {\partial \over {\partial {\theta _j}}}J(\theta ) = {1 \over m}\sum\nolimits_{{\rm{i}} = 1}^m {(\sigma ({\theta ^T} \cdot {X^{(i)}}) - {y^{(i)}}){x_j}^{(i)}} θjJ(θ)=m1i=1m(σ(θTX(i))y(i))xj(i)
    计算出每个实例的预测误差,并将其乘以第j个特征值,然后再对所有训练实例求平均值。

决策边界

用鸢尾植物数据集来说明逻辑回归。共有150朵鸢尾花,分别来自三个不同品种:Setosa鸢尾花、Versicolor鸢尾花和Virginica鸢尾花,数据里包含花的萼片以及花瓣的长度和宽度。
不同品种的鸢尾花基于花瓣长度来创建分类器:

from sklearn import datasets
import numpy as np
import matplotlib.pyplot as plt

iris = datasets.load_iris()
print(list(iris))  # ['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename']

X = iris["data"][:, 3:]  # petal width
y = (iris['target'] == 2).astype(np.int)  # 1 if Iris-Virginica, else 0

from sklearn.linear_model import LogisticRegression

log_reg = LogisticRegression()
log_reg.fit(X, y)
# 花瓣长度在0-3cm
X_new = np.linspace(0, 3, 1000).reshape(-1, 1)
y_proba = log_reg.predict_proba(X_new)
plt.plot(X_new, y_proba[:, 1], 'g-', label="Iris-Virginica")
plt.plot(X_new, y_proba[:, 0], 'b--', label="Not Iris-Virginica")
plt.xlabel('petal width')
plt.ylabel("Probability")
plt.legend()
plt.show()

估算概率和决策边界Virginica鸢尾花的花瓣宽度范围为1.4~2.5厘米,而其他两种鸢尾花花瓣通常较窄,花瓣宽度范围为0.1~1.8厘米。对花瓣宽度超过2cm的花,分类器可以很有信心地说它是一朵Virginica鸢尾花(对该类别输出一个高概率值),对花瓣宽度低于1cm以下的,也可以胸有成竹地说其不是(对“非Virginica鸢尾花”类别输出一个高概率值)。但在这两者之间分类器却不是很有把握。在大约1.6厘米处存在一个决策边
界,这里“是”和“不是”的可能性都是50%。

print(log_reg.predict([[1.7], [1.5]]))   # [1 0]

使用花瓣宽度和花瓣长度两个特征,虚线表示模型估算概率为
50%的点,即模型的决策边界。使方程θ0+θ1x1+θ2x2=0的点x的集合,这个方程定义的是一条直线。)从左下的15%到右上的90%。根据这个模型,右上线之上的所有花朵,都有超过90%的概率属于Virginica鸢尾花。
线性决策边界逻辑回归模型可以用l1l2惩罚函数来正则化。Scikit-Learn默认添加的是l2函数。

log_reg = LogisticRegression(C=0.2)                # 其他线性模型使用alpha

Softmax回归

逻辑回归模型可以直接支持多个类别,即多元逻辑回归。
对于一个给定的实例x,Softmax回归模型首先计算出每个类别k的分数sk(x),然后对这些分数应用softmax函数(也叫归一化指数),估算出每个类别的概率。

  1. 类别k的Softmax分数
    s k ( X ) = θ k T ⋅ X {s_k}(X) = \theta _k^T \cdot X sk(X)=θkTX
    每个类别都有自己特定的参数向量θk。所有这些向量通常都作为行存储在参数矩阵Θ中。
  2. Softmax函数
    p k ∧ = σ ( s ( X ) ) k = exp ⁡ ( s k ( X ) ) ∑ j = 1 k exp ⁡ ( s j ( X ) ) {\mathop p\limits^ \wedge _k} = \sigma {(s(X))_k} = {{\exp ({s_k}(X))} \over {\sum\limits_{j = 1}^k {\exp ({s_j}(X))} }} kp=σ(s(X))k=j=1kexp(sj(X))exp(sk(X))
  3. Softmax回归分类器预测
    Softmax回归分类器预测训练目标是得到一个能对目标类别做出高概率估算的模型(也就是其他类别的概率相应要很低)。
  4. 交叉熵成本函数
    J ( Θ ) = − 1 m ∑ i = 1 m ∑ k = 1 K [ y k ( i ) log ⁡ ( p k ∧ ( i ) ) ] J(\Theta ) = - {1 \over m}\sum\limits_{i = 1}^m {\sum\limits_{k = 1}^K {[{y_k}^{(i)}\log ({{\mathop {{p_k}}\limits^ \wedge }^{(i)}})]} } J(Θ)=m1i=1mk=1K[yk(i)log(pk(i))]
    如果第i个实例的目标类别为k,则 y k ( i ) {{y_k}^{(i)}} yk(i) 等于1,否则为0。当只有两个类别(K=2)时,该成本函数等价于逻辑回归的成本函数(log损失函数)。
  5. 对于类别k的交叉熵梯度向量
    ∇ θ k J ( Θ ) = 1 m ∑ i = 1 m ( p k ∧ ( i ) − y k ( i ) ) X ( i ) {\nabla _{{\theta _k}}}J(\Theta ) = {1 \over m}\sum\nolimits_{{\rm{i}} = 1}^m {({{\mathop {{p_k}}\limits^ \wedge }^{(i)}} - {y_k}^{(i)}){X^{(i)}}} θkJ(Θ)=m1i=1m(pk(i)yk(i))X(i)
    可以计算出每个类别的梯度向量,然后使用梯度下降(或任意其他优化算法)找到最小化成本函数的参数矩阵Θ。
X = iris['data'][:, (2, 3)]  # # petal length, petal width
y = iris["target"]
# 的LogisticRegressio默认选择使用的是一对多的训练方式,以下为softmax回归,默认l2正则
softmax_reg = LogisticRegression(multi_class="multinomial", solver='lbfgs', C=0.2)
softmax_reg.fit(X, y)
print(softmax_reg.predict([[5, 2]]))  # [2]
print(softmax_reg.predict_proba([[5, 2]]))  # [[0.00454305 0.34143078 0.65402617]]

Softmax回归决策边界

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值