sigmoid函数

sigmoid函数不是臆想的,而是通过假设推出来的函数。
对于多分类,假设似然率的对数为线性判别函数:
log⁡(p(x∣ωi)p(x∣ωM))=βi,0+βiTx,i=1,2,...,M\log(\frac{p(x|\omega_{i})}{p(x|\omega_{M})})=\beta_{i,0}+\beta_{i}^{T}x,i=1,2,...,Mlog(p(x∣ωM​)p(x∣ωi​)​)=βi,0​+βiT​x,i=1,2,...,M
⇒log⁡(p(ωi∣x)p(ωM∣x))=wi,0+wiTx,i=1,2,...,M\Rightarrow \log(\frac{p(\omega_{i}|x)}{p(\omega_{M}|x)})=w_{i,0}+w_{i}^{T}x,i=1,2,...,M⇒log(p(ωM​∣x)p(ωi​∣x)​)=wi,0​+wiT​x,i=1,2,...,M

针对如上结果,二分类问题的概率为:
p(ω2∣x)=11+exp(w0+wTx)p(\omega_{2}|x)=\frac{1}{1+exp(w_{0}+w^{T}x)}p(ω2​∣x)=1+exp(w0​+wTx)1​
p(ω1∣x)=exp(w0+wTx)1+exp(w0+wTx)=11+exp(−(w0+wTx))p(\omega_{1}|x)=\frac{exp(w_{0}+w^{T}x)}{1+exp(w_{0}+w^{T}x)}=\frac{1}{1+exp(-(w_{0}+w^{T}x))}p(ω1​∣x)=1+exp(w0​+wTx)exp(w0​+wTx)​=1+exp(−(w0​+wTx))1​

理论讲解

对于二分类问题,输出标记为y∈{0,1}y \in \{0, 1 \}y∈{0,1},0表示负向类,1表示正向类。logistic regression不是一个回归问题,而是一个分类问题。需要通过一个函数将线性回归模型wTx+bw^{T}x+bwTx+b的输出值映射到[0,1][0,1][0,1]范围内,这个函数就是对数几率函数(logistic function),也称为sigmoid函数:ϕ(z)=11+e−z\phi(z)=\frac{1}{1+e^{-z}}ϕ(z)=1+e−z1​
对某个样本xxx,预测概率为y=11+e−(wTx+b)y=\frac{1}{1+e^{-(w^{T}x+b)}}y=1+e−(wTx+b)1​,即wTx+b=ln⁡y1−yw^{T}x+b=\ln\frac{y}{1-y}wTx+b=ln1−yy​,其中yyy是样本正例的可能性,1−y1-y1−y是反例可能性,y1−y\frac{y}{1-y}1−yy​作为正例的相对可能性,成为几率。对几率取对数则得到了对数几率ln⁡y1−y\ln\frac{y}{1-y}ln1−yy​
对于线性回归问题,定义的函数为所有模型误差的平方和。但是对于逻辑回归来说,这样定义所得的代价函数为非凸函数,容易陷入局部最优。代价函数为:J(w)=1m∑i=1m[−y(i)log⁡(ϕ(z(i)))−(1−y(i))log⁡(1−ϕ(x(i)))]J(w)=\frac{1}{m} \sum_{i=1}^{m}[-y^{(i)}\log(\phi(z^{(i)}))-(1-y^{(i)})\log(1-\phi(x^{(i)}))]J(w)=m1​i=1∑m​[−y(i)log(ϕ(z(i)))−(1−y(i))log(1−ϕ(x(i)))]
J(ϕ(z),y){−log⁡(ϕ(z))ify=1−log⁡(1−ϕ(z))ify=0J(\phi(z),y)\left\{\begin{matrix} -\log(\phi(z)) \ \ \ if\ y=1\\ -\log(1-\phi(z)) \ \ \ if \ y=0 \end{matrix}\right.J(ϕ(z),y){−log(ϕ(z))   if y=1−log(1−ϕ(z))   if y=0​

如图所示。若样本正确被划分为类别1中,代价将趋向于0;若样本正确被划分为类别0中,代价将趋向于0;反正将趋向于无穷大
代价函数的推导:
在构建模型时,定义最大似然函数L(w)L(w)L(w),最大似然函数的入门参照:https://blog.csdn.net/winycg/article/details/80294225,公式如下:
L(w)=∏i=1np(y(i)∣x(i);w)=∏i=1n(ϕ(z(i)))y(i)(1−ϕ(z(i))))1−y(i)L(w)=\prod_{i=1}^{n}p(y^{(i)}|x^{(i)};w)=\prod_{i=1}^{n}(\phi(z^{(i)}))^{y^{(i)}}(1-\phi(z^{(i)})))^{1-y^{(i)}}L(w)=i=1∏n​p(y(i)∣x(i);w)=i=1∏n​(ϕ(z(i)))y(i)(1−ϕ(z(i))))1−y(i)
将其取对数似然方程:
log⁡L(w)=∑i=1n[y(i)log⁡(ϕ(z(i)))+(1−y(i))log⁡(1−ϕ(z(i)))]\log L(w)=\sum_{i=1}^{n}[y^{(i)}\log(\phi(z^{(i)}))+(1-y^{(i)})\log(1-\phi(z^{(i)}))]logL(w)=i=1∑n​[y(i)log(ϕ(z(i)))+(1−y(i))log(1−ϕ(z(i)))]
样本的最大似然函数值log⁡L(θ)\log L(\theta)logL(θ)越大,表明预测越准确。在似然函数值非常小的时候,使用对数函数可以避免数值溢出;其次可以将各因子的连乘转换为和的形式,便于求导。将L(w)L(w)L(w)取反,就可以得到误差函数J(θ)=−1nlog⁡L(w)J(\theta)=-\frac{1}{n}\log L(w)J(θ)=−n1​logL(w)

