第三章.逻辑回归—正确率/召回率/F1指标,非线性逻辑回归代码

news2024/11/16 21:52:28

第三章.逻辑回归

3.2 正确率/召回率/F1指标

正确率(Precision)和召回率(Recall)广泛应用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。

1.概念:

1).正确率:

  • 检索出来的条目有多少是正确的

2).召回率:

  • 所有正确的条目有多少被检索出来

3).F1:

  • 综合上面两个指标的评估指标,用于综合反映整体指标:F1=2*((正确率*召回率)/(正确率+召回率))

4).取值范围:

  • 这几个指标的取值都在0-1之间,数值越接近于1,效果越好。

5).举例:

  • 某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的,撒一大网,逮着了700条鲤鱼,200只虾,100只鳖,那么这些指标如下:
    ①.正确率:700/(700+200+100)=70%
    ②.召回率:700/1400=50%
    ③.F值:2*((70*50)/(70+50))=58.3%

2.两个指标的平衡

  • 我们希望检索结果Precision和Recall越高越好,但事实上这两者在某些情况下是矛盾的
  • 比如极端情况下,我们只搜索出了一个结果,且是准确的,那个Precision就是100%,但是Recall就很低,而我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。
  • 在不同的场合中需要自己判断是希望Precision比较高还是Recall比较高

3.综合评价指标

正确率与召回率指标有时候会出现矛盾的情况,这就需要综合考虑他们,最常见的方法就是F-Measure(又称F-Score)

1).公式:

在这里插入图片描述

2).当β=1时,就是常见的F1指标:

在这里插入图片描述

4.实战1:梯度下降法—非线性逻辑回归:

1).CSV中的数据:

  • LR-testSet2.csv

2).代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import classification_report
from sklearn import preprocessing
from sklearn.preprocessing import PolynomialFeatures  # 产生多项式的

# 数据是否是要标准化
scale = False

# 加载数据
data = np.genfromtxt('D:\\Data\\LR-testSet2.csv', delimiter=',')

# 数据切片
x_data = data[:, :-1]
y_data = data[:, -1, np.newaxis]


# 绘制散点图
def plot():
    x0 = []
    y0 = []
    x1 = []
    y1 = []
    # 切分不同类别的数据
    for i in range(len(x_data)):
        if y_data[i] == 0:
            x0.append(x_data[i, 0])
            y0.append(x_data[i, 1])
        else:
            x1.append(x_data[i, 0])
            y1.append(x_data[i, 1])

    scatter0 = plt.scatter(x0, y0, c='b', marker='o')
    scatter1 = plt.scatter(x1, y1, c='r', marker='x')

    plt.legend(handles=[scatter0, scatter1], labels=['label1', 'label2'])


plot()
plt.show()


# sigmoid函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))


# 代价函数
def cost(xMat, yMat, ws):
    value1 = np.multiply(yMat, np.log(sigmoid(xMat * ws)))
    value2 = np.multiply(1 - yMat, np.log(1 - sigmoid(xMat * ws)))
    return np.sum(value1 + value2) / -(len(xMat))


# 梯度下降法
def gradAscent(xArr, yArr):
    if scale == True:
        xArr = preprocessing.scale(xArr)

    xMat = np.mat(xArr)
    yMat = np.mat(yArr)

    lr = 0.03
    epochs = 50000
    costList = []

    # 计算数据列数,有几列就有几个权值
    m, n = np.shape(xMat)

    # 初始化权值
    ws = np.mat(np.ones((n, 1)))

    for i in range(epochs + 1):
        h = sigmoid(xMat * ws)
        # 计算误差
        ws_grad = xMat.T * (h - yMat) / m
        ws = ws - lr * ws_grad

        if i % 50 == 0:
            costList.append(cost(xMat, yMat, ws))

    return ws, costList


# 定义多项式回归,degree的值可以调节多项式的特征
poly_reg = PolynomialFeatures(degree=3)

# 特征处理
x_poly = poly_reg.fit_transform(x_data)

# 训练模型
ws, costList = gradAscent(x_poly, y_data)

# 获取数据值所在的范围
x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1
y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1

