当前位置: 首页 > news >正文

【机器学习】主成分分析法(PCA)

【机器学习】主成分分析法(PCA)

  • 一、摘要
  • 二、主成分分析的基本概念
  • 三、主成分分析的数学模型
  • 五、主成分分析法目标函数公式推导(`梯度上升法`求解目标函数)
  • 六、梯度上升法求解目标函数第一个主成分
  • 七、求解前n个主成分及PCA在数据预处理中的处理步骤(后续实现)

一、摘要

本文主要讲述了主成分分析法(PCA)的原理和应用。PCA通过选择最重要的特征,将高维数据映射到低维空间,同时保持数据间的关系,实现降维和去噪。通过具体的例子和图示解释了PCA的原理,并比较了两种降维方案,解释了为什么选择将数据映射到x轴上可以得到更好的分类效果。最后强调了在PCA之前需要对所有样本的均值进行归零处理。通过这篇文章,读者可以深入了解PCA的原理和应用,并掌握如何使用PCA进行数据降维和去噪,提高分类效果。

二、主成分分析的基本概念

  1. 定义
    PCAPrincipal Component Analysis)即主成分分析,是机器学习中一种常用的数据分析技术,PCA 是一种无监督的线性降维算法它通过线性变换将原始数据转换为一组新的特征,这些新特征被称为主成分,它们是原始特征的线性组合,并且在尽可能保留原始数据信息的前提下实现数据维度的降低
  2. 作用
    • 数据降维:在很多实际应用中,数据的维度可能非常高,这会导致计算量增大、模型训练时间变长以及可能出现的过拟合等问题。PCA 可以将高维数据映射到低维空间,在保留大部分关键信息的同时,大大减少数据的维度,提高计算效率和模型性能。
    • 去除噪声和冗余:原始数据中往往存在一些噪声和冗余信息,这些信息可能会干扰模型的训练和预测。PCA 通过提取主成分,可以去除一些与其他特征高度相关的冗余信息,以及一些对数据整体结构影响较小的噪声,使数据更加干净和易于处理。
    • 数据可视化:对于高维数据,很难直接进行可视化展示。通过 PCA 将数据降维到二维或三维空间后,可以方便地进行数据可视化,帮助人们直观地理解数据的分布和结构,发现数据中的潜在规律和异常点。
  3. 底层原理
    • 协方差矩阵与特征值分解首先计算原始数据的协方差矩阵,协方差矩阵可以衡量各个特征之间的相关性。然后对协方差矩阵进行特征值分解,得到特征值特征向量特征值表示对应主成分方差大小特征向量则表示主成分方向
    • 主成分的选取:按照特征值从大到小顺序特征向量进行排序,选择前k个特征向量作为主成分,其中k是降维后想要得到的维度。这些主成分所对应的特征值较大,意味着它们能够解释原始数据中较大比例的方差,即包含了原始数据的大部分重要信息。
    • 数据投影:将原始数据投影到选取的主成分张成子空间上,就得到了降维后的数据。具体来说,对于原始数据中的每个样本,通过与主成分对应的特征向量进行线性变换,将其映射到新的低维空间中。
  4. 补充方差的概念
    1. 方差的意义:方差是数据点与其平均值之间差异的平方的平均数。它反映了数据分布的分散程度。
    2. 方差大 vs 方差小
      • 方差大:数据点远离均值,分布广泛,样本显得稀疏。
      • 方差小:数据点接近均值,集中分布,样本显得紧密。
    3. 图形化理解:高方差的数据通常在图表中表现为更长的尾巴或更大的范围,而低方差则集中在中间区域。
      结论:方差越大,样本间越稀疏;方差越小,样本间越紧密。

三、主成分分析的数学模型

  1. PCA的目标是找到一个方向向量w,使得所有样本映射到该方向后方差最大。而PCA寻找最大方差方向,进行数据降维。
    在这里插入图片描述

  2. 映射后的样本方差计算公式为每个样本与方向向量w的点积的平方和除以样本数量m。 映射过程可以通过几何方式解释,即将每个样本点垂直投影到目标方向向量w上。投影长度等于样本点与方向向量w的点积结果,反映了样本在该方向上的分布情况。
    在这里插入图片描述

  3. 当均值为零时,方差计算公式进一步简化为向量模的平方和除以m。
    在这里插入图片描述

