---恢复内容开始---

Softmax Regression 可以看做是 LR 算法在多分类上的推广,即类标签 y 的取值大于或者等于 2。

假设数据样本集为:$\left \{ \left ( X^{(1)},y ^{(1)} \right ) ,\left ( X^{(2)},y ^{(2)} \right ),\left ( X^{(3)},y ^{(3)} \right ),...,\left ( X^{(m)},y ^{(m)} \right )\right \}$

对于 SR 算法,其输入特征为:$ X^{(i)} \in \mathbb{R}^{n+1}$,类别标记为:$y^{(i)} \in \{ 0,1,2,...,k \}$,假设函数为每一个样本估计其所属类别的概率 $P(y=j|X)$,具体的假设函数为:

$h_{\theta}(X^{(i)}) =\begin{bmatrix}
P(y^{(i)}=1|X^{(i)};\theta)\\
P(y^{(i)}=2|X^{(i)};\theta)\\
...\\
P(y^{(i)}=k|X^{(i)};\theta)
\end{bmatrix} = \frac{1}{\sum _{j=1}^{k}e^{\theta_j^TX^{(i)}}}\begin{bmatrix}
e^{\theta_1^TX^{(i)}}\\
e^{\theta_2^TX^{(i)}}\\
...\\
e^{\theta_k^TX^{(i)}}
\end{bmatrix}$

其中,$\theta$表示的向量,且 $\theta_i \in \mathbb{R}^{n+1}$,则对于每一个样本估计其所属的类别的概率为

$P(y^{(i)}=j|X^{(i)};\theta) = \frac{e^{\theta_j^TX^{(i)}}}{\sum _{l=1}^{k}e^{\theta_l^TX^{(i)}}}$

SR 的损失函数为:

$J(\theta) = -\frac{1}{m} \left [\sum_{i=1}^{m} \sum_{j=1}^{k} I \{ y^{(i)}=j \} \log \frac{e^{\theta_j^TX^{(i)}}}{\sum _{l=1}^{k}e^{\theta_l^TX^{(i)}}} \right ]$

其中,$I(x) = \left\{\begin{matrix}
0 & if\;\;x = false\\
1 & if\;\;x = true
\end{matrix}\right.$ 表示指示函数。

对于上述的损失函数,可以使用梯度下降法求解:

首先求参数的梯度:

$\frac{\partial J(\theta )}{\partial \theta _j} = -\frac{1}{m}\left [ \sum_{i=1}^{m}\triangledown _{\theta_j}\left \{ \sum_{j=1}^{k}I(y^{(i)}=j) \log\frac{e^{\theta_j^TX^{(i)}}}{\sum _{l=1}^{k}e^{\theta_l^TX^{(i)}}}  \right \}  \right ]$

当 $y^{(i)}=j$ 时, $\frac{\partial J(\theta )}{\partial \theta _j} = -\frac{1}{m}\sum_{i=1}^{m}\left [\left ( 1-\frac{e^{\theta_j^TX^{(i)}}}{\sum _{l=1}^{k}e^{\theta_l^TX^{(i)}}} \right )X^{(i)}  \right ]$

当 $y^{(i)}\neq j$ 时,$\frac{\partial J(\theta )}{\partial \theta _j} = -\frac{1}{m}\sum_{i=1}^{m}\left [\left (-\frac{e^{\theta_j^TX^{(i)}}}{\sum _{l=1}^{k}e^{\theta_l^TX^{(i)}}} \right )X^{(i)}  \right ]$

因此,最终结果为:

$g(\theta_j) = \frac{\partial J(\theta )}{\partial \theta _j} = -\frac{1}{m}\sum_{i=1}^{m}\left [X^{(i)} \cdot \left ( I\left \{ y^{(i)}=j \right \}-P( y^{(i)}=j|X^{(i)};\theta) \right )  \right ]$

梯度下降法的迭代更新公式为:

$\theta_j  = \theta_j - \alpha \cdot g(\theta_j)$

主要python代码

def gradientAscent(feature_data,label_data,k,maxCycle,alpha):
'''
梯度下降求解Softmax模型
:param feature_data: 特征
:param label_data: 标签
:param k: 类别个数
:param maxCycle: 最大迭代次数
:param alpha: 学习率
:return: 权重
'''
m,n = np.shape(feature_data)
weights = np.mat(np.ones((n,k))) #一共有n*k个权值
i = 0
while i <=maxCycle:
i+=1
err = np.exp(feature_data*weights) #e^(\theta_j * x^i)
if i%100==0:
print ("\t-----iter:",i,",cost:",cost(err,label_data))
rowsum = -err.sum(axis = 1)
rowsum = rowsum.repeat(k,axis = 1)
err = err/rowsum # -p(y^i = j|x^i;0)
for x in range(m):
err[x,label_data[x,0]]+=1 # I(y^i = j)-p(y^i = j|x^i;0)
weights = weights+(alpha/m)*feature_data.T*err #weights
return weights
def cost(err,label_data):
'''
计算损失函数值
:param err: exp的值
:param label_data: 标签值
:return: sum_cost/m:损失函数值
'''
m = np.shape(err)[0]
sum_cost = 0.0
for i in xrange(m):
if err[i,label_data[i,0]] / np.sum(err[i,:])>0:
sum_cost -=np.log(err[i,label_data[i,0]]/np.sum(err[i,:]))
else:
sum_cost-=0
return sum_cost/m

Sklearn代码:

lr = LogisticRegressionCV(fit_intercept=True, Cs=np.logspace(-5, 1, 100),
multi_class='multinomial', penalty='l2', solver='lbfgs',max_iter = 10000,cv = 7)#multinomial表示多类即softmax回归
re = lr.fit(X_train, Y_train)

机器学习-softmax回归 python实现的更多相关文章

  1. 机器学习——softmax回归

    softmax回归 前面介绍了线性回归模型适用于输出为连续值的情景.在另一类情景中,模型输出可以是一个像图像类别这样的离散值.对于这样的离散值预测问题,我们可以使用诸如 softmax 回归在内的分类 ...

  2. 机器学习 —— 基础整理(五)线性回归;二项Logistic回归;Softmax回归及其梯度推导;广义线性模型

    本文简单整理了以下内容: (一)线性回归 (二)二分类:二项Logistic回归 (三)多分类:Softmax回归 (四)广义线性模型 闲话:二项Logistic回归是我去年入门机器学习时学的第一个模 ...

  3. 手写数字识别 ----Softmax回归模型官方案例注释(基于Tensorflow,Python)

    # 手写数字识别 ----Softmax回归模型 # regression import os import tensorflow as tf from tensorflow.examples.tut ...

  4. 机器学习之线性回归---logistic回归---softmax回归

    在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签 可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分类等问题 ...

  5. 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

    http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) z ...

  6. 机器学习(2):Softmax回归原理及其实现

    Softmax回归用于处理多分类问题,是Logistic回归的一种推广.这两种回归都是用回归的思想处理分类问题.这样做的一个优点就是输出的判断为概率值,便于直观理解和决策.下面我们介绍它的原理和实现. ...

  7. 机器学习之softmax回归笔记

    本次笔记绝大部分转自https://www.cnblogs.com/Luv-GEM/p/10674719.html softmax回归 Logistic回归是用来解决二类分类问题的,如果要解决的问题是 ...

  8. 机器学习(三)—线性回归、逻辑回归、Softmax回归 的区别

    1.什么是回归?  是一种监督学习方式,用于预测输入变量和输出变量之间的关系,等价于函数拟合,选择一条函数曲线使其更好的拟合已知数据且更好的预测未知数据. 2.线性回归  于一个一般的线性模型而言,其 ...

  9. 02-13 Softmax回归

    目录 Softmax回归 一.Softmax回归详解 1.1 让步比 1.2 不同类之间的概率分布 1.3 目标函数 1.4 目标函数最大化 二.Softmax回归优缺点 2.1 优点 2.2 缺点 ...

