机器学习笔记——逻辑斯蒂回归

news2024/11/18 19:45:12

参数化模型与非参数化

像前面的KNN模型,不需要对f的形式做出假设,在学习中可以得到任意的模型叫非参数化
而需要对参数进行学习的模型叫参数化模型,参数化限制了f的可能的集合,学习难度相对较低

逻辑斯蒂回归

逻辑斯蒂函数
在这里插入图片描述
似然函数
在这里插入图片描述
对数似然函数
在这里插入图片描述
在多分类使用softmax函数
在这里插入图片描述
在这里插入图片描述
重点

ROC曲线

真阳性率 、假阳性率 FPR的变化曲线就叫做ROC曲线
ROC曲线的面积就叫AUC

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
#%%
# 从源文件中读入数据并处理
lines = np.loadtxt('./data/lr_dataset.csv', delimiter=',', dtype=float)
x_total = lines[:, 0:2]
y_total = lines[:, 2]
print('数据集大小:', len(x_total))
#%%
pos_index=np.where(y_total==1)
neg_index=np.where(y_total==0)
plt.scatter(x_total[pos_index,0],x_total[pos_index,1],marker='o',color='coral',s=10)
plt.scatter(x_total[neg_index,0],x_total[neg_index,1],marker='x',color='blue',s=10)
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()

#%%
np.random.seed(0)
ratio = 0.7
split = int(len(x_total) * ratio)
idx = np.random.permutation(len(x_total))
x_total = x_total[idx]
y_total = y_total[idx]
x_train, y_train = x_total[:split], y_total[:split]
x_test, y_test = x_total[split:], y_total[split:]

#%%
y_test
idx=np.argsort(y_test[::-1])

#%%
y_test
#%%
def acc(y_true,y_pred):
    return np.mean(y_true==y_pred)
def auc(y_true,y_pred):
    idx=np.argsort(y_pred)[::-1]
    y_true=y_true[idx]
    y_pred=y_pred[idx]
    tp=np.cumsum(y_true) #累加
    fp=np.cumsum(1-y_true)
    tpr=tp/tp[-1]
    fpr=fp/fp[-1]
    s=0.0
    tpr = np.concatenate([[0], tpr]) #拼接函数
    fpr = np.concatenate([[0], fpr])
    for i in range(1, len(fpr)):
        s += (fpr[i] - fpr[i - 1]) * tpr[i]
        return s
#%%

def logistic(z):
    return 1/(1+np.exp(-z))
def GD(num_steps,learning_rate,l2_coef):
    theta=np.random.normal(size=(X.shape[1],))
    train_losses=[]
    test_losses = []
    train_acc = []
    test_acc = []
    train_auc = []
    test_auc = []
    for i in range(num_steps):
        pred = logistic(X @ theta)
        grad = -X.T @ (y_train - pred) + l2_coef * theta
        theta -= learning_rate * grad
        train_loss = - y_train.T @ np.log(pred) \
                     - (1 - y_train).T @ np.log(1 - pred) \
                     + l2_coef * np.linalg.norm(theta) ** 2 / 2
        train_losses.append(train_loss / len(X))
        test_pred = logistic(X_test @ theta)
        test_loss = - y_test.T @ np.log(test_pred) \
                    - (1 - y_test).T @ np.log(1 - test_pred)
        test_losses.append(test_loss / len(X_test))
        # 记录各个评价指标,阈值采用0.5
        train_acc.append(acc(y_train, pred >= 0.5))
        test_acc.append(acc(y_test, test_pred >= 0.5))
        train_auc.append(auc(y_train, pred))
        test_auc.append(auc(y_test, test_pred))
    return theta, train_losses, test_losses, \
    train_acc, test_acc, train_auc, test_auc
#%%
# 定义梯度下降迭代的次数,学习率,以及L2正则系数
num_steps = 250
learning_rate = 0.002
l2_coef = 1.0
np.random.seed(0)