五、主成分分析法目标函数公式推导(梯度上升法求解目标函数)

  1. 目标函数对每一个w求偏导数梯度):
    在这里插入图片描述

  2. 通过向量点乘后简化公式如下:
    在这里插入图片描述

  3. 通过进一步向量化点乘处理后,可以简化如下所示:
    在这里插入图片描述

  4. 最后来看下简化的梯度
    在这里插入图片描述

六、梯度上升法求解目标函数第一个主成分

  1. 生成测试数据集

    import numpy as np
    import matplotlib.pyplot as plt# 生成数据
    X = np.empty((100, 2))
    X[:, 0] = np.random.uniform(0., 100., size=100)
    X[:, 1] = 0.75 * X[:, 0] + 3. + np.random.normal(0, 10., size=100)# 绘制数据散点图
    plt.scatter(X[:, 0], X[:, 1])
    plt.show()
    

    效果:
    在这里插入图片描述

  2. 均值归零处理

    # 在进行PCA之前需要实现均值归一划处理,也就是将均值归零
    # 1. 定义均值归零的函数,定义了一个名为demean的函数,该函数接受一个数据集X作为参数。
    def demean(X):# return X - np.mean(X, axis=0) 是函数的主体部分。# np.mean(X, axis=0)计算数据集X每列的均值,axis=0表示沿着列方向计算。# 然后用原始数据集X减去每列的均值,实现对数据的去均值操作,即让每列数据的均值变为 0 ,最后返回去均值后的数据。return X - np.mean(X, axis=0) # 2. 调用函数,并赋值给X_demean
    X_demean = demean(X)# 3. plt.scatter(X_demean[:, 0], X_demean[:, 1]) 使用matplotlib库的scatter函数绘制散点图,横坐标为去均值后数据X_demean的第一列,纵坐标为第二列。
    plt.scatter(X_demean[:, 0], X_demean[:, 1])
    plt.show()
    

    效果:
    在这里插入图片描述
    验证下均值归零是否正常:

    # 验证下均值归零是否正常
    print(np.mean(X_demean[:, 0])) # 计算第一列均值
    print(np.mean(X_demean[:, 1])) # 计算第二列均值
    

    结果:
    1.1723955140041652e-14 约等于0
    2.5579538487363606e-15 约等于0

  3. 目标函数、梯度上升法等对应公式的代码实现

    # 1. 实现目标函数:找到w,使得方差最大的函数,接受权重向量w和数据集X作为参数
    def f(w, X):return np.sum((X.dot(w)**2)) / len(X)# 2. 求梯度,即目标函数f的解析梯度函数,用于计算梯度。这里通过数学推导得出的梯度公式,X.T.dot(X.dot(w) * 2. / len(X))实现对目标函数求导后的计算,返回梯度向量。
    def df_math(w, X):return X.T.dot(X.dot(w) * 2. / len(X))# 3. 该函数是通过有限差分法近似计算梯度,用于调试和验证df_math函数的正确性。
    #    epsilon是一个很小的数,用于计算数值梯度。通过分别对权重向量w的每个维度加上和减去epsilon,计算对应的函数值差,再除以2 * epsilon来近似该维度上的梯度,最终返回一个近似梯度向量。
    def df_debug(w, X, epsilon=0.0001):res = np.empty(len(w))for i in range(len(w)):w_1 = w.copy()w_1[i] += epsilonw_2 = w.copy()w_2[i] -= epsilonres[i] = (f(w_1, X) - f(w_2, X)) / (2 * epsilon)return res# 4. 该函数用于将输入的向量w进行归一化处理,使其成为单位向量。
    #    np.linalg.norm(w)计算向量w的范数(长度),通过将向量w的每个元素除以其范数,得到方向不变但长度为 1 的单位向量。
    def direction(w):return w / np.linalg.norm(w)# 5. 定义gradient_ascent函数,实现梯度上升算法:
    # def gradient_ascent(df, X, initial_w, eta, n_iters = 1e4, epsilon=1e-8),实现梯度上升算法。参数含义如下:
    # df:计算目标函数梯度的函数。
    # X:数据集。
    # initial_w:初始权重向量。
    # eta:学习率,控制每次权重更新的步长。
    # n_iters:最大迭代次数,默认值为10000(1e4)。
    # epsilon:收敛阈值,默认值为1e-8,用于判断算法是否收敛。
    # w = direction(initial_w),对初始权重向量initial_w进行归一化处理,得到初始的单位权重向量w。
    # cur_iter = 0,初始化当前迭代次数为0。
    # while cur_iter < n_iters:,开始迭代循环,只要当前迭代次数小于最大迭代次数就继续执行:
    # gradient = df(w, X),调用梯度计算函数df,计算当前权重w下的梯度。
    # last_w = w,保存上一次的权重向量。
    # w = w + eta * gradient,根据梯度上升公式更新权重向量,沿着梯度方向移动eta倍的梯度长度。
    # w = direction(w),对更新后的权重向量w再次进行归一化处理,保持其为单位向量。
    # if(abs(f(w, X) - f(last_w, X)) < epsilon): break,计算当前权重和上一次权重对应的目标函数值之差的绝对值,如果小于收敛阈值epsilon,则认为算法收敛,跳出循环。
    # cur_iter += 1,每次迭代结束后,迭代次数加1。
    # return w,循环结束后,返回最终得到的权重向量。
    def gradient_ascent(df, X, initial_w, eta, n_iters = 1e4, epsilon=1e-8):w = direction(initial_w)cur_iter = 0while cur_iter < n_iters:gradient = df(w, X)last_w = ww = w + eta * gradientw = direction(w)if(abs(f(w, X) - f(last_w, X)) < epsilon):breakcur_iter += 1return w
    

    验证代码正确性:

    # 测试梯度上升法求解结果的正确性
    # 初始化权重向量
    # 生成一个长度等于数据特征维度(这里是 2)的随机权重向量。不能用 0 向量开始,可能是因为用 0 向量开始在梯度上升法迭代中会导致一些问题,比如收敛缓慢或无法收敛。
    initial_w = np.random.random(X.shape[1])  # 注意2:不能用0向量开始
    print(initial_w)# 设置梯度上升法中的学习率,控制每次权重更新的步长。
    eta = 0.001# 注意3:不能使用StandardScaler标准化数据
    print(gradient_ascent(df_debug, X_demean, initial_w, eta))
    print(gradient_ascent(df_math, X_demean, initial_w, eta))
    

    结果如下:
    [0.55799828 0.70512732]
    [0.76320173 0.64616029] df_debug函数求得的数据
    [0.76320173 0.64616029] df_math函数求得的数据,和df_debug函数求得的数据是一致的。

  4. 求解第一主成分

    # 调用gradient_ascent函数,传入梯度计算函数df_math、去均值后的数据集X_demean、初始权重向量initial_w和学习率eta,通过梯度上升法计算得到最终的权重向量w。
    w = gradient_ascent(df_math, X_demean, initial_w, eta)# 绘制w向量在二维坐标平面上的图像,这就是我们通过梯度上升法找到的第一个主成分
    plt.scatter(X_demean[:, 0], X_demean[:, 1]) # 横坐标为X_demean的第一列数据,纵坐标为第二列数据
    plt.plot([0, w[0]*30], [0, w[1]*30], color='r') # 由于w是单位向量,对于的数字太小了(1),为了图像好效果明显些,这里分别在横纵坐标轴各自乘以30作为系数
    plt.show()
    

    效果如下:
    在这里插入图片描述

