前面有讲过线性回归,但是很多非线性问题不能用简单的线性回归来分类。这时需要用到逻辑回归,逻辑回归是一种非线性的回归。说到逻辑回归一定要说到概率问题,概率(probability)就是对一件事发生的可能性的衡量。一个事件的概率 0≤P≤1 0\leq P \leq 1, 当事件必然发生时概率为1, 当事件为不可能事件时概率为0. 条件概率的表达式为: P(A∣B)=P(A⋂B)P(B) P(A\mid B)=\frac{P(A\bigcap B)}{P(B)},表达式的意思在条件B下,条件A发生的可能性。
逻辑回归的基本模型为:

Z=θ0x0+θ1x1+θ2x2+...+θnxn

Z=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n
用向量的形式可表示为:

Z=ΘTX

Z=\Theta^TX
为了出来二值数据,需要引入sigmoid函数时曲线平滑化:

g(Z)=11+e−z

g(Z)=\frac{1}{1+e^{-z}}
图像如下:

从图像中可以看出这个函数的性质:当Z=0时,g(Z)=1; 当Z趋近于正无穷时,g(Z)趋近于1;当Z趋近于负无穷时,g(Z)趋近于0.
将逻辑回归基本模型的向量表示形式带入到sigmoid函数中,可以得到预测函数:

hθ(X)=g(ΘTX)=11+e−ΘTX

h_\theta(X)=g(\Theta^TX)=\frac{1}{1+e^{-\Theta^TX}}
用概率来表示
(y=1):

hθ(X)=P(y=1∣X;Θ)

h_\theta(X)=P(y=1\mid X; \Theta)
(y=0):

1−hθ(X)=P(y=0∣X;Θ)

1-h_\theta(X)=P(y=0\mid X; \Theta)
模型参数的选取需要使用代价函数(cost function),在线性回归中我们使用sum of squares的方法来描述误差,表达式为:

∑i=1m(hθ(xi)−yi)2

\sum_{i=1}^{m}(h_\theta(x^{i})-y^{i})^2

hθ(xi)=θ0+θ1xi

h_\theta(x^{i})=\theta_0+\theta_1x^{i}
我们就需要找到合适的 θ0和θ1 \theta_0和\theta_1使sum of squares最小。
逻辑回归中的代价函数表示为:

Cost(hΘ(X),y)={−log(hΘ(X))当y=1时−log(1−hΘ(X))当y=0时

Cost(h_\Theta(X),y)= \left \{ \begin{array}{c} -log(h_\Theta(X)) 当 y=1 时\\ -log(1-h_\Theta(X))当y=0时 \\ \end{array} \right.
将上面的等式合并成一个等式可以得到:

J(Θ)=1m∑i=1mCost(hΘ(x(i)),y(i))=−1m[∑i=1m(y(i)log(hΘ(x(i))))+(1−y(i))log(1−hΘ(x(i))))]

J(\Theta)=\frac{1}{m}\sum_{i=1}^{m}Cost(h_\Theta(x^{(i)}),y{(i)})=-\frac{1}{m}[\sum_{i=1}^{m}(y^{(i)}log(h_\Theta(x^{(i)})))+(1-y^{(i)})log(1-h_\Theta(x^{(i)})))]
得到的这个等式实际上是和上面的等式相等的,带入y=1或y=0既可得到和上面一样形式的等式。同样的,我们也是需要寻找到合适的 θ0,θ1 \theta_0, \theta_1使上面的等式最小。为了寻找到最小的cost,这里也使用梯度下降的方法(gradient decent),在 人工神经网络(ANN)入门二中。
介绍过了具体的思想,实际上就是利用微分的性质求偏导数知道找到一个收敛的值为止,这里不再重复介绍。这里对 θj \theta_j求偏导数,每次更新 θj \theta_j为:

θj=θj−α∂∂θjJ(θ),(j=0...n)

\theta_j=\theta_j-\alpha \frac{\partial}{\partial\theta_j}J(\theta),(j=0...n)
可以用Python来实现逻辑回归,代码如下:

# logistic regressionimport numpy as np
import random# m denotes the number of examples here, not the number of features
def gradientDescent(x, y, theta, alpha, m, numIterations):xTrans = x.transpose()for i in range(0, numIterations):hypothesis = np.dot(x, theta)loss = hypothesis - y# avg cost per example (the 2 in 2*m doesn't really matter here.# But to be consistent with the gradient, I include it)cost = np.sum(loss ** 2) / (2 * m)#print("Iteration %d | Cost: %f" % (i, cost))# avg gradient per examplegradient = np.dot(xTrans, loss) / m# updatetheta = theta - alpha * gradientreturn thetadef genData(numPoints, bias, variance):x = np.zeros(shape=(numPoints, 2))y = np.zeros(shape=numPoints)# basically a straight linefor i in range(0, numPoints):# bias featurex[i][0] = 1x[i][1] = i# our target variabley[i] = (i + bias) + random.uniform(0, 1) * variancereturn x, y# gen 100 points with a bias of 25 and 10 variance as a bit of noise
x, y = genData(100, 25, 10)
m, n = np.shape(x)
numIterations = 100000
alpha = 0.0005
theta = np.ones(n)
theta = gradientDescent(x, y, theta, alpha, m, numIterations)
print(theta)

与回归相关的一个重要参数是皮尔逊相关系数(Pearson Correlation Coefficient), 它是衡量两个线性相关强度的量,取值范围为[-1, +1]。如图所示,如果相关系数大于0,就是正向相关;系数小于0,就是负向相关;系数等于0表示没有关系。

相关系数的公式为:

ρ=Cor(X,Y)=Cov(X,Y)Var(X)Var(Y)‾‾‾‾‾‾‾‾‾‾‾‾‾√

\rho=Cor(X,Y)=\frac{Cov(X,Y)}{\sqrt{Var(X)Var(Y)}}

Cov(X,Y)=∑nn=1(Xi−X⎯⎯⎯)(Yi−Y⎯⎯⎯)n−1

Cov(X,Y)=\frac{\sum_{n=1}^{n}(X_i-\overline{X})(Y_i-\overline{Y})}{n-1}

Var(X)=∑ni=1(Xi−X⎯⎯⎯)2n−1

Var(X)=\frac{\sum_{i=1}^{n}(X_i-\overline{X})^2}{n-1}
最后可以得出

rxy=∑ni=1(xi−x⎯⎯)(yi−y⎯⎯)∑ni=1(xi−x⎯⎯)2∑ni=1(yi−y⎯⎯)2‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√

r_{xy}=\frac{\sum_{i=1}^{n}(x_i-\overline{x})(y_i-\overline{y})}{\sqrt{\sum_{i=1}^{n}(x_i-\overline{x})^2\sum_{i=1}^{n}(y_i-\overline{y})^2}}
下面是计算相关系数的代码

import numpy as np
import mathdef computeCorrelation(X, Y):xBar = np.mean(X)yBar = np.mean(Y)SSR = 0varX = 0varY = 0for i in range(0, len(X)):diffXXBar = X[i] - xBardiffYYBar = Y[i] - yBarSSR += (diffXXBar * diffYYBar)varX += diffXXBar ** 2varY += diffYYBar ** 2SST = math.sqrt(varX * varY)return SSR / SSTtestX = [1, 3, 8, 7, 9]
testY = [10, 12, 24, 21, 34]print(computeCorrelation(testX, testY))

与相关系数对应的一个系数为R平方值,叫做决定系数,反应因变量的全部变异能通过回归关系被自变量解释的比例。例如如果R平方为0.8,则表示回归关系可以解释因变量80%的变异,换句话说,如果我们能控制自变量不变,则因变量的变异程度会减少80%。
简单线性回归 R2=r2 R^2=r^2,多元线性回归中, R2=SSRSST=∑(yi^−y⎯⎯)2∑(yi−y⎯⎯)2 R^2=\frac{SSR}{SST}=\frac{\sum(\hat{y_i}-\overline{y})^2}{\sum(y_i-\overline{y})^2}
另外一个重要的关系为:SST=SSR+SSE
SSE=∑(yi−yi^)2 SSE=\sum(y_i-\hat{y_i})^2
R平方也有其局限性:R平方随着自变量的增大会变大,R平方和样本量是有关系的。因此,我们要对R平方进行修正,修正方法为:

R2adjusted=1−(1−R2)(N−1)N−p−1

R^2adjusted=1-\frac{(1-R^2)(N-1)}{N-p-1}
这里 p=number of predictors, N=total sample size.
后续更新中。。。

逻辑回归(Logistic Regression)原理及Python实现相关推荐

  1. 逻辑回归(Logistic Regression)原理及损失函数、极大似然估计

    一.什么是逻辑回归 虽然名字是"回归",但解决的是"分类"问题. 模型学习的是E[y∣x;θ]E[y|x;\theta]E[y∣x;θ],即给定自变量和超参数后 ...

  2. 逻辑回归(logistic regression)原理理解+matlab实现

    使用梯度下降法迭代: function theta =logisticReg() % 梯度下降法寻找最合适的theta,使得代价函数J最小 options=optimset('GradObj','on ...

  3. 逻辑回归(logistic regression)的本质——极大似然估计

    文章目录 1 前言 2 什么是逻辑回归 3 逻辑回归的代价函数 4 利用梯度下降法求参数 5 结束语 6 参考文献 1 前言 逻辑回归是分类当中极为常用的手段,因此,掌握其内在原理是非常必要的.我会争 ...

  4. CS229学习笔记(3)逻辑回归(Logistic Regression)

    1.分类问题 你要预测的变量yyy是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法. 从二元的分类问题开始讨论. 我们 ...

  5. 逻辑回归(Logistic Regression

    6.1 分类问题 参考文档: 6 - 1 - Classification (8 min).mkv 在这个以及接下来的几个视频中,开始介绍分类问题. 在分类问题中,你要预测的变量 y y y 是离散的 ...

  6. 吴恩达机器学习 8.6 逻辑回归(Logistic Regression)

    6.1 分类问题 参考文档: 6 - 1 - Classification (8 min).mkv 在这个以及接下来的几个视频中,开始介绍分类问题. 在分类问题中,你要预测的变量 $y$ 是离散的值, ...

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

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

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

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

  9. Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)”

    Coursera公开课笔记: 斯坦福大学机器学习第六课"逻辑回归(Logistic Regression)" 斯坦福大学机器学习第六课"逻辑回归"学习笔记,本次 ...

最新文章

  1. 《预训练周刊》第34期:使用图像级监督检测两万个类别、BigScience寻求建立强大的开放语言模型...
  2. 通过Python的__slots__节省9GB内存
  3. CISCO DAI 防ARP***
  4. C# Post数据和接收简单示例【转】
  5. Tcp连接arp协议详解
  6. 刚开始学Web前端,用什么软件好?
  7. 分布式文件系统对比与选型参考
  8. pytorch从dataframe中提取信息,变为可训练的tensor
  9. 腾讯公开“区块链网络的信息处理方法”相关专利
  10. 蓝桥杯-----十六进制转八进制
  11. 学成在线 网页前端(源码DIV+CSS)
  12. ant design入门学习笔记
  13. HTML5期末大作业:蘑菇街网站设计——2021蘑菇街首页(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web期末作业设计网页_清新淡雅蘑菇街大学生网页设计作业成品
  14. H5页面的功能和表现形式有哪些
  15. 智能科学与技术 毕业设计怎么做 - 选题推荐 - 疑问解答
  16. 【集成学习(上)】机器学习基础_02
  17. 醉后不知天在水 满船清梦压星河。—第二十一天
  18. 云业务贡献40.5%增长:亚马逊2022年财报亮点解读
  19. CPC安装后,简单解决Microsoft.Jet.OLEDB.4.0问题
  20. spss统计软件分析学习笔记

热门文章

  1. Win7桌面显示音乐波动 - 音频频谱分析仪
  2. Google 最大数据中心发生爆炸,三名技术人员受伤
  3. Nova Battles是2022年值得关注的链游
  4. Linux删除文件之后磁盘空间没有被释放
  5. 分享卖货小程序制作方法_怎么在微信上做小程序卖货
  6. 视频怎么剪辑成短视频?如何制作原创视频素材作品
  7. 栈,队列和链表三者之间的关系与区别
  8. 内网架设FTP服务器(serv-u)
  9. Unity 最近经验分享
  10. matlab中Svmtrain和Svmpredict的用法