一文看懂逻辑回归

本文详细介绍了逻辑回归的基本概念,包括问题引入、模型建构、损失函数的定义和推导,以及参数更新的过程。逻辑回归是通过sigmoid函数将线性函数映射到[0,1]范围内,用于预测分类概率。损失函数采用了交叉熵,衡量预测与实际结果的差异。逻辑回归在实际应用中是线性回归的一种扩展,适用于二分类问题。" 108178654,9628239,腾讯笔试:解压缩字符串算法解析,"['java', '算法', '字符串处理']


看了一些介绍逻辑回归的文章,这里通过一个例子的贯穿做一下知识点的整合巩固,如有遗漏或不合理的地方欢迎讨论交流。

问题引入与模型建构

现有20个学生投入0-6个小时学习课程的记录,分析投入时间和是否通过考试的概率的关系。在这个问题中是否通过考试只有两种结果:通过不通过。可以用虚拟变量10分别表示。我们用y代表已知的考试结果,x为已知的投入时间,发现其中还有一个隐藏变量:知识掌握程度,可以先设为z,假设z(x)线性变化,当然z(x)的具体表达式暂时未知,需要通过学习来获得。而对分类问题的预测其本质是建立在z(x)的基础上的。这一点很多文章并没有讲清楚,但对于算法的理解至关重要。
他们之间的关系是z(x),y(z)。同时选用sigmoid 函数作为合理的y(z)的关系。
在这里插入图片描述
在这里插入图片描述

模型构建

在介绍Logistic Regression之前我们先简单说一下线性回归,线性回归的主要思想就是通过历史数据拟合出一条直线,用这条直线对新的数据进行预测,线性回归可以参考我之前的一篇文章
这里直接给出公式(这里简短插一句,我觉得应该写成X^T*Theta的形式,因为Theta才是主变量):
z ( x ) = b + w x = ( b w ) ( 1 x ) = Θ T X P r ( y = 1 ∣ X ; Θ ) = y ( z ) = h Θ ( z ) = 1 1 + e − z P r ( y = 0 ∣ X ; Θ ) = 1 − h Θ ( z ) z(x)=b+wx= \begin{pmatrix} b&w \end{pmatrix} \begin{pmatrix} 1\\ x \end{pmatrix}=\Theta^TX\\ {}\\ Pr(y=1|X;\Theta)=y(z)=h_{\Theta}(z)=\frac{1}{1+e^{-z}}\\ {}\\ Pr(y=0|X;\Theta)=1-h_{\Theta}(z) z(x)=b+wx=(bw)(1x)=ΘTXPr(y=1X;Θ)=y(z)=hΘ(z)=1+ez1Pr(y=0X;Θ)=1hΘ(z)
直观描述为:在这里插入图片描述
Sigmod函数的作用是将线性函数的结果映射到了[0,1]的范围中,即可以用来表达分类的概率0-100%
在这里插入图片描述
y(z)<0.5 则预测当前数据属于0即未通过考试;
y(z)>0.5 则预测当前数据属于1即通过考试。
所以我们可以将sigmoid函数看成样本数据的概率密度函数。
需要注意的是,这里Sigmod函数建立的前提是:z的分布已知,已知z=b+wx,其中未知数b决定了判断及格的边界(学多长时间有一半几率及格),未知数w决定了学习时间转化为知识掌握程度的效率(每学单位时间,知识掌握能力的提升量)。而相应的两个限制条件为:
1.z=0时为边界
2.在训练集上准确率最优(何为最优?==》在损失函数上取值最小)
于是自然而然引出了损失函数的定义。

损失函数

定义

在这里插入图片描述
其中m为学生总数,y(i)=hTheta(x(i))为每个学生的及格率

推导

关于同一组事件x(1),x(2)…的两个分布p,q,其交叉熵(Cross-Entropy)的定义如下:
H ( p , q ) = − ∑ i = 1 n p i l o g q i H(p,q)=-\sum_{i=1}^np_ilogq_i H(p,q)=i=1npilogqi
当两个分布完全相同时,交叉熵取最小值。
交叉熵可以衡量两个分布之间的相似度,交叉熵越小两个分布越相似。
例如算法判定一个学生100%通过考试(1,0),他也确实通过了考试,算法的损失(即交叉熵)就为0,当它判定另一个学生100%通过考试(1,0),该学生却并未及格,则算法完全错误,其损失(即交叉熵)用无限大表示。
于是有:在这里插入图片描述

在这里插入图片描述

此时预测第三个学生90%几率通过考试10%几率不通过(0.9,0.1),则此预测中包含的损失为样本标签为1时10%预测为没通过+样本标签为0时90%预测为通过,两种情况发生几率为90%10%
于是我们可以得出对于每个学生的预测损失为
90% * -log90% + 10% * -log(1-90%)
全体样本损失即
在这里插入图片描述

参数更新

在这里插入图片描述
在这里插入图片描述

总结

最后获得的theta便精确定义了z(x), 所以逻辑回归和线性回归归根结底是一个东西,都是求出最佳的theta来拟合我们所有的数据,逻辑回归只是在线性回归的基础上再套了一层Sigmod函数,这就是为什么逻辑回归归属于线性回归的package中。

参考:https://blog.youkuaiyun.com/qq_21840201/article/details/81201131

多分类问题

有空再写…

### Python入门教程 #### 一、Python简介 作为一种高级编程语言,Python因其简洁清晰的语法而广受欢迎。这种特性使得它成为初学者的理想选择[^1]。 #### 二、基础语法规则 ##### 变量与数据类型 变量无需声明即可直接赋值使用,在Python中支持多种基本的数据类型: - 整数(int): 表示整数值, 如 `a = 10`。 - 浮点数(float): 表示带有小数部分的实数, 如 `b = 3.14`。 - 字符串(str): 使用单引号或双引号包裹的一系列字符, 如 `c = "hello"` 或者 `d = 'world'`。 - 布尔(bool): True 和 False 是唯一的两个布尔值。 ```python integer_example = 123 float_example = 123.456 string_example = "example" boolean_example = True ``` ##### 控制结构 控制流语句用于改变程序执行顺序,主要包括条件判断(if/elif/else)和循环(for/while): ```python if condition: do_something() elif another_condition: do_another_thing() else: final_action() for item in iterable_object: process(item) while expression_is_true: keep_doing_this() ``` ##### 函数定义 函数是一段具有特定功能可重复使用的代码块: ```python def function_name(parameters): """文档字符串""" # 执行逻辑... return result ``` #### 三、核心概念解析 ##### 面向对象编程(OOP) 面向对象是一种重要的编程范式,通过类(class)来创建自定义类型的实例(object),从而实现属性(attribute)和方法(method)封装。 ```python class ClassName: def __init__(self, param1, param2): self.attr1 = param1 self.attr2 = param2 def method(self): pass ``` ##### 异常处理机制 异常是指在程序运行过程中发生的错误情况,可以利用try-except-finally语句捕获并妥善处理这些意外状况。 ```python try: risky_operation() except SpecificException as e: handle_exception(e) finally: cleanup_resources() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值