# 在x矩阵上拼接1
X = np.concatenate([x_train, np.ones((x_train.shape[0], 1))], axis=1)
X_test = np.concatenate([x_test, np.ones((x_test.shape[0], 1))], axis=1)

theta, train_losses, test_losses, train_acc, test_acc, \
    train_auc, test_auc = GD(num_steps, learning_rate, l2_coef)

# 计算测试集上的预测准确率
y_pred = np.where(logistic(X_test @ theta) >= 0.5, 1, 0)
final_acc = acc(y_test, y_pred)
print('预测准确率:', final_acc)
print('回归系数:', theta)

plt.figure(figsize=(13, 9))
xticks = np.arange(num_steps) + 1


#%%
# 绘制训练曲线
plt.subplot(221)
plt.plot(xticks, train_losses, color='blue', label='train loss')
plt.plot(xticks, test_losses, color='red', ls='--', label='test loss')
plt.gca().xaxis.set_major_locator(MaxNLocator(integer=True))
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

#%%
# 绘制准确率
plt.subplot(222)
plt.plot(xticks, train_acc, color='blue', label='train accuracy')
plt.plot(xticks, test_acc, color='red', ls='--', label='test accuracy')
plt.gca().xaxis.set_major_locator(MaxNLocator(integer=True))
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()

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

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

相关文章

FPGA-ARM架构与分类

ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)处理器架构。 主要是根据FPGA zynq-7000的芯片编写的知识思维导图总结,废话不多说自取吧 …

等保测评 | 等保测评简介及流程具体是什么?

等保测评是指对信息系统进行安全性评估和测试,以确保其符合国家相关等级保护要求。在当前信息时代,各类机构和企业面临着日益严峻的网络安全风险,等保测评成为了保障信息系统安全的重要手段之一。本文将介绍等保测评的基本概念、流程和重要性…

通过 SFP 接口实现千兆光纤以太网通信2

Tri Mode Ethernet MAC IP 核结构 时钟网络 IP 核内部时钟网络结构如下图所示。其中,tx_mac_aclk 为 AXI-Stream 发送接口的同步时钟, rx_mac_aclk 为 AXI-Stream 接收接口的同步时钟。由于在设计中没有使用 MDIO 接口,所以不存在时钟信号 …

Linux【安全 02】OpenSSH漏洞修复(离线升级最新版本流程)网盘分享3个安装包+26个离线依赖

OpenSSH离线升级最新版本流程 1. 漏洞信息2. 环境说明3.依赖安装3.1 在线安装3.2 离线安装 4.备份卸载4.1 备份4.2 卸载旧版本 5.安装5.1 zlib5.2 ssl5.3 openssh5.3.1 安装5.3.2 配置 6.脚本整理7.文件资源 本文仅针对CentOS7.8版本,其他版本未测试,安装…

Java18新版本特性!

Java 18引入了多项新特性,主要包括默认UTF-8字符集、简单的Web服务器、栈步进API等。Java 18是Oracle在2022年发布的版本,其旨在通过一系列创新特性来提升开发效率与性能。下面将逐一探讨Java 18的主要新特性以及它们对开发者的具体影响: 默认…

“迎七一、学党史、祭英烈”活动在孙善师孙善帅烈士故居启动

临沂信息联播讯(张春兄、冯爱云) 5月30日,山东省著名烈士孙善师孙善帅故居迎来了山东全味时间企业管理咨询服务有限公司、志林丽虹沂蒙文化传播(临沂)有限公司、山东志林搏击健身有限公司的参观团队,标志着…

MathType数学公式编辑器7.6免费官方最新绿色版本下载

MathType作为一款强大的数学公式编辑器,广泛应用于教育界和科研领域。然而,尽管其功能强大,一些用户可能对其高级功能和使用技巧不够了解,无法充分发挥其潜力。本文旨在教育读者如何更高效地使用MathType来编写和编辑数学文档&…

代码随想录——二叉搜索树的最小绝对差(Leetcode530)

题目链接 层序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) …

