【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题
【机器学习实战】kaggle 欺诈检测---如何解决欺诈数据中正负样本极度不平衡问题
https://blog.csdn.net/2302_79308082/article/details/145177242
本篇文章是基于上次文章中提到的对抗生成网络,通过对抗生成网络生成少数类样本,平衡欺诈数据中正类样本极少的问题。
本人主页:机器学习小小白
机器学习专栏:机器学习实战
PyTorch入门专栏:PyTorch入门
深度学习实战:深度学习
ok,话不多说,我们进入正题吧
1. 引言
生成对抗网络(Generative Adversarial Networks,简称GAN)是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它在计算机视觉、自然语言处理、音频生成等领域得到了广泛应用。GAN的核心思想是通过两个神经网络之间的博弈关系来生成新的、仿真的数据。自从GAN提出以来,它已经成为生成模型领域的突破性进展,深刻改变了生成式模型的研究和应用。
2. GAN的基本原理
生成对抗网络的结构包括两个主要部分:生成器(Generator)和判别器(Discriminator)。这两个网络分别充当“对手”,并在训练过程中互相博弈:
-
生成器(Generator):该网络的目的是通过学习数据分布来生成尽可能接近真实数据的虚假样本。生成器从一个随机的噪声(通常是高维的向量)出发,逐步生成样本。
-
判别器(Discriminator):该网络的任务是判断一个样本是真实的(来自训练数据)还是虚假的(来自生成器)。判别器输出一个概率值,表示输入样本为真实数据的概率。
3. GAN的训练过程
GAN的训练过程是一个“博弈”过程,生成器和判别器不断互相对抗,从而提升各自的性能。这个过程可以通过以下的数学公式来表示:
- 判别器的目标:判别器的目标是最大化其对于真实数据的判断概率(即预测为1的概率),同时最小化对生成数据的错误分类(即预测为0的概率)。可以通过以下的交叉熵损失函数表示:
其中:
-
是从真实数据分布中采样的数据。
-
是生成器生成的样本,
是从潜在空间中采样的噪声。
-
是判别器对样本
的判别输出,表示其为真实数据的概率。
-
生成器的目标:生成器的目标是使判别器无法区分生成数据与真实数据,因此它通过最大化判别器对生成数据为真实的概率来进行训练:
-
-
其中:
是生成器生成的虚假样本,
是判别器对生成样本的输出,表示其为真实数据的概率。
在训练过程中,生成器和判别器会交替优化这两个损失函数。理想的结果是生成器能够生成与真实数据分布相似的样本,而判别器则无法有效地区分生成数据与真实数据。
4. GAN的应用
GAN具有强大的生成能力,广泛应用于多个领域,以下是一些典型的应用场景:
-
图像生成:GAN可以用于生成高度逼真的图像,如人脸、风景或艺术作品。典型的例子包括DeepArt和StyleGAN,后者能够生成几乎无法与真实人脸区分的图像。
-
图像到图像的转换:例如,利用GAN进行图像风格转换(如将照片转化为油画风格)、超分辨率重建(如提高图像的分辨率)、图像修复(如填补丢失部分)等任务。
-
文本生成:结合自然语言处理技术,GAN也可用于生成文本数据,如诗歌、故事生成等,尤其是文本生成和对话系统中的对抗训练。
-
音频生成:GAN被广泛应用于音频生成,如音乐生成、语音合成等。
-
数据增强:GAN可以用于数据增强,特别是在医疗图像领域,生成具有一定变异的图像样本,以增强训练数据集。
-
模型训练中的对抗样本生成:GAN可以生成对抗样本,即通过对训练数据进行微小扰动,生成能够误导模型的样本,这对提升模型的鲁棒性非常重要。
5. GAN的变种
GAN作为一种框架,已经发展出了多种变种,以满足不同应用的需求。以下是几种常见的GAN变种:
-
CGAN(Conditional GAN):在生成器和判别器中都加入了条件变量,使得生成的样本可以根据某些条件(如标签信息)进行控制。
-
WGAN(Wasserstein GAN):解决了传统GAN在训练过程中可能出现的梯度消失和模式崩溃问题。WGAN使用了Wasserstein距离作为生成器和判别器的损失函数。
-
DCGAN(Deep Convolutional GAN):使用卷积神经网络(CNN)来构建生成器和判别器,增强了GAN在图像生成任务中的表现。
-
CycleGAN:用于无监督学习场景,特别是在图像到图像的转换中,例如将一张照片转换成另一种风格(如马到斑马转换)。
6. 使用生成对抗网络(GAN)生成欺诈数据中少数类数据
1. 数据预处理与特征提取
import pandas as pd
import numpy as nptrain_df = pd.read_csv('/kaggle/input/credit-card-fraud-prediction/train.csv')
test_df = pd.read_csv('/kaggle/input/credit-card-fraud-prediction/test.csv')def time_feature(df):df['Time'] = pd.to_datetime(df['Time'], unit='s') # 将时间戳转为 datetime 格式# 提取时间特征df['hour'] = df['Time'].dt.hourdf['minute'] = df['Time'].dt.minute return df train_df = time_feature(train_df)
test_df = time_feature(test_df)
在欺诈检测任务中,时间特征(如交易发生的小时和分钟)通常是重要的,因为欺诈交易往往具有不同的时间模式。例如,欺诈交易可能集中在某些特定的时间段。
- 这里我们通过
pd.to_datetime()
将Time
列从Unix时间戳格式转换为日期时间格式。然后,我们提取了小时和分钟作为新的特征,用于训练模型。
train_feature = train_df.drop(columns=['id','IsFraud','Time'])
test_feature = test_df.drop(columns=['id','Time'])label = train_df['IsFraud']
train_feature
是用于训练的特征数据,删除了 id
, IsFraud
和 Time
列。IsFraud
是标签列,表示交易是否为欺诈交易;而 id
和 Time
列不包含有用的特征信息,因此可以去掉。
2. 标准化数据
from sklearn.preprocessing import StandardScaler# 标准化特征数据
scaler = StandardScaler()
train_feature_scaled = scaler.fit_transform(train_feature)
-
标准化(Standardization)是机器学习中常用的预处理步骤。它通过减去均值并除以标准差,使特征数据具有零均值和单位方差。标准化能够加速模型的收敛过程,尤其是在使用像神经网络这样的梯度优化模型时。
-
这里使用
StandardScaler
来对训练数据进行标准化,以确保所有特征在同一个量级。
3. 生成器与判别器的构建
生成器(Generator)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LeakyReLU, BatchNormalization, Inputdef build_generator(latent_dim, input_dim):model = Sequential()model.add(Input(shape=(latent_dim,))) # 使用 Input 层来指定输入维度model.add(Dense(256))model.add(LeakyReLU(0.2))model.add(BatchNormalization(momentum=0.8))model.add(Dense(512))model.add(LeakyReLU(0.2))model.add(BatchNormalization(momentum=0.8))model.add(Dense(1024))model.add(LeakyReLU(0.2))model.add(BatchNormalization(momentum=0.8))model.add(Dense(input_dim, activation='tanh')) # 输出层与原数据同维度return model
生成器(Generator)是GAN的核心部分,它通过接收随机噪声向量(潜在空间中的点),然后经过一系列的全连接层和激活函数,生成与原始数据分布相似的虚假数据。
- 在此,我们使用了
LeakyReLU
激活函数,它允许梯度通过负半轴流动,解决了传统ReLU可能出现的“死神经元”问题。BatchNormalization
用于加速网络的训练,并帮助改善模型的稳定性。
判别器(Discriminator)
def build_discriminator(input_dim):model = Sequential()model.add(Input(shape=(input_dim,))) # 使用 Input 层来指定输入维度model.add(Dense(1024))model.add(LeakyReLU(0.2))model.add(Dense(512))model.add(LeakyReLU(0.2))model.add(Dense(256))model.add(LeakyReLU(0.2))model.add(Dense(1, activation='sigmoid')) # 输出真假判定return model
判别器(Discriminator)的任务是判断输入数据是真实的还是由生成器生成的。它是一个二分类模型,输出是一个概率值,表示输入数据为真实的概率。
- 这里使用
sigmoid
激活函数,输出一个概率值。判别器学习将真实数据和生成数据区分开来。
4. GAN模型的组合与训练
def build_gan(generator, discriminator):discriminator.trainable = False # 在训练GAN时冻结判别器model = Sequential()model.add(generator)model.add(discriminator)return model# 定义优化器
optimizer = Adam()# 定义输入维度和潜在维度
latent_dim = 100 # 随机噪声的维度
input_dim = 31 # 输入数据的维度,例如欺诈检测数据的特征数# 创建并编译模型
generator = build_generator(latent_dim, input_dim)
discriminator = build_discriminator(input_dim)
gan = build_gan(generator, discriminator)# 编译判别器和GAN模型
discriminator.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
gan.compile(loss='binary_crossentropy', optimizer=optimizer)
-
生成对抗训练(Adversarial Training)是GAN的关键。生成器和判别器在一个博弈过程中互相优化。在训练过程中,生成器通过“欺骗”判别器来优化其生成数据的能力,而判别器则不断学习区分真实和生成数据。
-
在训练过程中,我们冻结判别器的参数,只训练生成器,这样可以避免在训练生成器时更新判别器的权重。
5. GAN训练函数
def train_gan(generator, discriminator, gan, fraud_data_scaled, epochs=10000, batch_size=64):valid = np.ones((batch_size, 1)) # 真数据标签fake = np.zeros((batch_size, 1)) # 假数据标签for epoch in range(epochs):# 随机选择真实欺诈数据idx = np.random.randint(0, fraud_data_scaled.shape[0], batch_size)real_data = fraud_data_scaled[idx]# 生成虚拟数据noise = np.random.normal(0, 1, (batch_size, latent_dim))generated_data = generator.predict(noise)# 训练判别器d_loss_real = discriminator.train_on_batch(real_data, valid)d_loss_fake = discriminator.train_on_batch(generated_data, fake)d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)# 训练生成器noise = np.random.normal(0, 1, (batch_size, latent_dim))g_loss = gan.train_on_batch(noise, valid)# 输出训练过程的损失if epoch % 1000 == 0:print(f'{epoch}/{epochs} [D loss: {d_loss[0]}] [G loss: {g_loss}]')
-
训练过程:在每个训练周期中,首先更新判别器的权重(通过训练它区分真实数据和生成数据),然后训练生成器(通过训练它欺骗判别器)。
-
损失函数:我们使用了
binary_crossentropy
损失函数,它用于二分类任务。在判别器的训练中,我们分别计算真实数据和生成数据的损失,然后平均得到判别器的总损失。生成器的损失则是通过GAN模型进行计算的。
6. 生成虚拟数据
def generate_fake_data(generator, num_samples):noise = np.random.normal(0, 1, (num_samples, latent_dim)) # 随机噪声generated_data = generator.predict(noise) # 生成虚拟数据# 将生成的数据转换回原始空间generated_data_original = scaler.inverse_transform(generated_data)# 获取原始负样本数据的列名(去除 'id', 'IsFraud', 'Time' 列)feature_columns = [col for col in train_df.columns if col not in ['id', 'IsFraud', 'Time']]# 将生成的数据与原始负样本数据(即非欺诈数据)结合,作为新的训练数据augmented_data = np.concatenate([train_df[train_df['IsFraud'] == 0].drop(columns=['id', 'IsFraud', 'Time']),generated_data_original], axis=0)augmented_label = np.concatenate([np.zeros(train_df[train_df['IsFraud'] == 0].shape[0]), np.ones(generated_data_original.shape[0])], axis=0)# 创建包含生成数据和标签的 DataFrameaugmented_df = pd.DataFrame(augmented_data, columns=feature_columns)augmented_df['IsFraud'] = augmented_labelreturn augmented_df
在这个函数中,我们使用训练好的生成器来生成新的虚拟欺诈数据,并将它们与真实的非欺诈数据结合,以增强数据集。然后,我们通过逆标准化将生成的数据转换回原始数据空间。
本次例子为了缩短训练时间,只生成了100条虚拟的正样本数据。
相关文章:
【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题
【机器学习实战】kaggle 欺诈检测---如何解决欺诈数据中正负样本极度不平衡问题https://blog.csdn.net/2302_79308082/article/details/145177242 本篇文章是基于上次文章中提到的对抗生成网络,通过对抗生成网络生成少数类样本,平衡欺诈数据中正类样本极…...
C++ 之多线程相关总结
C 之多线程相关总结 1.多线程相关基础知识 1.1 线程的创建和管理 1. std::thread 类: 用于创建和管理线程。通过将可调用对象(如函数、函数对象、lambda 表达式)作为参数传递给 std::thread 的构造函数,可以创建一个新的线程。…...
基于机器学习随机森林算法的个人职业预测研究
1.背景调研 随着信息技术的飞速发展,特别是大数据和云计算技术的广泛应用,各行各业都积累了大量的数据。这些数据中蕴含着丰富的信息和模式,为利用机器学习进行职业预测提供了可能。机器学习算法的不断进步,如深度学习、强化学习等…...
性能测试 - Locust WebSocket client
Max.Bai 2024.10 0. 背景 Locust 是性能测试工具,但是默认只支持http协议,就是默认只有http的client,需要其他协议的测试必须自己扩展对于的client,比如下面的WebSocket client。 1. WebSocket test Client “”“ Max.Bai W…...
量子计算将彻底改变商业分析
虽然量子计算听起来颇具未来感,但这项技术正迅速走向成熟 —— 就如同 ChatGPT 这类人工智能(AI)工具一样。我相信,量子计算技术所产生的连锁反应很快就会对业务分析领域产生巨大影响。 什么是量子计算? 尽管名字听起…...
爬山算法与模拟退火算法的全方面比较
一、基本概念与原理 1. 爬山算法 爬山算法是一种基于启发式的局部搜索算法,通过不断地向当前解的邻域中搜索更优解来逼近全局最优解。它的核心思想是,从当前解出发,在邻域内找到一个使目标函数值更大(或更小)的解作为新的当前解,直到找不到更优的解为止。 2.模拟退火算…...
【深度学习】用RML2018训练好模型去识别RML2016的数据会遇到输入维度不匹配的问题,如何解决?
文章目录 问题解决办法1. 调整输入数据长度2. 修改模型结构(我个人比较推崇的方法)3. 迁移学习4. 重新训练模型5. 数据增强6. 其他差异问题 经常会有人问的一个问题: 我用RML2018跑的调制识别模型,用RML2016数据集能直接识别吗?(2018数据集信号样本的长度是1024,2016数据集…...
2025年1月17日(点亮一个 LED)
系统信息: Raspberry Pi Zero 2W 系统版本: 2024-10-22-raspios-bullseye-armhf Python 版本:Python 3.9.2 已安装 pip3 支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480) 已安装 vim 已安装 git 学习目标:…...
商用车电子电气零部件电磁兼容条件和试验(8)—辐射抗干扰(ALSE)和便携式发射机抗干扰(HPT)
写在前面 本系列文章主要讲解商用车电子/电气零部件或系统的传导抗干扰、传导发射和辐射抗干扰、电场辐射发射以及静电放电等试验内容及要求,高压试验项目内容及要求。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 目录 商用车电子电气零部件电磁兼容条件和试验—目录…...
NumPy;NumPy在数据分析中的应用;NumPy与其他库的搭配使用
NumPy;NumPy在数据分析中的应用;NumPy与其他库的搭配使用 NumPy:Python 数据分析的核心工具什么是 NumPy?NumPy 的主要优势 NumPy 在数据分析中的应用1. 数据处理与清洗2. 数学和统计分析3. 数组变换与矩阵运算 NumPy 与其他库的搭…...
机器学习经典无监督算法——聚类K-Means算法
目录 算法原理 算法步骤 算法API 算法导入 API参数理解 算法实现 算法原理 Kmeans 算法是一种无监督的聚类算法,目的是将数据集中的样本划分到 K 个不同的簇中。 聚类:将数据集中相似的数据点归为一组或一个簇的过程。 数据集:一组相…...
网络变压器的分类
网络变压器是局域网(LAN)中各级网络设备中必备的元件。它们的主要功能是传输数据,增强信号,并提供电气隔离,以防雷保护和匹配阻抗。网络变压器也被称为数据泵或网络隔离变压器。它们广泛应用于网络交换机、路由器、网卡、集线器等设备中。 网…...
【MySQL】复合查询+表的内外连接
复合查询表的内外连接 1.基本查询回顾2.多表查询3.自连接4.子查询4.1单列子查询4.2多列子查询 5.在from子句中使用子查询6.合并查询7.表的内连和外连7.1内连接7.2外连接7.2.1左外连接7.2.2右外连接 点赞👍👍收藏🌟🌟关注…...
创建模式、结构模式及行为模式
谁在什么地方提供什么功能? 要设计几个类?这些类各个是什么功能?相互间的关系是什么? 创建模式指的是对象那么多,怎么把它"生"出来?生几个?从这个角度上来说数组就是一种另类的创建模式。主要…...
警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误
一直以来我认为工具类的软件是越新越好,因为工具代表着一定的先进性;但是IDEA 2024好好的给我上了一课,比如lombok 不起作用、比如Spring Boot 3.4.x 启动报错、再比如MyBatis log plus冲突、再比如Gradle插件冲突. 一、Lombok 失效问题 请不…...
C语言中char str和char str[]的区别
char* str和char* str[]的区别:C语言中char *str[] 和char *str有什么区别-CSDN博客 char str 和 char str[] 在 C 语言中也有不同的含义和用途,以下是它们的区别: 1. char str 类型:这是一个单一的字符变量。 用途:…...
(学习总结20)C++11 可变参数模版、lambda表达式、包装器与部分新内容添加
C11 可变参数模版、lambda表达式、包装器与部分新内容添加 一、可变参数模版基本语法及原理包扩展emplace系列接口 二、lambda表达式lambda表达式语法捕捉列表lambda的原理lambda的应用 三、包装器bindfunction 四、部分新内容添加新的类功能1.默认的移动构造和移动赋值2.声明时…...
备份和容灾之区别(The Difference between Backup and Disaster Recovery)
备份和容灾之区别 备份和容灾都是数据安全常见的保障手段,但是一般在正常业务运行时是无需用到这两个技术手段的。只有在业务已经崩溃,需要进行业务恢复时,这两种技术的价值才能真正体现。所以,备份和容灾可以说是数据安全最后两…...
Go语言之路————数组、切片、map
Go语言之路————数组、切片、map 前言一、数组二、切片三、map 前言 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触Go,到后面能正常完成工作上的业务开发的过程ÿ…...
Kotlin Bytedeco OpenCV 图像图像57 图像ROI
Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…...
字符编码通过字节数组向16进制的互转【终端设备通讯案例篇】:微信小程序 JavaScript字符串转gb2312 字符编码,以16进制字符串传输。(接收蓝牙设备的信息,发送北斗终端消息)
文章目录 引言I 原理II 案例一:微信小程序字符串转gb2312 字符编码,以16进制字符串传输。字节数组 转16进制字符串微信小程序字符串转gb2312 字节数组(utf8ToGb2312Bytes)demo:gb2312 字符编码->字节数组->16进制字符串III 案例二: 小程序接收gb2312 的16进制字符串…...
LabVIEW与WPS文件格式的兼容性
LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式(如 WPS 文档或表格)。然而,可以通过几种间接的方式实现这一目标,确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案: 导出…...
协程(还需要输入3个字)
昨天我偶然听到协程这个概念,不禁好奇地了解了一下,做些笔记如下: 一、什么是协程 协程是在线程内部,由程序自己控制逻辑, 显式地让出控制权(yield)来实现任务切换,而不是由操作系…...
系统架构设计师-第1章-计算机系统知识要点
【本章学习建议】 根据考试大纲,本章主要考查系统架构设计师单选题,预计考1分左右。第二版教材2.2节增加了本块内容,但较为简略,需要课程补充,属于非重点内容。 1.1 计算机硬件组成 计算机的基本硬件系统由运算器、控…...
Linux -- 初识HTTP协议
目录 什么是HTTP协议 什么是 URL ? 理解 URL 初识HTTP 请求与响应格式 代码验证 gitee HTTP.hpp 结果 什么是HTTP协议 HTTP(HyperText Transfer Protocol,超文本传输协议)主要用于客户端(通常是浏览器&#…...
【已解决】我和ollama运行的qwen2.5大模型通信,总是返回GGGG?
起因: 和大模型通信的时候,总是返回 GGG 之类的乱码。 curl查询返回到结果: 既然curl通信不行,直接在控制台聊天呢? 话都说不明白,我火了,结果一查,我熄火了,是ollama…...
在Mac mini上实现本地话部署AI和知识库
在Mac mini上实现本地话部署AI和知识库 硬件要求:大模型AI,也叫LLM,需要硬件支持,常见的方式有2种:一种是采用英伟达之类支持CUDA库的GPU芯片或者专用AI芯片;第二种是采用苹果M系列芯片架构的支持统一内存架…...
SQL和MySQL以及DAX的日期表生成?数字型日期?将生成的日期表插入到临时表或者实体表中
几种生成日期表的方法 如何用SQL语句生成日期表呢? 如何用MySQL语句生成日期表呢? 如何用DAX语句生成日期表呢? 1. MySQL生成日期表 1.1 日期格式:yyyy-MM-dd 字符型 2024-01-02 -- 生成日期表 WITH RECURSIVE temp_dateTable …...
win32汇编环境,窗口程序中基础列表框的应用举例
;运行效果 ;win32汇编环境,窗口程序中基础列表框的应用举例 ;比如在窗口程序中生成列表框,增加子项,删除某项,取得指定项内容等 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;以下是ASM文件 ;>>>>>>>>>>>…...
Sentinel配置流控规则详解
前言 在微服务架构中,流量控制(Flow Control)是保障服务稳定性的重要手段之一。Sentinel作为一款开源的流量控制、熔断降级Java库,以其丰富的应用场景和完善的监控能力,在微服务保护中扮演了重要角色。本文将详细介绍…...
opencv图像基础学习
2.3图像的加密解密 源码如下: import cv2 import numpy as np import matplotlib.pyplot as plt def passImg():imgcv2.imread(./image/cat.jpg,0)h,wimg.shape#生成一个密码,加密key_imgnp.random.randint(0,256,size(h,w),dtypenp.uint8)img_addmcv2…...
递归40题!再见递归
简介:40个问题,有难有易,均使用递归完成,需要C/C的指针、字符串、数组、链表等基础知识作为基础。 1、数字出现的次数 由键盘录入一个正整数,求该整数中每个数字出现的次数。 输入:19931003 输出…...
javadoc使用dos命令生成api文档演示
新建一个文本后缀改java,名字改为类名 文本内容: /** * author ZZJ * version jdk23.0.1 */ public class Test{/*** 求输入两个参数范围以内整数的和* param n 接收的第一个参数,范围起点* param m 接收的第二个参数,范围终点*…...
OpenAI推出首个AI Agent!日常事项自动化处理!
2025 年1月15日,OpenAI 正式宣布推出一项名为Tasks的测试版功能 。 该功能可以根据你的需求内容和时间实现自动化处理。比方说,你可以设置每天早晨 7 点获取天气预报,或定时提醒遛狗等日常事项。 看到这里,有没有一种熟悉的感觉&a…...
uniapp实现“到这儿去”、拨打电话功能
"到这儿去" 在 UniApp 中实现“到这儿去”的功能,即调起地图导航至指定位置,对于不同的平台(小程序、H5、App)有不同的处理方式。下面将简单介绍如何在这些平台上实现该功能,并讨论位置信息的获取。后面需求会用到,先来找一些相关资料,并不一定很准确,但也来…...
T-SQL语言的计算机基础
T-SQL语言的计算机基础 引言 在当今信息技术迅猛发展的时代,数据已成为企业和组织决策的重要基础。而处理和管理数据的工具和语言也日益成为IT专业人员必备的技能之一。T-SQL(Transact-SQL)作为微软SQL Server数据库的扩展,是一…...
SpringBoot + Websocket实现系统用户消息通知
1、引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.7</version><relativePath/> </parent> <dependencies><dependency>…...
基于 HTML5 Canvas 制作一个精美的 2048 小游戏--day 1
基于 HTML5 Canvas 制作一个精美的 2048 小游戏 在这个快节奏的生活中,简单而富有挑战性的游戏总能给我们带来乐趣。2048 是一款受欢迎的益智游戏,不仅考验智力,还能让人回味无穷。今天,我带领大家将一起学习如何使用 HTML5 Canv…...
macos arm 本地/docker/本地k8s 安装jupyterhub 并登陆
概述 很多文章写的启动官方docker镜像后,新建linux用户即可直接登录,不知道是否版本原因,总之目前最新版我亲测不可以,踩坑两天,这里记录下解决过程,以及各种细节在文档中的位置.以及为什么官方镜像不能直接使用的原因. part1 本地安装jupyterhub https://jupyterhub.readth…...
go采集注册表
package mainimport ("fmt""golang.org/x/sys/windows/registry""log""os""strconv""strings" )func USBSTOR_Enum() {// 打开注册表键keyPath : SYSTEM\CurrentControlSet\Services\USBSTOR\Enumk, err : regist…...
Java连接TDengine和MySQL双数据源
git文件地址:项目首页 - SpringBoot连接TDengine和MySQL双数据源:SpringBoot连接TDengine和MySQL双数据源 - GitCode 1、yml配置 spring:datasource:druid:mysql:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testusername: roo…...
配置AOSP下载环境
1#curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 2#repo init -u https://android.googlesource.com/platform/manifest 3#清华镜像站帮助页 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 4#同步安卓AOSP 这里是安卓13 repo init -u htt…...
SpringBoot源码解析(七):应用上下文结构体系
SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…...
5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署
想象一下,只需简单几步操作,就能生成逼真的语音效果,无论是为客户服务还是为游戏角色配音,都能轻松实现。GPT-Sovits 模型,其高效的语音生成能力为实现自然、流畅的语音交互提供了强有力的技术支持。本文将详细介绍如何…...
数字化时代,传统代理模式的变革之路
在数字化飞速发展的今天,线上线下融合(O2O)成了商业领域的大趋势。这股潮流,正猛烈冲击着传统代理模式,给它带来了新的改变。 咱们先看看线上线下融合现在啥情况。线上渠道那是越来越多,企业纷纷在电商平台…...
python爬虫爬取淘宝商品比价||淘宝商品详情API接口
最近在学习北京理工大学的爬虫课程,其中一个实例是讲如何爬取淘宝商品信息,现整理如下: 功能描述:获取淘宝搜索页面的信息,提取其中的商品名称和价格 探讨:淘宝的搜索接口 翻页的处理 技术路线:requests…...
HunyuanVideo 文生视频模型实践
HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置(batch size 1): 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…...
CSRF攻击XSS攻击
概述 在 HTML 中,<a>, <form>, <img>, <script>, <iframe>, <link> 等标签以及 Ajax 都可以指向一个资源地址,而所谓的跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指…...
vue3学习日记8 - 一级分类
最近发现职场前端用的框架大多为vue,所以最近也跟着黑马程序员vue3的课程进行学习,以下是我的学习记录 视频网址: Day2-17.Layout-Pinia优化重复请求_哔哩哔哩_bilibili 学习日记: vue3学习日记1 - 环境搭建-CSDN博客 vue3学…...
Notepad++移除所有空格
1.打开Notepad。 2.打开你想要编辑的文件。 3.按下 Ctrl H 打开查找和替换对话框,并选择 “正则表达式”。 4.在 “查找目标” 框中输入 \s。 5.在 “替换为” 框中留空,不填写任何内容。 6.点击 “全部替换” 按钮。...