梯度下降更新公式推导:
首先计算sigmoid函数的偏导:
∂∂zϕ(z)=e−z(1+e−z)2=11+e−z(1−11+e−z)=ϕ(z)(1−ϕ(z))\frac{\partial }{\partial z}\phi(z)=\frac{e^{-z}}{(1+e^{-z})^{2}}=\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}})=\phi(z)(1-\phi(z))∂z∂​ϕ(z)=(1+e−z)2e−z​=1+e−z1​(1−1+e−z1​)=ϕ(z)(1−ϕ(z))
计算对数似然函数对第jjj个权重的偏导:
∂∂wjJ(w)=−1n∑i=1n[y(i)1ϕ(z(i))ϕ(z(i))(1−ϕ(z(i)))xji−(1−y(i))11−ϕ(z(i))ϕ(z(i))(1−ϕ(z(i)))xji]=−1n∑i=1n[y(i)(1−ϕ(z(i)))xji−(1−y(i))ϕ(z(i))xji]=1n∑i=1n[ϕ(z(i))−y(i)]xji\frac{\partial }{\partial w_{j}}J(w) \\ =-\frac{1}{n}\sum_{i=1}^{n}[y^{(i)}\frac{1}{\phi(z^{(i)}) }\phi(z^{(i)})(1-\phi(z^{(i)}))x_{j}^{i} - (1-y^{(i)})\frac{1}{1-\phi(z^{(i)})}\phi(z^{(i)})(1-\phi(z^{(i)}))x_{j}^{i}] \\ =-\frac{1}{n}\sum_{i=1}^{n}[y^{(i)}(1-\phi(z^{(i)}))x_{j}^{i} - (1-y^{(i)})\phi(z^{(i)})x_{j}^{i}] \\ =\frac{1}{n}\sum_{i=1}^{n}[\phi(z^{(i)})-y^{(i)}] x_{j}^{i}∂wj​∂​J(w)=−n1​i=1∑n​[y(i)ϕ(z(i))1​ϕ(z(i))(1−ϕ(z(i)))xji​−(1−y(i))1−ϕ(z(i))1​ϕ(z(i))(1−ϕ(z(i)))xji​]=−n1​i=1∑n​[y(i)(1−ϕ(z(i)))xji​−(1−y(i))ϕ(z(i))xji​]=n1​i=1∑n​[ϕ(z(i))−y(i)]xji​
wj:=wj−η∂J(w)∂wj=wj−η∑i=1n[ϕ(z(i))−y(i)]xjiw_{j}:=w_{j}-\eta \frac{\partial J(w)}{\partial w_{j}}=w_{j}-\eta \sum_{i=1}^{n}[\phi(z^{(i)})-y^{(i)}] x_{j}^{i}wj​:=wj​−η∂wj​∂J(w)​=wj​−ηi=1∑n​[ϕ(z(i))−y(i)]xji​