Vue 框选区域放大(纯JavaScript实现)

需求:长按鼠标左键框选区域,松开后放大该区域,继续框选继续放大,反向框选恢复原始状态 实现思路:根据鼠标的落点,放大要显示的内容(内层盒子),然后利用水平偏移和垂直偏…

25. 悲观锁 和 乐观锁

文章目录 悲观锁 和 乐观锁1.基于CAS实现乐观锁2.自旋锁2.1.不可重入自旋锁2.2.可重入自旋锁2.3.CLH自旋锁 悲观锁 和 乐观锁 Java中的synchronized就是悲观锁的一个实现,悲观锁可以确保无论哪个线程持有锁,都能独占式的访问临界区代码,虽然悲…

Linux基本命令的使用(ls cd touch)

一、Windows系统常见的文件类型 • 文本文件格式:txt、doc、pdf、html等。 • 图像文件格式:jpg、png、bmp、gif等。 • 音频文件格式:mp3、wav、wma等。 • 视频文件格式:mp4、avi、wmv、mov等。 • 压缩文件格式:zip…

连通块中点的数量-java

本次我们通过连通块中点的数量来加深我们对并查集的基本操作和原理,并且知道如何在并查集中添加附属信息。 目录 前言☀ 一、连通块中点的数量☀ 二、算法思路☀ 1.无向图🌙 2.在a b之间连一条边,a b可能相等🌙 3.询问a和b是否在一…

sudo命令的隐患-要注意安全使用!!严格管理!!严格控制

前言 众所周知,sudo命令非常方便,而且有一定的优点。比如不需要知道root密码就可以执行一些root的命令。相比于su 必须知道root密码来说,减少了root密码泄露的风险。 但是sudo也是一把非常锋利的双刃剑,需要加以限制,…

重庆人文科技学院建立“软件安全产学研基地”,推动西南地区软件安全发展

5月29日,重庆人文科技学院与开源网安签订了《产学研校企合作协议》,并举行了“重庆人文科技学院产学研基地”授牌仪式,此次合作不仅深化了双方在软件安全领域的产学研紧密联结,更是对川渝乃至西南地区软件供应链安全发展起到重要的…

微信小程序 npm构建+vant-weaap安装

微信小程序:工具-npm构建 报错 解决: 1、新建miniprogram文件后,直接进入到miniprogram目录,再次执行下面两个命令,然后再构建npm成功 npm init -y npm install express(Node js后端Express开发&#xff…

【mysql】ssl_choose_client_version:unsupported protocol

起因:项目上的DolphinScheduler连接不上数据库,查看worker日志提到SSL协议问题: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureCaused by: java.io.EOFException: SSL peer shut down incorrectly 我…

KMPlayer v2024.4.25.13 官方版 (万能播放器)

前言 KMPlaye通过各种插件扩展KMP可以支持层出不穷的新格式。KMPlaye强大的插件功能,直接从Winamp继承的插件功能,能够直接使用Winamp的音频,输入,视觉效果插件,而通过独有的扩展能力,只要你喜欢&#xff…

工厂条码仓库管理系统是做什么的?

工厂条码仓库管理系统,可以分为两个概念:一个是仓库管理系统、一个是工厂条码。 在了解仓库管理和工厂条码之前,题主先了解一下企业的信息化建设: 企业信息化建设是企业提升生产效率、优化管理的重要手段。企业实现生产流程的数…

UE4 使用自带的插件制作音频可视化

1.插件默认为开启 2.新建共感NRT,选择要使用的音频 3.添加音频组件,添加共感NRT变量,选择新建的共感NRT对象 4.编写蓝图

从零到一建设数据中台 - 关键技术汇总

一、数据中台关键技术汇总 语言框架:Java、Maven、Spring Boot 数据分布式采集:Flume、Sqoop、kettle 数据分布式存储:Hadoop HDFS 离线批处理计算:MapReduce、Spark、Flink 实时流式计算:Storm/Spark Streaming、…