七、求解前n个主成分及PCA在数据预处理中的处理步骤(后续实现)

  1. 数据标准化:首先对原始数据进行标准化处理,将每个特征的均值变为0,方差变为1。这是因为PCA对数据的尺度比较敏感,如果不同特征的尺度差异较大,可能会导致某些特征在协方差计算中占据主导地位,影响主成分的提取效果。均值归零的处理办法:
    • 在进行主成分分析之前,需要对所有样本进行均值归零处理。
    • 均值归零处理通过减去样本整体均值,使样本在每个维度上的均值变为零。
    • 处理后的方差计算公式得到简化,方便后续计算。
  2. 计算协方差矩阵:对标准化后的数据计算协方差矩阵,协方差矩阵能够反映各个特征之间的线性关系。
  3. 特征值分解:对协方差矩阵进行特征值分解,得到特征值和特征向量。
  4. 确定主成分个数:根据具体的应用需求和数据特点,确定需要保留的主成分个数k。常见的方法是根据累计方差贡献率来确定,即选择使得累计方差贡献率达到一定阈值(如80%、90%等)的最小k值。
  5. 构建主成分矩阵:选取前k个最大特征值对应的特征向量,构建一个大小为n×k的主成分矩阵,其中n是原始数据的特征维度。
  6. 数据降维:将原始数据与主成分矩阵相乘,得到降维后的数据。降维后的数据维度为k,且尽可能保留了原始数据的重要信息。