多类别分类

现在我们有一个训练集, 好比上图表示的有三个类别, 我们用三角形表示 y=1, 方框表示 y=2, 叉叉表示 y=3。 我们下面要做的就是使用一个训练集, 将其分成三个二元分类问题。
先从用三角形代表的类别 1 开始, 实际上我们可以创建一个, 新的"伪"训练集, 类型 2 和类型 3 定为负类, 类型 1 设定为正类, 我们创建一个新的训练集, 如下图所示的那样, 我们要拟合出一个合适的分类器。

这里的三角形是正样本, 而圆形代表负样本。 可以这样想, 设置三角形的值为 1, 圆形的值为 0, 下面我们来训练一个标准的逻辑回归分类器, 这样我们就得到一个正边界。
为了实现这样的转变,将多个类中的一个类标记为正向类(y=1y=1y=1),然后将其他所有类都标记为负向类,此模型记为ϕ(1)(z)\phi^{(1)}(z)ϕ(1)(z)。类似地第我们选择另一个类标记为正向类y=2y=2y=2,再将其它类都标记为负向类,将这个模型记作ϕ(2)(z)\phi^{(2)}(z)ϕ(2)(z),依次类推
最后得到的一系列模型记为:ϕ(k)(z)=p(y=k∣x;w),k=1,2,3,⋯\phi^{(k)}(z)=p(y=k|x;w),k=1,2,3,\cdotsϕ(k)(z)=p(y=k∣x;w),k=1,2,3,⋯
需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。即让3个分类器都输入xxx,选择一个使得ϕ(k)(z)\phi^{(k)}(z)ϕ(k)(z)最大的kkk,即max⁡kϕ(k)(z)\max_{k} \phi^{(k)}(z)kmax​ϕ(k)(z)
#利用scikit-learn实现逻辑回归
在模型中,使用了L2正则化防止过拟合并减少模型复杂度,即误差函数为:
J(w)=−1n∑i=1n[y(i)log⁡(ϕ(z(i)))+(1−y(i))log⁡(1−ϕ(z(i)))]+λ2n∑j=1nwjJ(w)=-\frac{1}{n}\sum_{i=1}^{n}[y^{(i)}\log(\phi(z^{(i)}))+(1-y^{(i)})\log(1-\phi(z^{(i)}))]+\frac{ \lambda}{2n}\sum_{j=1}^{n}w_{j}J(w)=−n1​i=1∑n​[y(i)log(ϕ(z(i)))+(1−y(i))log(1−ϕ(z(i)))]+2nλ​j=1∑n​wj​,一般偏置项w0w_{0}w0​不做正则化处理,λ\lambdaλ为正则化系数。Logistic regression模型中的CCC为正则化系数的倒数:C=1λC=\frac{1}{\lambda}C=λ1​
在多类别分类数据集上使用Logistic Regression对象,默认使用一对多(One-vs-Rest, OvR)的方法。一共有3个截距项,其中第一个截距项为类别0相对于类别1,2的匹配结果,第二个截距项为类别1相对于类别0,2的匹配结果,第三个截距项为类别2相对于类别0,1的匹配结果。
权重数组包含三个权重系数向量,每一个权重向量对应一个分类。由于样本包含2个特征值,所以每个向量包括2个权重值,通过与数据集中的特征数据相乘来计算模型的净输入:z=w1x1+w2x2+bz=w_{1}x_{1}+w_{2}x_{2}+bz=w1​x1​+w2​x2​+b

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression# test_idx为测试数据编号
def plot_decision_regions(X, y, classifier, test_idx=None):# setup marker generator and color mapmarkers = ('s', 'x', 'o', '^', 'v')colors = ('red', 'blue', 'lightgreen', 'grey', 'cyan')cmap = ListedColormap(colors[:len(np.unique(y))])# plot the decision regionx1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, 0.02), np.arange(x2_min, x2_max, 0.02))z = classifier.predict(np.array([xx1.flatten(), xx2.flatten()]).T)z = z.reshape(xx1.shape)plt.contourf(xx1, xx2, z, cmap=cmap, alpha=0.3)plt.xlim(x1_min, x1_max)plt.ylim(x2_min, x2_max)# plot class samplesfor idx, cl in enumerate(np.unique(y)):plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1], cmap=cmap(idx), marker=markers[idx], label=cl, alpha=1)if test_idx:X_test, y_test = X[test_idx, :], y[test_idx]plt.scatter(X_test[:, 0], X_test[:, 1], c='cyan', alpha=1.0,linewidth=1, marker='^', s=55, label='test set')plt.legend(loc='best')plt.title('Adaline-梯度下降法', fontproperties='SimHei')plt.xlabel('经标准化处理的萼片宽度', fontproperties='SimHei')plt.ylabel('经标准化处理的花瓣宽度', fontproperties='SimHei')iris = datasets.load_iris()
X = iris.data[:, [2, 3]]  # 维度:(150,2)
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)sc = StandardScaler()
sc.fit(X_train)  # 计算训练数据的均值和标准差
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)X_combined_std = np.vstack((X_train_std, X_test_std))
y_combined = np.hstack((y_train, y_test))
LR = LogisticRegression(C=1000.0, random_state=0)
LR.fit(X_train_std, y_train)
plot_decision_regions(X=X_combined_std,y=y_combined,classifier=LR,test_idx=range(105, 150))
print(LR.predict_proba(X_test_std[0:2, :]))
'''
展示2个样本对于3个类别的准确率:
[[2.05743774e-11 6.31620264e-02 9.36837974e-01][6.08753106e-04 9.99285569e-01 1.05678028e-04]]
'''
print(LR.coef_)
'''
权重向量:
[[-7.34015187 -6.64685581][ 2.54373335 -2.3421979 ][ 9.46617627  6.44380858]]
'''
print(LR.intercept_)
'''
截距项:
[-9.31757401 -0.89462847 -8.85765974]
'''
print('Test Accuracy:', LR.score(X_test_std, y_test))
# Test Accuracy: 0.9777777777777777
plt.show()

