Logistic回归--实例

article/2025/9/12 5:04:59

逻辑回归

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

梯度上升算法

在这里插入图片描述
求函数的极值:

"""
函数说明:梯度上升算法测试函数求函数f(x) = -x^2 + 4x的极大值Parameters:无
Returns:无
"""
def Gradient_Ascent_test():def f_prime(x_old):                                    #f(x)的导数return -2 * x_old + 4x_old = -1                                            #初始值,给一个小于x_new的值x_new = 0                                            #梯度上升算法初始值,即从(0,0)开始alpha = 0.01                                        #步长,也就是学习速率,控制更新的幅度presision = 0.00000001                                #精度,也就是更新阈值while abs(x_new - x_old) > presision:x_old = x_newx_new = x_old + alpha * f_prime(x_old)            #上面提到的公式print(x_new)                                        #打印最终求解的极值近似值if __name__ == '__main__':Gradient_Ascent_test()

运行结果:

1.999999515279857

通过运行结果可以了解到,同过python所求出来的解十分的接近2了。

案例

数据集下载:https://github.com/Jack-Cherish/Machine-Learning/blob/master/Logistic/testSet.txt

-0.017612	14.053064	0
-1.395634	4.662541	1
-0.752157	6.538620	0
-1.322371	7.152853	0
0.423363	11.054677	0
0.406704	7.067335	1
0.667394	12.741452	0
-2.460150	6.866805	1
0.569411	9.548755	0
-0.026632	10.427743	0

这个数据有两维特征,因此可以将数据在一个二维平面上展示出来。我们可以将第一列数据(X1)看作x轴上的值,第二列数据(X2)看作y轴上的值。而最后一列数据即为分类标签。根据标签的不同,对这些点进行分类。

import matplotlib.pyplot as plt
import numpy as np"""
函数说明:加载数据Parameters:无
Returns:dataMat - 数据列表labelMat - 标签列表
"""
def loadDataSet():dataMat = []                                                        #创建数据列表labelMat = []                                                        #创建标签列表fr = open('testSet.txt')                                            #打开文件   for line in fr.readlines():                                            #逐行读取lineArr = line.strip().split()                                    #去回车,放入列表dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])        #添加数据labelMat.append(int(lineArr[2]))                                #添加标签fr.close()                                                            #关闭文件return dataMat, labelMat                                            #返回"""
函数说明:绘制数据集Parameters:无
Returns:无
"""
def plotDataSet():dataMat, labelMat = loadDataSet()                                    #加载数据集dataArr = np.array(dataMat)                                            #转换成numpy的array数组n = np.shape(dataMat)[0]                                            #数据个数xcord1 = []; ycord1 = []                                            #正样本xcord2 = []; ycord2 = []                                            #负样本for i in range(n):                                                    #根据数据集标签进行分类if int(labelMat[i]) == 1:xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2])    #1为正样本else:xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2])    #0为负样本fig = plt.figure()ax = fig.add_subplot(111)                                            #添加subplotax.scatter(xcord1, ycord1, s = 20, c = 'red', marker = 's',alpha=.5)#绘制正样本ax.scatter(xcord2, ycord2, s = 20, c = 'green',alpha=.5)            #绘制负样本plt.title('DataSet')                                                #绘制titleplt.xlabel('x'); plt.ylabel('y')                                    #绘制labelplt.show()                                                            #显示if __name__ == '__main__':plotDataSet()

运行结果:

在这里插入图片描述
从上图可以看出数据的分布情况。假设Sigmoid函数的输入记为z,那么z=w0x0 + w1x1 + w2x2,即可将数据分割开。其中,x0为全是1的向量,x1为数据集的第一列数据,x2为数据集的第二列数据。另z=0,则0=w0 + w1x1 + w2x2。横坐标为x1,纵坐标为x2。这个方程未知的参数为w0,w1,w2,也就是我们需要求的回归系数(最优参数)。

import numpy as np"""
函数说明:加载数据Parameters:无
Returns:dataMat - 数据列表labelMat - 标签列表
"""
def loadDataSet():dataMat = []                                                        #创建数据列表labelMat = []                                                        #创建标签列表fr = open('testSet.txt')                                            #打开文件   for line in fr.readlines():                                            #逐行读取lineArr = line.strip().split()                                    #去回车,放入列表dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])        #添加数据labelMat.append(int(lineArr[2]))                                #添加标签fr.close()                                                            #关闭文件return dataMat, labelMat                                            #返回"""
函数说明:sigmoid函数Parameters:inX - 数据
Returns:sigmoid函数
"""
def sigmoid(inX):return 1.0 / (1 + np.exp(-inX))"""
函数说明:梯度上升算法Parameters:dataMatIn - 数据集classLabels - 数据标签
Returns:weights.getA() - 求得的权重数组(最优参数)
"""
def gradAscent(dataMatIn, classLabels):dataMatrix = np.mat(dataMatIn)                                        #转换成numpy的matlabelMat = np.mat(classLabels).transpose()                            #转换成numpy的mat,并进行转置m, n = np.shape(dataMatrix)                                            #返回dataMatrix的大小。m为行数,n为列数。alpha = 0.001                                                        #移动步长,也就是学习速率,控制更新的幅度。maxCycles = 500                                                        #最大迭代次数weights = np.ones((n,1))for k in range(maxCycles):h = sigmoid(dataMatrix * weights)                                #梯度上升矢量化公式error = labelMat - hweights = weights + alpha * dataMatrix.transpose() * errorreturn weights.getA()                                                #将矩阵转换为数组,返回权重数组if __name__ == '__main__':dataMat, labelMat = loadDataSet()           print(gradAscent(dataMat, labelMat))

运行结果:

[[ 4.12414349][ 0.48007329][-0.6168482 ]]

求解出回归系数[w0,w1,w2]

更多学习资讯,学习源码,请在耶宇星球领取

更多学习资讯,学习源码,请在耶宇星球领取

http://chatgpt.dhexx.cn/article/8QmP81cL.shtml

相关文章

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)最早是…

LVDS接口分类与数据格式

转发路径&#xff1a;https://blog.csdn.net/a617996505/article/details/82386952 1.LVDS接口分类与数据格式 单路6it LVDS 这种接口电路中&#xff0c;采用单路方式传输&#xff0c;每个基色信号采用6位数据&#xff0c;共18位RGB数据&#xff0c;因此&#xff0c;也称18位…

Xilinx fpga实现LVDS高速ADC接口

LVDS 即Low-Voltage Differential Signaling。FPGA的selecteIO非常强大&#xff0c;支持各种IO接口标准&#xff0c;电压电流都可以配置。其接口速率可以达到几百M甚至上千M。使用lvds来接收高速ADC产生的数据会很方便。像ISERDES&#xff0c;IDDR&#xff0c;IDELAY&#xff0…