相关文章:

【机器学习】主成分分析法(PCA)

【机器学习】主成分分析法&#xff08;PCA&#xff09; 一、摘要二、主成分分析的基本概念三、主成分分析的数学模型五、主成分分析法目标函数公式推导&#xff08;梯度上升法求解目标函数&#xff09;六、梯度上升法求解目标函数第一个主成分七、求解前n个主成分及PCA在数据预…...

perl、python、tcl语法中读写Excel的模块

perl、python、tcl语法中读写Excel的模块 perl、python、tcl语法中存在读写xls和xlsx格式的模块分别有&#xff1a; python ‌读取 Excel‌ ‌xlrd‌&#xff1a;支持传统 .xls 格式的读取‌ pandas‌&#xff1a;通过 read_excel() 方法支持 .xls 和 .xlsx 格式‌ ‌写入 …...

libwebsockets实现异步websocket客户端,服务端异常断开可重连

libwebsockets websocket客户端基本流程网上都有&#xff0c;我只额外优化了重连机制。 在服务器异常断开时不触发LWS_CALLBACK_CLOSED或LWS_CALLBACK_CLIENT_CONNECTION_ERROR&#xff0c;导致无法自动重连 通过定时检查链接是否可写入判断链接是否有效 // 判断wsi是否可用if …...

CAD球体密堆积3D插件V2.0

插件介绍 CAD球体密堆积3D插件V2.0版本可在AutoCAD内建立球体堆积模型&#xff0c;插件采取模拟球体在重力作用下的堆积行为&#xff0c;可生成超密堆积的几何模型及进行堆积过程的动态展示。 插件优化重力堆积物理引擎&#xff0c;新增堆积可视化界面&#xff0c;可直观查看…...

【Linux】线程池、单例模式、死锁

线程池 一.线程池1.日志和策略模式2.线程池1.Task.hpp2.Thread.hpp3.ThreadPool.hpp4.ThreadPool.cc 二.线程安全与重入问题三.线程安全的单例模式1.饿汉模式2.懒汉模式3.懒汉模式线程池1.ThreadPool.hpp2.ThreadPool.cc 四.死锁的概念1.死锁2.死锁的四个必要条件3.避免死锁 五…...

AI+视频监控电力巡检:EasyCVR视频中台方案如何赋能电力行业智能化转型

随着电力行业的快速发展&#xff0c;电力设施的安全性、稳定性和运维效率变得至关重要。传统视频监控系统在实时性、智能化及多系统协同等方面面临严峻挑战。EasyCVR视频中台解决方案作为一种先进的技术手段&#xff0c;在电力行业中得到了广泛应用&#xff0c;为电力设施的监控…...

centos8.0系统部署zabbix6.0监控

centos8.0系统部署zabbix6.0监控 一、部署过程1、确认系统版本2、主机基础环境设置3、安装MySQL 8.0数据库3.1 安装MySQL 8.0仓库3.2 安装软件3.3 设置root用户密码3.4 创建zabbix数据库&#xff0c;授权用户 4、配置zabbix6.0仓库5、安装zabbix服务端软件6、导入zabbix数据表7…...