# 生出网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))

# 特征处理+维度转换
z = sigmoid(poly_reg.fit_transform(np.c_[xx.ravel(), yy.ravel()]).dot(np.array(ws)))

for i in range(len(z)):
    if z[i] >= 0.5:
        z[i] = 1
    else:
        z[i] = 0

z = z.reshape(xx.shape)

# 等高线图
cs = plt.contourf(xx, yy, z)
plot()
plt.show()


# 预测
def predict(x_data, ws):
    if scale == True:
        x_data = preprocessing(x_data)
    xMat = np.mat(x_data)
    ws = np.mat(ws)
    return [1 if x >= 0.5 else 0 for x in sigmoid(xMat * ws)]


predictions = predict(x_poly, ws)

print(classification_report(y_data, predictions))

3).结果展示:

①.数据

在这里插入图片描述

②.图像

在这里插入图片描述

5.实战2: sklearn—非线性逻辑回归:

1).代码

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
from sklearn.datasets import make_gaussian_quantiles

# 生成二维正态分布,生成的数据按分位数分为两类,500个样本,2个样本特征
# 可以生成两类或多类数据
x_data, y_data = make_gaussian_quantiles(n_samples=500, n_features=2, n_classes=2)
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()

# 定义多项式回归,degree的值可以调节多形式的特征
poly_reg = PolynomialFeatures(degree=5)

# 特征处理
x_poly = poly_reg.fit_transform(x_data)

# 定义并训练模型
logistic = linear_model.LogisticRegression()
logistic.fit(x_poly, y_data)

# 获取数值所在范围
x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1
y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1

# 生成网络矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))

z = logistic.predict(poly_reg.fit_transform(np.c_[xx.ravel(), yy.ravel()]))

z = z.reshape(xx.shape)

# 绘制等高线
cs = plt.contourf(xx, yy, z)

# 样本散点图
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)

plt.show()

print('score:', logistic.score(x_poly, y_data))

2).结果展示:

①.数据

在这里插入图片描述

②.图像

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187002.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Notepad++ 编写html代码快捷键切换到浏览器查看

一、设置Notepad 快速启动浏览器并且运行html1.找到Notepad的安装路径,找到Notepad 的shortcuts.xml文件。2.如图所示,用记事本打开【千万不要用Notepad打开】。打开之后可以看到里面的代码。以启动连接 chrome浏览器为例,选择对应的chrome 代…

【金融学】Financial Markets

Financial MarketsClass1 Financial Markets IntroductionWhat is Financial MarketsFinancial Topics课程目标Class1 Financial Markets Introduction What is Financial Markets “金融不仅仅是关于赚钱,金融应该是关于使某事发生” ----Robert Shiller. Financi…

TCP的3次握手细节

一、什么是TCP的三次握手在网络数据传输中,传输层协议TCP是要建立连接的可靠传输,TCP建立连接的过程,我们称为三次握手。三次握手的具体细节1. 第一次握手:Client将SYN置1,随机产生一个初始序列号seq发送给Server&…

虹科方案|使用 Thunderbolt™ 实现 VMware vSAN™ 连接

一、引言ATTO的Thunderbolt支持VMware ESXi 和ThunderLink产品线,使我们能够创建基于Mac的vSphere设置,从而能够为我们的macOS服务器提供虚拟化服务。 将虚拟硬件、快照和Veeam备份与macOS服务器的简单性相结合,将改变SMB市场的游戏规则。二、…

SVPWM控制技术+Matlab/Simulink仿真详解

文章目录前言一、SVPWM的控制原理二、空间矢量的概念三、电压与磁链空间矢量的关系四、三相逆变器的基本电压空间矢量五、SVPWM 算法的合成原理六、SVPWM 算法推导6.1.七段式SVPWM6.2.五段式SVPWM(又称DPWM)七、SVPWM 算法实现7.1.合成矢量Uref所处扇区的…

【手写 Promise 源码】第十篇 - Promise.prototype.catch 和 Promise.prototype.finally 的实现

theme: fancy 一,前言 上篇,主要实现了 Promise 的两个静态 API(类方法):Promise.resolve 和 Promise.reject,主要涉及以下几个点: Promise.resolve 创建并返回一个成功的 promise&#xff1…

