logistic回归——PYTHON实现

article/2025/9/11 23:45:00

logistic回归——PYTHON实现

概述:

logistic回归又称logistic回归分析,是一种线性回归模型。logistic回归应用最广泛的是处理二分类问题。比如,探讨引发疾病的危险因素,判断该病人是否患有该病;探讨房价的涨跌,进而给出在何时购买房子的最优决策。在logistic回归中,自变量可以是连续的,也可以是分立的。

​ 以预测房价涨跌为例,选择两种不同类型的房子,一种是涨价组,另一组是非涨价组,两组房子必定具有不同的占地面积、房屋位置、建筑年限等特征,因此因变量为是否涨价,自变量可以包括很多不同的特征,比如所在城市、占地面积等不同特征。

​ 通过logistic回归,可以得到自变量的权重,从而大致了解影响疾病发作、股票走势、房价涨跌的因素,同时根据这些权重值,预测发生某件事情的可能性。

​ 本文首先会介绍logistic回归所用到的基本的数学知识,接着会给出logistic回归在PYTHON中的编程实现。最后,会在大众比较熟悉且感兴趣的领域——股票预测方面应用logistic回归,观察其在量化投资方面的应用

logistic回归与线性回归:

​ logistic回归与线性回归均属于广义的线性模型,只不过logistic回归将输出又输入到sigmoid函数中,通过引入非线性因素,给出二分类问题中不同类别的概率值。

logistic回归所用到的基本数学原理:

​ 首先,与一般的机器学习算法一样,在输入参数时,首先应该选择输入的特征。比如,在预测房屋价格涨跌时,房屋面积可能是一个比较优秀的特征选择,而房屋所处小区的保安年龄可能就不是一个好的特征选择。因为特征提取、特征选择等特征工程是机器学习中的另一研究问题,本文在此不做赘述,仅选择能够获取到的数据当作其特征。

​ 选取好特征后,我们就可以构建一个线性函数:
y = w 0 + w 1 x 1 + w 2 x 2 + . . . + w k x k y = w_0+w_1x_1+w_2x_2+...+w_kx_k y=w0+w1x1+w2x2+...+wkxk
其中, w w w 为我们要寻找的各个参数值 x x x 为我们选取的各个特征值

​ 此时,假设我们已经寻找到所有 w w w 值,则可以将特征空间 x 1 , x 2 , . . . , x k x_1,x_2,...,x_k x1,x2,...,xk 上样本的特征值通过 w 1 , w 2 , . . . , w k w_1,w_2,...,w_k w1,w2,...,wk 映射到值域空间 y y y 上,但此时 y y y 可能为某巨大的数,也可能为某负数,因此,我们引入一个非线性函数,将 y y y映射 ( 0 , 1 ) (0,1) (0,1) 范围内的一个值。sigmoid函数如下图所示。

在这里插入图片描述s