江科大51单片机笔记【12】AT24C02(I2C总线)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…...

电脑一直重启怎么解决 原因及解决方法

电脑一直重启的故障状态&#xff0c;不仅影响电脑的正常使用&#xff0c;还可能导致数据丢失或损坏。那么&#xff0c;电脑一直重启是什么原因呢&#xff1f;又该如何解决呢&#xff1f;下面将为大家介绍电脑一直重启的常见原因和解决方法&#xff0c;帮助您恢复电脑的正常工作…...

内网安全防护新思路 —— HFish + ELK 与 T-Pot 全面蜜罐系统比较分析

在当前网络安全环境日益复杂的背景下&#xff0c;企业和组织面临着来自外部与内部的多种威胁。为了更好地了解攻击者行为、捕获恶意活动并及时响应&#xff0c;部署蜜罐&#xff08;Honeypot&#xff09;系统已成为提升内网安全防护的重要手段。本文将重点介绍两种内网蜜罐防护…...

「 机器人 」扑翼飞行器通过总气动力控制四自由度运动方法

一、前言 在扑翼飞行中,总气动力(Total Aerodynamic Force)是指扑翼在运动过程中受到的所有空气动力作用的合力。它是由以下两种主要力的合成结果: 1. 升力(Lift, ):垂直于空气流方向的力,用于支持飞行器(或生物)的重量。 2. 阻力(Drag, ):平行于空气流方向的力,…...

写了一个二叉树构造函数和画图函数,方便debug

代码 class TreeNode(object):def __init__(self, val, leftNone, rightNone):self.val valself.left leftself.right rightdef construct_tree(nodes):if not nodes:return Noneroot TreeNode(nodes[0])queue [root]index 1while index < len(nodes):node queue.p…...

【prompt实战】知乎问题解答专家

本文原创作者&#xff1a;姚瑞南 AI-agent 大模型运营专家&#xff0c;先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗&#xff1b;多年人工智能行业智能产品运营及大模型落地经验&#xff0c;拥有AI外呼方向国家专利与PMP项目管理证书。&#xff08;转载需经授权&am…...

元组(Tuple)详解——c#

在C#中&#xff0c;元组&#xff08;Tuple&#xff09; 是一种轻量级的数据结构&#xff0c;用于将多个值组合成一个单一的对象。元组非常适合在不需要定义新类或结构体的情况下&#xff0c;临时存储和传递多个相关的值。 C# 中的元组有两种形式&#xff1a; 传统元组&#xf…...

Maven工具基础知识(一)

第一章、Maven概述 一、概述 官网地址&#xff1a;Welcome to Apache Maven – Maven Maven是一个基于Java的项目管理工具&#xff0c;专注于项目构建、依赖管理和项目信息标准化。其核心目标 是简化开发流程&#xff0c;通过标准化项目结构和自动化构建流程&#xff…...

AI模型的构建过程是怎样的(下)

你好,我是舒旻。 上节课,我们讲了一个模型构建的前 2 个环节,模型设计和特征工程。今天,我们继续来讲模型构建的其他 3 个环节,说说模型训练、模型验证和模型融合中,算法工程师的具体工作内容,以及 AI 产品经理需要掌握的重点。 模型训练 模型训练是通过不断训练、验证…...

力扣hot100_二叉树

二叉树的建立与遍历 #include <iostream> #include <vector> #include <queue> using namespace std;// 定义二叉树节点 struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} };// 函数&…...

如何制作Windows系统盘、启动盘?(MediaCreationTool_22H2)

文章目录 每日一句正能量前言一、准备工作二、制作启动盘后记 每日一句正能量 每个在你生命里出现的人&#xff0c;都有原因。喜欢你的人给你温暖关心。你喜欢的人让你学会爱和付出&#xff0c;不喜欢你的人让你自省成长。你不喜欢的人教会你宽容尊重&#xff0c;没有人是偶然出…...

分布式光伏发电的发展现状与前景

