萍果波经7plus有几个扬声器

1734人阅读
Logistic Regression(逻辑回归)
以前在学校学到Logistic Regression的时候,虽然最后会使用,但是对于许多地方有很多的疑惑,今天在这里详细梳理一下Logistic Regression的过程:
回归的思想
Logistic Regression和线性回归一样,是回归中常见的算法。很多人刚接触Logistic Regression,不知道回归的含义。其实在念中学的时候学到的用最小二乘法求解线性回归方程,就是我们最早接触到的回归。在二维平面上有很多的点&x1,y1&,&x2,y2&...&xn,yn&,从这些点中选出一条直线,来很好的拟合这些点。通过求解,最后得到的回归方程形式是y=bx+a,然后来一个新的新的x,通过这个函数,能够计算得到对应的y的值。
所以一种常见的回归就是通过一系列的点,计算得到一条合适的线。当有新的输入时,可以直接计算得到输出。不局限于二维平面的话,点可以表示为&x1→,y1&,&x2→,y2&...&xn→,yn&,x1→是一个d维的向量。对于线的表示都不尽相同,线性回归得到的预测函数形式是y=w?&T*x?&+a,对于Logistic 回归,是一条“S”型曲线,在接下来会讲到。
还有一些回归不是通过得到一条线。比如使用决策树来回归。就是把一些点分布到树的节点上。每个节点的平均值就是作为回归值。
简单来说,回归就是根据输入预测一个值。
Logistic Regression形式
Logistic Regression最常见的应用场景就是预测概率。比如知道一个人的 年龄、性别、血压、胆固醇水平、体重,想知道这个人患心脏病的概率。首先很容易想到通过线性回归,根据这一组值来计算得到一个分数。对于病人的特征(x0,x1,x2,...,xd),计算得到危险分数是
s=∑i=0dwixi
计算得到的分数越高,风险越大,分数越低,风险越小。s的取值是[-∞,+∞]的值,但是我们想要的是一个[0,1]之间的值。因此需要一个转换函数来把这个分数转换成[0,1]之间的值。这个函数称为Logistic 函数,Logistic函数是一个S形的函数。
形状如下图所示:
这个函数也称为sigmoid函数。函数能够把s映射到[0,1]之间,我们把这个函数称为θ(s)。Logistic函数形式为:
θ(s)=es1+es=11+e-s
其中e即是自然常数。
因此整个Logistic Regression的函数形式为:
h(x?&)=11+e-w?&Tx?&
在Logistic Regression函数中,我们使用最大似然方式来求解模型的参数。有关,维基百科有定义。
我们把真实模型称为f,学习得到的模型为h,f是未知的,要用h去拟合f。Logistic Regression的目标函数是,在已知x的条件下,输出y=+1的概率,y=+1即为f(x),y=-1的概率为1-f(x)。对于数据集D={(x?&1,+1),(x?&2,-1),...,(x?&n,-1)},抽取到该数据集的概率为
P(x?&1)f(x?&1)P(x?&2)(1-f(x?&2))...P(x?&n)(1-f(x?&n))
因为f是真正产生这个数据集的,f产生这个数据集的概率应该是很大的(最大似然估计的思想)。如果我们用h来代替f,那么得到该数据集的概率为
P(x?&1)h(x?&1)P(x?&2)(1-h(x?&2))...P(x?&n)(1-h(x?&n)),这个概率我们称为似然函数likelihood(h)。需要找到的最终的函数h应该是likelihood(h)取最大值的那个h。即我们要求解likelihood(h)最大值,然后得到h即为我们想要的。
likelihood(h)=P(x?&1)h(x?&1)P(x?&2)(1-h(x?&2))...P(x?&n)(1-h(x?&n))
其中,根据Logistic函数的对称性有1-h(x?&)=h(-x?&)。从而有
likehood(h)∝∏i=1nh(yixi→)(正比关系)
我们要求解maxhlikelihood(h),即需要求解maxh∏ni=1h(yixi→),我们需要的是求得w?&这个参数,因此转换得到
likehood(w)∝∏i=1nθ(yiw?&Txi→)
这是一个连乘,两边取对,即可转换成连加。
ln(likehood(w))∝∑i=1nln(θ(yiw?&Txi→))∝1n∑i=1nln(θ(yiw?&Txi→))
求解上式的最大值,等价于求解
minw?&1n∑i=1n-ln(θ(yiw?&Txi→))
把θ函数定义代入,得到
minw?&1n∑i=1n-ln(1+e-yiw?&Txi→)
定义Ein(w?&)=∑i=1n-ln(1+e-yiw?&Txi→)
err(w?&,y,x?&)=ln(1+e-yiw?&Txi→)
err(w?&,y,x?&)为在极大似然估计下,Logistic方程的误差,称为cross entropy error。而让Ein(w?&)最小的w?&是我们希望得到的Logistic Regression模型的参数。
最小化Ein(w?&)
根据以上的推导,损失函数Ein(w?&)为
Ein(w?&)=∑i=1n-ln(1+e-yiw?&Txi→)
从数学上可以推导出Ein(w?&)是连续平滑的,可微,且二次可微的,也是凸函数(来自林轩田老师视频)。要求Ein(w?&)的最小值,就对Ein(w?&)求微分,然后计算微分等于0的点。
对Ein(w?&)在w?&每一个方向分量wj上求偏微分
?Ein(w?&)?wj=1n∑i=1nθ(-yiw?&Txi→)(-yixi,j)
把偏微分中的xi,j换成向量,则可以得到一阶微分:
?Ein(w?&)=1n∑i=1nθ(-yiw?&Txi→)(-yixi→)
?Ein(w?&)属于该损失函数的梯度,在二维空间的话我们称为斜率。如果直接令:
?Ein(w?&)=0
来求解的话,是很难求解出w?&的值的,因此需要使用其他方式。
梯度下降法
直接求解是无法求解出w?&的,一种思想是采用迭代的方式求最小的Ein(w?&)。每次改变w?&一点,尽可能使这个改变让Ein(w?&)朝着变得更小,这样逐步使Ein(w?&)趋近于最小值。如第t次到t+1次迭代,权重更新的形式如下:
w?&t+1=w?&t+ηv?&
其中v?&是一个单位向量,η是步长。Ein(w?&t+1)应该要比Ein(w?&t)更小,这样的更新才有意义。因为我们是要找到Ein(w?&)的最小值。
Ein(w?&t+1)代入w?&t,得到Ein(w?&t+ηv?&)。现在有Ein(w?&)的一阶微分,可以对Ein(w?&t+ηv?&)采用泰勒展开,如下:
Ein(w?&t+ηv?&)≈Ein(w?&t)+ηv?&T?Ein(w?&t)
忘记泰勒展开没关系,可以从直观上来理解这个式子。根据以上的结论,Ein(w?&)是存在最小值的,同时是光滑连续,可微及二次可微的。其曲线类似于下图:
任何一条曲线,如果只看一小段的话,可以把这一小段曲线看成是一个线段。从数学上来讲,一个函数在某一点到附近的另外一点,可以用一个线段来表示。附近点的值为该点的值加上一小段线段的梯度,就得到了上式。
要使Ein(w?&t)+ηv?&T?Ein(w?&t)比Ein(w?&t)小很多,必须ηv?&T?Ein(w?&t)取最小值,η是不变的,两个向量相乘需要得到最小值,很显然方向相反时,向量乘积取得最小值。因此v?&需要和?Ein(w?&t)方向相反,同时v?&是单位向量,因此在wt点时有
v?&=-?Ein(w?&t)∥?Ein(w?&t)∥
因此有w?&的更新方式为
w?&t+1=w?&t-η?Ein(w?&t)∥?Ein(w?&t)∥
到此,梯度下降总体思想结束了。梯度下降主要有两种方法,一种是随机梯度下降,一种是批量梯度下降。批量梯度下降每次更新权重需要训练完所有的数据,随机梯度下降每次训练完一条记录,就可以计算对应梯度,更新权重。在实际使用中,推荐使用随机梯度,收敛速度快。同时有关步长η的设置需要注意,设置太大会引起抖动,太小收敛速度太慢,可以采用动态的步长,比如一开始比较大,慢慢的缩小。迭代更新的停止条件从理论上来说是找不到更小的Ein(w?&),在实际使用可以直接设置一个比较大的迭代次数,或者根据经验设置一个迭代次数,一般都会收敛。当然这些都是工程上的东西了。
到此基本讲完了Logistic Regression大部分内容了。当时在学校学完之后怎么也没懂,损失函数为什么是这样,为什么要使用随机梯度下降等等这些问题一直没有解决,虽然看看博客也能够做实验把代码写完(南京大学数据挖掘课程很赞啊)。最近在看林轩田老师的视频,慢慢弄,基本搞懂了。Logistic Regression作为常见的一类回归,其中的思想在很多算法中都用到。欢迎大家一起讨论。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
微信学习公众平台-耿公子推荐
微信号:Geng-Programming
名称:耿公子与编程
访问:4364次
排名:千里之外
原创:15篇
(1)(1)(3)(1)(2)(1)(1)(1)(3)(2)逻辑回归模型(Logistic Regression, LR)基础 - 文赛平 - 推酷
逻辑回归模型(Logistic Regression, LR)基础 - 文赛平
逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数,使得逻辑回归模型成为了机器学习领域一颗耀眼的明星,更是计算广告学的核心。本文主要详述逻辑回归模型的基础,至于逻辑回归模型的优化、逻辑回归与计算广告学等,请关注后续文章。
逻辑回归模型
&&& 回归是一种极易理解的模型,就相当于y=f(x),表明自变量x与因变量y的关系。最常见问题有如医生治病时的望、闻、问、切,之后判定病人是否生病或生了什么病,其中的望闻问切就是获取自变量x,即特征数据,判断是否生病就相当于获取因变量y,即预测分类。
&&& 最简单的回归是线性回归,在此借用Andrew NG的讲义,有如图1.a所示,X为数据点——肿瘤的大小,Y为观测值——是否是恶性肿瘤。通过构建线性回归模型,如h
(x)所示,构建线性回归模型后,即可以根据肿瘤大小,预测是否为恶性肿瘤h
(x)≥.05为恶性,h
(x)&0.5为良性。
&&& 然而线性回归的鲁棒性很差,例如在图1.b的数据集上建立回归,因最右边噪点的存在,使回归模型在训练集上表现都很差。这主要是由于线性回归在整个实数域内敏感度一致,而分类范围,需要在[0,1]。逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,其回归方程与回归曲线如图2所示。逻辑曲线在z=0时,十分敏感,在z&&0或z&&0处,都不敏感,将预测值限定为(0,1)。
图2 逻辑方程与逻辑曲线
&&& 逻辑回归其实仅为在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数,逻辑回归成为了机器学习领域一颗耀眼的明星,更是计算广告学的核心。对于多元逻辑回归,可用如下公式似合分类,其中公式(4)的变换,将在逻辑回归模型参数估计时,化简公式带来很多益处,y={0,1}为分类结果。
&&& 对于训练数据集,特征数据x={x
}和对应的分类数据y={y
}。构建逻辑回归模型f(θ),最典型的构建方法便是应用极大似然估计。首先,对于单个样本,其后验概率为:
&&& 那么,极大似然函数为:
&&& log似然是:
&&& 由第1节可知,求逻辑回归模型f(θ),等价于:
&&& 采用梯度下降法:
&&&& 从而迭代θ至收敛即可:
&&& 对于LR分类模型的评估,常用AUC来评估,关于AUC的更多定义与介绍,可见参考文献2,在此只介绍一种极简单的计算与理解方法。
&&&& 对于训练集的分类,训练方法1和训练方法2分类正确率都为80%,但明显可以感觉到训练方法1要比训练方法2好。因为训练方法1中,5和6两数据分类错误,但这两个数据位于分类面附近,而训练方法2中,将10和1两个数据分类错误,但这两个数据均离分类面较远。
&&& AUC正是衡量分类正确度的方法,将训练集中的label看两类{0,1}的分类问题,分类目标是将预测结果尽量将两者分开。将每个0和1看成一个pair关系,团中的训练集共有5*5=25个pair关系,只有将所有pair关系一至时,分类结果才是最好的,而auc为1。在训练方法1中,与10相关的pair关系完全正确,同样9、8、7的pair关系也完全正确,但对于6,其pair关系(6,5)关系错误,而与4、3、2、1的关系正确,故其auc为(25-1)/25=0.96;对于分类方法2,其6、7、8、9的pair关系,均有一个错误,即(6,1)、(7,1)、(8,1)、(9,1),对于数据点10,其正任何数据点的pair关系,都错误,即(10,1)、(10,2)、(10,3)、(10,4)、(10,5),故方法2的auc为(25-4-5)/25=0.64,因而正如直观所见,分类方法1要优于分类方法2。
参考文献:
1& Andrew NG. Logistic Regression Classification
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致机器学习-逻辑回归--牛顿迭代--r语言
逻辑回归就不想多说了,,,什么sigmoid函数,决策边界、最大拟然估计 巴拉巴拉!现在就说下我遇到的问题吧!
一、伤你最深的还是最信任的人----最速下降+一维线性搜索
一直很相信自己最优化理论学的还是很扎实的,前段时间也自己写过多元线性回归的最小二乘估计优化,通过梯度下降设置步长alpha=0.01,迭代格式为weight=weight+alpha*d(d为梯度方向);这样的话会遇到一个问题,那就是步长的问题,步长太大容易在最优点徘徊,永远无缘到达,甚至发散。如果步长太小的话,就容易出现乌龟的爷爷回家的故事,太慢太慢。后来,加了一维线性搜索技术灵活调动步长,也就是就每次迭代
时候后求使得g(weight+alpha*d)最小时的一个alpha作为步长,这个步长怎么求呢,有牛顿法,黄金分割法,割线法、三次样条插值法。我不太喜欢黄金分割法,因为黄金分割是0.618那个地方分开再查找,二分查找不是更好吗,大家都公平,哈哈。但是我在这里发明了一个方法,不知道能不能申请专利。这个方法有一个天然的有点就是,不需要用循环来决定步长,只要捣鼓一下公式就可以,原因在这里。最小二乘这个f应该是个二次式,二次式只有一个极值点,而且这个极值点也是极小点。所以只要求导数就可以了得出步长:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&aphla&&是的&&&&&&&g=[y-x*(wight+alpha*d)]^2&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
求极值点:&&
2*[y-x*(wight+alpha*d)]*(xd)'=0&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
a=(y-x*wight)*(xd)'/xd*(xd)'&&
就这个公式,哈哈!
如果你的维度不是很大的话,这样是可以的,而且不需要循环,但是维度比较大的话,就不建议用了,因为矩阵运算复杂度也是很高的。
以前还挺满意的,因为,每次迭代的次数不到十次,基本上就和&
sas& spss&&
r语言的结果一样了。所以我称他们为优化领域的黄金搭档。
二&& 逻辑回归实现---让我不再相信
最速下降+一维搜素这个黄金搭档了
逻辑回归的代码很多:斯坦福教授吴恩达讲的机器里面都是将最速下降,然后设置alpha=0.01
sigmoid&-function(y){return (1/(1+exp(-y)))}#逻辑函数
sh&-function(x,f){for(i in
1:length(f)){x[,i]=x[,i]*f[i]}
&&&&&&&&&&&&&&&&&
return(x)}#计算高纬度矩阵相乘
niudun&-function(x,y,k){
m=length(y)#求数据的长度
x0=rep(1,m)#生成全部数值为1,长度为m的向量
x=cbind(x0,x)#将上面的单位向量合并到训练集中
n=ncol(x)#求训练集的维度
beta&-rep(0.00001,n)#初始迭代点;很重要
beta=t(t(beta))#转置
y=t(t(y))& #转置
for(i in 1:10){
& f&-sigmoid(x%*�ta)
& error&-y-sigmoid(x%*�ta)
& V=t(x)%*%error
& H=sh(t(x),as.vector(f*(f-1)))%*%x
& beta&-beta-solve(H)%*%V
return(beta)
x=as.matrix(learn[,1:6])#将训练集转换成矩阵
y=learn[,8]
niudun(x,y,10)
fit&-glm(y~level+frq+money+gold+role+upgrade,data=learn,family=binomial())
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 萍果8 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信