逻辑斯谛回归(logistic regression)相关推荐

  1. 逻辑斯谛回归模型( Logistic Regression,LR) 最大熵模型(Max Entropy,ME)

    文章目录 1. Logistic Regression 模型 1.1 logistic 分布 1.2 二项逻辑斯谛回归模型 1.3 模型参数估计 1.4 多项逻辑斯谛回归 1.5 Python代码 2 ...

  2. 机器学习--逻辑斯谛回归(Logistic Regression)

    机器学习–逻辑斯谛回归(Logistic Regression) 基本概念 逻辑斯谛回归(Logistic Regression)虽然带回归,却是经典的分类方法.逻辑斯谛回归模型属于对数线性模型.它在 ...

  3. 在opencv3中实现机器学习之:利用逻辑斯谛回归(logistic regression)分类

    logistic regression,注意这个单词logistic ,并不是逻辑(logic)的意思,音译过来应该是逻辑斯谛回归,或者直接叫logistic回归,并不是什么逻辑回归.大部分人都叫成逻 ...

  4. 逻辑斯谛回归(Logistic Regression):函数、模型及其理论内涵

    逻辑斯谛回归(Logistic Regression)[又名逻辑回归,对率回归,对数几率回归]:函数.模型及其理论内涵 逻辑斯谛函数(logistic function)[即sigmoid函数]:函数 ...

  5. 逻辑回归解释 (Logistic Regression)

    文章目录 什么是逻辑回归算法? 可视化曲线python 代码 最大似然估计 梯度下降法 Python代码简单实现(批量梯度下降法) 优缺点 什么时候用 多分类 应用场景 总结 什么是逻辑回归算法? L ...

  6. 对数几率回归(Logistic Regression)分析与实践

    目录 1 对数几率回归原理分析 1.1 引入 1.2 损失函数 1.3  求最优解 2 对数几率回归实践 Logistic回归的一般过程 Logistic回归的优缺点 Logistic回归算法描述(改 ...

  7. 机器学习与高维信息检索 - Note 3 - 逻辑回归(Logistic Regression)及相关实例

    逻辑回归 Logistic Regression 3. 逻辑回归 补充: 凸性 Convexity 定义3.1 定理3.2 定理3.3 成本函数的凸性 3.1逻辑回归的替代方法 3.2 线性可分性和逻 ...

  8. 逻辑回归(Logistic Regression)简介及C++实现

    逻辑回归(Logistic Regression):该模型用于分类而非回归,可以使用logistic sigmoid函数( 可参考:http://blog.csdn.net/fengbingchun/ ...

  9. OpenCV3.3中逻辑回归(Logistic Regression)使用举例

    OpenCV3.3中给出了逻辑回归(logistic regression)的实现,即cv::ml::LogisticRegression类,类的声明在include/opencv2/ml.hpp文件 ...

  10. Logistic Regression

    Logistic Regression 又称逻辑回归,分类算法中的二分类算法,属于监督学习的范畴,算法复杂度低. 1.模型 Logistic Regression模型是广义线性模型的一种,属于线性的分 ...

最新文章

  1. 史上讲的最好的Java NIO与IO的区别与应用
  2. 转:C#读取Excel文件 (2009年9月28日)
  3. Android入门之TabHost,TabWidget
  4. ECMAScript 6 学习笔记(一)
  5. 20110612 DiscuzNT代码研究(3)
  6. ThinkPHP5有关模型hasOne、hasMany、belongsTo详解
  7. python gevent async_python的异步初体验(gevent、async、await)
  8. CompletableFuture详解~设置任务结果
  9. 40-10-010-运维-kafka-2.11-基本操作
  10. 华硕固件,梅林固件,高恪固件等等有什么区别?
  11. 3991. 满足条件的01串-AcWing题库
  12. JAVA 实现汉字五行笔画查询
  13. 在计算机中360云盘如何删除文件,如何在360云盘中检索已删除的文件
  14. Xubuntu22.04增加快捷键
  15. 梳理19年上半年图文记录笔记(php和laravel )
  16. TableauBDP,哪个才是最适合中国用户的数据可视化分析工具?
  17. 深入Python 验证码解析
  18. 缓解迷茫焦虑的最好方法:用自己的方式好好生活
  19. kubernet-- windows之kubectl的安装及使用(巧克力)
  20. 专升本管理学知识点总结——目标管理

热门文章

  1. qt 嵌入web页面_Qt与Web混合开发(一)--简单使用
  2. 等保2.0.第十一章.等保2.0实战(下)
  3. codeforces1100 F. Ivan and Burgers(线性基)
  4. 线性方程组求解——基于MTALAB/Octave,Numpy,Sympy和Maxima
  5. 撤回的微信消息腾讯服务器有记录吗,教你如何查看对方已经撤回的微信消息
  6. 姓名:海宁(Justine Henin-Hardenne)
  7. JavaScript实现:抽奖活动
  8. 【论文笔记】PlenOctrees for Real-time Rendering of Neural Radiance Fields
  9. Android快速开发之appBase——实战《购物车》
  10. DevOps :Jenkins pipeline + sonarQube 完成静态检测 + junit 覆盖率报告。