分布式光伏发电的发展现状与前景 1、分布式光伏发电的背景2、分布式光伏发电的分类2.1、集中式光伏发电2.1.1、特点、原则2.1.2、优点2.1.3、缺点 2.2、分布式光伏发电2.2.1、特点、原则2.2.2、优点2.2.3、缺点 2.3、对比 3、分布式光伏发电的现状4、分布式光伏发电的应用场景4…...

【AI大模型智能应用】Deepseek生成测试用例

在软件开发过程中&#xff0c;测试用例的设计和编写是确保软件质量的关键。 然而&#xff0c;软件系统的复杂性不断增加&#xff0c;手动编写测试用例的工作量变得异常庞大&#xff0c;且容易出错。 DeepSeek基于人工智能和机器学习&#xff0c;它能够依据软件的需求和设计文…...

NVIDIA k8s-device-plugin源码分析与安装部署

在《kubernetes Device Plugin原理与源码分析》一文中&#xff0c;我们从源码层面了解了kubelet侧关于device plugin逻辑的实现逻辑&#xff0c;本文以nvidia管理GPU的开源github项目k8s-device-plugin为例&#xff0c;来看看设备插件侧的实现示例。 一、Kubernetes Device Pl…...

面向联邦学习隐私保护的同态加密库优化算法研究

面向联邦学习隐私保护的同态加密库优化算法研究 一、引言 联邦学习作为一种新兴的分布式机器学习范式,允许各参与方在不共享原始数据的前提下协同训练模型,有效解决了数据孤岛和隐私保护问题。同态加密作为实现联邦学习隐私保护的关键技术之一,能够在密文上直接进行特定运算…...

20250212:linux系统DNS解析卡顿5秒的bug

问题: 1:人脸离线识别记录可以正常上传云端 2:人脸在线识别请求却一直超时 3:客户使用在线网络 思路:...

动态规划 -第1篇

前言&#xff1a;在计算机科学中&#xff0c;动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是解决最优化问题的一种重要方法。通过将大问题拆解为小问题&#xff0c;动态规划不仅能够显著降低计算复杂度&#xff0c;还能提高效率。无论是经典的背包问…...

uni-app打包成H5使用相对路径

网上找了一圈&#xff0c;没用&#xff0c;各种试&#xff0c;终于给试出来了&#xff0c;导致打包之后请求的路径没有带上域名 直接去 config.js文件里面的baseUrl路径改成空字符就行了&#xff0c;千万别写/...

【每日学点HarmonyOS Next知识】swiper样式、日期选择、自定义弹窗键盘、文本组件换行、富文本适配

1、HarmonyOS swiper组件样式&#xff1f; 可在样式中设置即可&#xff0c;参考如下demo Entry Component struct SwiperDemo {private swiperController: SwiperController new SwiperController();build() {Column({ space: 5 }) {Swiper(this.swiperController) {Text(0)…...

STM32 I2C驱动开发全解析:从理论到实战 | 零基础入门STM32第五十步

主题内容教学目的/扩展视频I2C总线电路原理&#xff0c;跳线设置&#xff0c;I2C协议分析。驱动程序与调用。熟悉I2C总线协议&#xff0c;熟练调用。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 引言一、I2C驱动分层架构二、I2C总线驱动代码精析2.1 初始化配置&a…...

Ragflow技术栈分析及二次开发指南

Ragflow是目前团队化部署大模型+RAG的优质方案,不过其仍不适合直接部署使用,本文将从实际使用的角度,对其进行二次开发。 1. Ragflow 存在问题 Ragflow 开源仓库地址:https://github.com/infiniflow/ragflow Ragflow 当前版本: v0.17.0 Ragflow 目前主要存在以下问题: …...

力扣hot100二刷——链表

第二次刷题不在idea写代码&#xff0c;而是直接在leetcode网站上写&#xff0c;“逼”自己掌握常用的函数。 标志掌握程度解释办法⭐Fully 完全掌握看到题目就有思路&#xff0c;编程也很流利⭐⭐Basically 基本掌握需要稍作思考&#xff0c;或者看到提示方法后能解答⭐⭐⭐Sl…...

【Godot4.3】斜抛运动轨迹曲线点求取函数