WebDAV之葫芦儿·派盘+纯纯写作

纯纯写作 支持WebDAV方式连接葫芦儿派盘。 推荐一款简单的纯文本编辑软件,纯粹、有安全感、随时、绝对不丢失内容、具备良好的写作体验。界面非常简洁,且功能齐全,旨在给用户们提供贴心、舒适的写作服务。纯纯写作可以实现在Windows桌面PC, Android设备上同步的移动办公软件…

梦熊杯-十二月月赛-钻石组-B.卷王

B. Problem B.卷王(study.cpp) 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述: 在某个群里,有一个卷王,他很关心群友的学习成绩。 他扬言…

Web API请求查询字符串超长问题

调用Web API时返回“HTTP Error 404.15 - Not Found”的错误提示,如下截图: 经检查,传递的查询参数字符长度超过IIS默认最大查询字符串长度的设置,IIS服务器的 maxQueryString(单位:字节) 设置&…

一杯白酒搅动的资本江湖

王家卫的电影《东邪西毒》中有句经典台词:酒越喝越暖,水越喝越寒。江湖刀光剑影,唯有酒让武林人士在奔波途中心中一暖。然而,在白酒搅动的资本江湖中,酒企已经很久没有感受到上市的“暖意”了。自2016年金徽酒挂牌上交…

网络基础2--HTTP协议详解

目录 一、自定制协议 二、TCP粘包问题 2.1. 定长结构体和非定长结构体在发送时的区别 2.2. 那么为什么内存不连续的结构体不能直接使用send发送呢? 2.2. 那我们怎样去接收不定长的数据呢? 2.3. 我们怎样去接收不连续的内存呢? 2.4序列化和…

shiro权限框架介绍以及springboot整合shiro

What is Apache Shiro? Apache Shiro is a powerful and flexible open-source security framework that cleanly handles authentication, authorization, enterprise session management and cryptography. Apache Shiro’s first and foremost goal is to be easy to use…

LDO的dropout voltage

目录从一个设计错误谈起Dropout压降从芯片内部电路结构理解dropout压降MOS管 > 低dropout压降的LDO进一步降低dropout压降的方法在系统设计中,电源管理是不可或缺的,而LDO(线性稳压器)是电源管理器件中及其重要的一类器件。其应…

【JUC系列】线程变量ThreadLocal详解

ThreadLocal简介 ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访…

Java-基础-2.常用类

一:object 他是java中最基础,最核心的类。在java类中,为申明extends,默认 extends Object。方法。 3.1 toString方法 public String toString()方法,其返回值是 String 类型,描 述当前对象的有关信息。 3.…

Java中的多态及应用示例

Java中的多态及实现示例简介实现示例instance of(待补)补入Java多态 简介 【预留(业务逻辑)接口的抽象类】对象 new 【实现了该 预留(业务逻辑)接口】的【预留业务逻辑接口的抽象类的子类】的 对象&…

Java_Git:5. 在IntelliJ IDEA中使用git

目录 1 在Idea中配置git 2 将工程添加至git 2.1 创建工程 2.2 创建本地仓库 2.3 将工程添加至本地仓库 2.4 推送到远程 3 从远程仓库克隆 4 从服务端拉取代码 1 在Idea中配置git 安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找…

C语言学习笔记-数据类型

在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 C数据可以从两方面宽泛的看:一、变量和常量;二、数据类型 从定义出发,变…

打造数字时代的“诺亚方舟”

玛雅人关于2012世界末日的预言除了提供给好莱坞灵感,拍摄了令人震撼的灾难片《2012》之外,似乎没有留下什么,人们已经渐渐淡忘了世界末日的说法。 但现实世界中却接二连三地在发生着重大灾难:2018年巴西国家博物馆大火&#xff0c…

(考研湖科大教书匠计算机网络)第三章数据链路层-第四节:可靠传输

专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:可靠传输基本概念(1)不可靠传输与可靠传输(2)分组丢失、分组失序和分组重复(3)可靠传输注意二&#xff1…