`于是,我们就建立了概率值 P P P y y y关系:
l n ( P 1 − P ) = y P = e y 1 + e y ln(\frac{P}{1-P})=y \\ P=\frac{e^y}{1+e^y} ln(1PP)=yP=1+eyey
​ 最终,我们就可以通过这样一个计算图计算出某个类别的概率值:
在这里插入图片描述

​ 但是,目前我们只是应用了 W W W 的值,我们并没有通过大量样本计算其值。因此,我们引入一个新的概念——梯度下降,来计算,准确来说是纠正这个向量的值。

​ 梯度下降法,顾名思义,计算过程就是沿梯度下降的方向求解极小值。

​ 现在我们又有一个问题,何为极小值?准确来说,这个值到底是怎么算出来的?在机器学习中,对于每个算法,我们都会引入一个函数,称其为代价函数。该代价函数衡量了我们训练的模型的好坏,衡量了这个算法的性能。代价函数最小为0,最大为正无穷,当代价函数为0时,该算法在训练集上的准确度为100%,但我们在训练时不应让代价函数为0,因为当代价函数为0时,模型会将训练集中的噪声也学习进去,因而在测试集上可能表现并不好。

​ 介绍完代价函数的作用,代价函数到底该怎么选取?对于一般的拟合模型,在不考虑噪声的情况下,最优的结果即为通过那些点的一条曲线。当通过这些点时,拟合值与真实值相等,形象的说就是目标与当前所处位置重合。因此,在定义代价函数时,我们遵循的是:目前状态与当前状态之间的距离差。(该处类似于评估模型TOPSIS法中某方案与最优方案的相对接近程度,也就是TOPSIS中的评估值)

​ 对于这个问题,我们先定义一个样本的损失函数如下:
L ( y ^ , y ) = − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) L(\hat{y},y)=-ylog(\hat{y})-(1-y)log(1-\hat{y}) L(y^,y)=ylog(y^)(1y)log(1y^)
​ 然后定义算法的代价函数如下:
J ( w ) = 1 k ∑ L ( y ^ ( i ) , y ( i ) ) J(w)=\frac{1}{k}\sum{L(\hat{y}^{(i)},y^{(i)})} J(w)=k1L(y^(i),y(i))
​ 该代价函数衡量了训练集整体的混乱度,即信息熵

所以,梯度下降法就是沿着梯度的方向,寻找一个最优的权重向量 W W W ,使得代价函数的函数值最小(但不是越小越好)。

​ 至此,我们介绍完了logistic回归所要应用的所有数学公式。下面,展示logistic编程与调包。

编程:

# -*- coding: utf-8 -*-
import numpy as npclass Logistic():def __init__(self):# 生成训练样本,其中a为特征值,b为标签a=[[0.50, 0.75, 1.00, 1.25, 1.50, 1.75, 1.75, 2.00, 2.25,2.50, 2.75, 3.00, 3.25, 3.50, 4.00, 4.25, 4.50, 4.75, 5.00, 5.50]]a=np.array(a)a=a.Tones=np.ones((a.shape[0],1))a=np.column_stack((ones,a))b=[[0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1]]b=np.array(b)b=b.Tself.data_set=aself.data_target=bself.feature_size=self.data_set.shape[1]self.number_size=self.data_set.shape[0]self.W=np.random.randn(self.feature_size)passdef LG_Linear(self):#线性层,将特征空间映射为值域空间y=np.dot(self.data_set,self.W.transpose())y=np.array([y])y=y.Treturn ypassdef LG_sigmoid(self,y):#非线性层,将值域空间映射为(0,1)P=np.exp(y)/(1+np.exp(y))return Ppassdef LG_cost(self,P,target):#损失函数cost=-target*np.log(P)-(1-target)*np.log(1-P)return costpassdef BP(self,P,target):#反向传播函数learningrate=0.05for i in range(self.number_size):dz=P[i][0]-target[i][0]#dz为代价函数求导所得dw=self.data_set[i][:]*dzself.W=self.W-learningrate*dwprint(self.W)return self.Wpassdef predict(self,x):#预测函数pre=np.dot(self.W,x.transpose())pre=self.LG_sigmoid(pre)return prepasspass
def main():lg=Logistic()y=lg.LG_Linear()P=lg.LG_sigmoid(y=y)# lg.LG_cost(P=P,target=lg.data_target)for _ in range(10):lg.BP(P=P,target=lg.data_target)pre=lg.predict(np.array([[1,5]]))print(lg.W)print(pre)passif __name__ == '__main__':main()

调包:

# -*- coding: utf-8 -*-# 导包
import numpy as np
from sklearn.linear_model import LogisticRegression# 加载数据a = [[0.50, 0.75, 1.00, 1.25, 1.50, 1.75, 1.75, 2.00, 2.25, 2.50, 2.75, 3.00, 3.25, 3.50, 4.00, 4.25, 4.50, 4.75, 5.00,5.50]]
a = np.array(a)
a = a.T
b = [[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
b = np.array(b)
b = b.T
x=a
y=blr = LogisticRegression()# 训练数据
lr.fit(x,y)#求出w斜率和b截距的值
w = lr.coef_
b = lr.intercept_
print(w, b)# 预测一下概率
predict= lr.predict_proba([[3]])
print(predict)

http://chatgpt.dhexx.cn/article/OA6a8vtw.shtml

相关文章

二项logistic回归案例分析(附操作数据)

当因变量数据类型为分类变量时,线性回归不再适用,应当做logistic回归。根据因变量分类水平的不同,具体包括二项logistic回归、多项logistic回归和有序logistic回归。 1.案例背景与分析策略 1.1 案例背景介绍 现收集到银行贷款客户的个人、…

Logistic回归--实例

逻辑回归 Logistic回归一种二分类算法,它利用的是Sigmoid函数阈值在[0,1]这个特性。Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。其实,Logistic本质上是一个基于条件概率的判别模型(D…

SPSS(八)logistic回归(图文+数据集)

SPSS(八)logistic回归 我们之前的线性回归也好、线性回归衍生方法也好、非线性回归也好,因变量的类型都是连续性的,假如因变量的类型是分类的呢?logistic回归针对的是二分类的因变量 logistic回归 基于线性回归模型…

2.2、logistic回归

一、什么是logistics回归 首先我们先要了解回归的概念,现有一些数据点,我们用 一条直线对这些点进行拟合,该线称为最佳拟合直线,这个拟合过程就称作回归。logistic回归虽然说是回归,但确是为了解决分类问题&#xff0…

Logistic Regression(逻辑回归)详细讲解

Logistic Regression(逻辑回归) 以前在学校学到Logistic Regression的时候,虽然最后会使用,但是对于许多地方有很多的疑惑,今天在这里详细梳理一下Logistic Regression的过程: Logistic Regression逻辑回归 回归的思想Logistic R…

第13章Stata Logistic回归分析

目录 13.1二元Logistic回归分析 案例延伸 延伸1:设定模型预测概率得具体值 延伸2:使用Probit模型对二分类因变量进行拟合 13.2多元Logistic回归分析 案例延伸 延伸:根据模型预测每个样本视力低下程度的可能性 13.3有序Logistic回归 …

机器学习笔记-Logistic回归

0 - 回顾 l i n e a r r e g r e s s i o n linear\ regression linear regression如果使用平方错误的话,我们可以很方便的解析出最好的 w w w是什么。即 w b e s t X † y w_{ best}X^{\dagger} y wbest​X†y 1 - 逻辑斯蒂回归问题 1.1 - 问题的提出 从一个人…

logistic回归详解

逻辑斯谛回归(logistic regression)是统计学习中的经典分类方法,虽然带有回归的字眼,但是该模型是一种分类算法,逻辑斯谛回归是一种线性分类器,针对的是线性可分问题。利用logistic回归进行分类的主要思想是…

机器学习笔记(六)Logistic回归

目录 一、什么是Logistics回归 二、sigmoid函数 三、梯度上升法 四、代码实现 数据导入 决策边界 梯度上升 五、总结 一、什么是Logistics回归 logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相…

【机器学习】Logistic回归(重新整理)

Logistic回归学习笔记 Logistic回归学习线路预备知识:建议先去B站学习一下信息量,熵,BL散度,交叉熵的概念。Logistic回归的函数模型损失函数、损失最小化架构对数损失作为损失函数损失最小化架构 分类函数最大概率分类函数阈值分类…

C语言 fprintf 函数 - C语言零基础入门教程

目录 一.fprintf 函数简介二.fprintf 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.fprintf 函数简介 fprintf 是 C / C 中的一个格式化库函数,位于头文件 中,其作用是格式化输出到一个流文件中&#xff1…

【printf函数的具体用法】

一、printf()函数 1、基本输出语句 printf()函数是C语言的输出函数,功能是按指定的输出格式把相应的参数值在标准的输出设备中显示出来。 printf 的格式 printf(格式控制串,参数1,参数2,…),…

C语言printf函数详解

文章目录 1、类型符(type)2、宽度(width)3、对齐标志(flags)4、精度(prec)5、格式化输出到字符串6、版权声明 C语言格式化输出的函数有printf、sprintf和snprintf等,功能…

printf函数讲解

printf函数讲解 #include <stdio.h>/*辗转相除法求最大公约数*/ int gcd(int m, int n); int factrial(int a); int main(void){int m, n, t;scanf_s("%d %d", &m, &n);if (m < n){t m;m n;n t;}//n gcd(m, n);//printf("%d", n);pr…

C语言中fscanf和fprintf函数的使用

目录 一、前言 二、对比 1、scanf和fscanf&#xff1a; 2、printf和fprintf&#xff1a; 三、结论&#xff1a; 四、代码实现 1、fprintf相关代码 2、fscanf代码实现 3、 用fscanf和fprintf实现scanf和printf功能&#xff1a; 一、前言 在了解fscanf和fprintf之前我…

printf()函数详解

感谢博主的分享&#xff1a;https://me.csdn.net/blog/K346K346 1.printf()简介 printf()是C语言标准库函数&#xff0c;用于将格式化后的字符串输出到标准输出。标准输出&#xff0c;即标准输出文件&#xff0c;对应终端的屏幕。printf()申明于头文件stdio.h。 函数原型&am…

有关于fprintf()函数的用法

fprintf&#xff08;简介&#xff09; fprintf是C/C中的一个格式化库函数&#xff0c;位于头文件中&#xff0c;其作用是格式化输出到一个流文件中&#xff1b;函数原型为int fprintf( FILE *stream, const char *format, [ argument ]…)&#xff0c;fprintf()函数根据指定的格…

雷达理论的模糊函数

在雷达理论中&#xff0c;模糊与分辨是两个既有联系又有区别的概念。对多个目标来说&#xff0c;模糊就是不能分辨。雷达的分辨力取决于模糊图中心主瓣的宽度。雷达模糊度不仅考虑主瓣宽度&#xff0c;还考虑模糊图旁瓣的影响。因此&#xff0c;在研究雷达分辨理论之前&#xf…

驱动板LVDS输出接口(发送器),液晶面板LVDS输入接口(接收器)

1&#xff0e;LVDS输出接口概述 液晶显示器驱动板输出的数字信号中&#xff0c;除了包括RGB数据信号外&#xff0c;还包括行同步、场同步、像素时钟等信号&#xff0c;其中像素时钟信号的最高频率可超过28MHz。采用TTL接口&#xff0c;数据传输速率不高&#xff0c;传输距离较短…

两种LVDS数传接口--车载视频传输

本文介绍两种LVDS数传接口&#xff1a;GMSL和FPD Link&#xff0c;这两种接口在汽车视频传输方面的应用是比较广泛的&#xff0c;尤其是Camera和处理器之间的链路&#xff0c;通过STP或者同轴电缆能使整个链路达到15m。 1、FPD Link Flat Panel Display Link(FPD Link)最早是…