概述 原文写于去年9月。一篇测试性的文章。 基于初始位置和初始速度的抛物线 # 抛物运动轨迹曲线 - 基于初始位置和初始速度计算 func projectile_motion_curve(start_pos:Vector2, # 物体的起始位置velocity:Vector2, # 初始速度nums:int, …...

SpringBoot基础Kafka示例

这里将生产者和消费者放在一个应用中 使用的Boot3.4.3 引入Kafka依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency>yml配置 spring:application:name: kafka-1#kafka…...

【安卓逆向】安卓病毒介绍及其简单案例分析

目录 引言 一、Android 病毒介绍及分析方法 1.1 Android 病毒预览 1.2 Android 病毒分析必备知识 1.3 Android 病毒的常见类型及恶意行为 1.3.1 常见病毒类型 1.3.2 常见病毒行为 1.4 病毒激活条件 1.5 Android 病毒的传播方式 1.6 Android 病毒分析的一般方法 二…...

Git的命令学习——适用小白版

浅要了解一下Git是什么&#xff1a; Git是目前世界上最先进的的分布式控制系统。Git 和其他版本控制系统的主要差别在于&#xff0c;Git 只关心文件数据的整体是否发生变化&#xff0c;而大多数其他系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数据。实际上…...

Bad owner or permissions on ssh/config - 解决方案

问题 在Windows系统通过ssh连接远程服务器时报错&#xff1a; ssh [ssh_user][ip] Bad owner or permissions on C:\\Users\\[win_user]/.ssh/config原因 这是因为.ssh文件夹或.ssh/config文件的权限异常&#xff0c;当前Windows账号没有读写权限导致的。 Windows系统重装&a…...

AI 赋能软件开发:从工具到思维的全面升级

喜欢可以到主页订阅专栏 引言 在当今技术飞速发展的时代,人工智能(AI)正以前所未有的速度渗透到各个领域,软件开发行业也不例外。AI 不仅改变了开发工具的使用方式,更深刻地影响了开发者的思维模式和工作流程。从代码生成到错误检测,从性能优化到项目管理,AI 正在全面…...

【Ubuntu系统设置固定内网ip,且不影响访问外网 】

Ubuntu系统安装后&#xff0c;由于每次重新开机会被重新分配内网ip&#xff0c;所以我们可以设置固定内网ip&#xff0c;且不影响访问外网&#xff0c;亲测有效 打开【终端】&#xff0c;查看当前内网ip&#xff08;inet&#xff09;&#xff0c;子网掩码&#xff08;netmask&a…...

VSCode集成C语言开发环境

下载MinGW https://sourceforge.net/projects/mingw/ 点击download按钮下载exe文件到本地 点击exe文件安装 选择基础包和c编译版 vscode安装部分跳过 安装code runner和c/c插件 **(1) 创建 C 文件** 新建一个测试文件&#xff08;例如 hello.c&#xff09;&#xf…...

力扣:3305.元音辅音字符串计数

给你一个字符串 word 和一个 非负 整数 k。 返回 word 的 子字符串 中&#xff0c;每个元音字母&#xff08;a、e、i、o、u&#xff09;至少 出现一次&#xff0c;并且 恰好 包含 k 个辅音字母的子字符串的总数。 示例 1&#xff1a; 输入&#xff1a;word "aeioqq"…...

vscode接入DeepSeek 免费送2000 万 Tokens 解决DeepSeek无法充值问题

1. 在vscode中安装插件 Cline 2.打开硅基流动官网 3. 注册并登陆&#xff0c;邀请码 WpcqcXMs 4.登录后新建秘钥 5. 在vscode中配置cline (1) API Provider 选择 OpenAI Compatible &#xff1b; (2) Base URL设置为 https://api.siliconflow.cn](https://api.siliconfl…...

【ELK】ElasticSearch 集群常用管理API操作

目录 常用_cat 概览 集群状态 集群配置 集群磁盘使用 索引信息与配置 shard - 分片 查看段信息 nodes -节点 用户与权限 tasks 和 pending_tasks allocation - 均衡 thread_pool -线程 templete 模版 ILM 生命周期 其他 集群版本&#xff1a; 7.17.6 API地址&…...