随机推荐

  1. JAVA调用微信接口实现页面分享功能(分享到朋友圈显示图片,分享给朋友)

    钉钉提供的内网穿透之HTTP穿透:https://www.cnblogs.com/pxblog/p/13862376.html 网页分享到微信中如何显示标题图,如果自定义标题图,描述,显示效果如下 官 ...

  2. 家用路由器也能充当Web服务器?路由器插件开发心得

    起因 最近刚刚结束考研,开始有时间写文章了.在复习的时候中,经常忍不住折腾各种东西,于是有一天看中了我手上的华为路由器.什么?华为路由器,你可能有这样的疑问,华为路由器不是自研的芯片吗,就像我手上这台 ...

  3. 第三十七个知识点: The Number Field Sieve

    第三十七个知识点: The Number Field Sieve 数域筛法(The Number Field Sieve ,NFS)是已知的分解算法中最有效率的.它的运行时间取决于被分解的数的大小而不 ...

  4. Chapter 9 Measurement Bias

    目录 9.1 Measurement Error The structure of measurement error 9.3 Mismeasured confounders 9.4 Intentio ...

  5. Adversarially Robust Generalization Requires More Data

    目录 概 主要内容 高斯模型 upper bound lower bound 伯努利模型 upper bound lower bound Schmidt L, Santurkar S, Tsipras ...

  6. playwright--自动化(二):过滑块验证码 验证码缺口识别

    前两天需要自动化登录一个商城的后台 用的是playwright 没有用selenium 中间出了一个滑块验证 现阶段playwright教程不是太多,自己做移动的时候各种找,费劲巴拉的.现在自己整出来 ...

  7. html基础 表单标签 input系列 以及优化方法

    场景:在网页中显示手机用户信息的表单效果. 如:登录页.注册页标签名:input 用法是通过改变type属性值,来展示不同效果 1.1 html 代码 <!--placeholder 提示符又叫 ...

  8. 第三代微服务架构:基于 Go 的博客微服务实战案例,支持分布式事务

    这是一个可一键部署在 Kubernetes-Istio 集群中的,基于 Golang 的博客微服务 Demo,支持分布式事务. 项目地址:https://github.com/jxlwqq/blog- ...

  9. Python_元类

    什么是元类 我们知道,实例对象是由类创建的,那么类又是由什么创建的呢? 答案就是元类. 元类基本不会用到,但是就算不用,也应该去熟悉一下概念. 理解类也是对象 在大多数编程语言中,类就是一组用来描述如 ...

  10. 不用下载Axure RP Extension for Chrome插件查看原型文件的方法

    Axure RP Extension for Chrome是一款谷歌插件,主要可以用来查看原型文件.以前安装插件的时候总是找半天资源,很麻烦,最近发现了一种新方法可以不用下载插件资源.其实在原型文件中 ...