BambuStudio学习笔记:MTUtils

# MTUtils.hpp 功能解析## 文件概述 该头文件提供了多线程同步工具和数值生成功能&#xff0c;主要包含以下组件&#xff1a;### 核心组件1. **自旋锁 (SpinMutex)**- 基于原子操作的高性能锁- 实现Lockable概念&#xff0c;可与标准库锁守卫配合使用2. **缓存对象模板 (Cached…...

DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!

从央视到地方媒体&#xff0c;已有多家媒体机构推出AI主播&#xff0c;最近杭州文化广播电视集团的《杭州新闻联播》节目&#xff0c;使用AI主持人进行新闻播报&#xff0c;且做到了0失误率&#xff0c;可见AI正在逐渐取代部分行业和一些重复性的工作&#xff0c;这一现象引发很…...

Ubuntu 22.04 安装配置 FTP服务器 教程

今天搞定在 Ubuntu 22.04 系统上安装和配置 VSFTPD &#xff0c;还会涉及防火墙设置、SSL/TLS 设置&#xff0c;以及创建专门登录 FTP 服务器的账户。开始&#xff01; 一、安装 VSFTPD 首先&#xff0c;咱得让系统知道有啥新软件包可以安装。打开终端&#xff0c;输入下面这…...

2021-05-28 C++自己写一个strcmp函数

规则 当s1<s2时&#xff0c;返回为负数-1&#xff1b; 当s1s2时&#xff0c;返回值 0&#xff1b; 当s1>s2时&#xff0c;返回正数1。 即&#xff1a;两个字符串自左向右逐个字符相比&#xff08;按ASCII值大小相比较&#xff09;&#xff0c;直到出现不同的字符或遇…...

版本控制器Git(3)

文章目录 前言一、分支管理策略二、Bug分支管理遇到Bug时的处理方法使用 git stash 暂存工作区内容创建并切换到Bug修复分支恢复之前的工作 三、临时分支的删除总结 前言 我们在上篇讲到了分支&#xff0c;现在我们就着这个继续来讲解&#xff01; 一、分支管理策略 master分支…...

TDengine 使用教程:从入门到实践

TDengine 是一款专为物联网&#xff08;IoT&#xff09;和大数据实时分析设计的时序数据库。它能够高效地处理海量的时序数据&#xff0c;并提供低延迟、高吞吐量的性能表现。在本文中&#xff0c;我们将带领大家从 TDengine 的安装、基本操作到一些高级功能&#xff0c;帮助你…...

Python Web项目的服务器部署

一.部署运行 1.虚拟环境的安装&#xff1a;&#xff08;一行一行运行&#xff09; wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh bash miniconda.sh -b -p /opt/miniconda3 echo export PATH"/opt/miniconda3/bin:$PAT…...

linux - ubuntu 使用时一些小问题整理 --- 持续更新

目录 ubuntu 中 root用户默认不存在解决办法 在Ubuntu系统中&#xff0c;将用户添加到sudoers文件中&#xff0c;使其能够以超级用户权限执行命令&#xff0c;通常可以通过以下几种方法实现&#xff1a; 方法1&#xff1a;将用户添加到sudo组 方法2&#xff1a;直接编辑sud…...

道路运输安全员考试:备考中的心理调适与策略

备考道路运输安全员考试&#xff0c;心理调适同样重要。考试压力往往会影响考生的学习效率和考试发挥。​ 首先&#xff0c;要正确认识考试压力。适度的压力可以激发学习动力&#xff0c;但过度的压力则会适得其反。当感到压力过大时&#xff0c;要学会自我调节。可以通过运动…...

关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】

问题需求 目录和文件结构如下&#xff1a; E:\Dir_Level1 │ Level1.txt │ └─Dir_Level2│ Level2.txt│ master.xlsx│└─Dir_Level3Level3.txt现在要在master.xlsx点击单元格进而访问Level1.txt、Level2.txt、Level3.txt这些文件。 方法一&#xff1a;“单元格右键…...