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

机器学习 Day16 聚类算法 ,数据降维

聚类算法

1.简介

1.1 聚类概念

  • 无监督学习:聚类是一种无监督学习算法,不需要预先标记的训练数据

  • 相似性分组:根据样本之间的相似性自动将样本归到不同类别

  • 相似度度量:常用欧式距离作为相似度计算方法

1.2 聚类vs分类

  • 聚类:无监督,不知道类别数量或含义,基于相似性分组

  • 分类:有监督,使用已标记数据训练模型预测新数据类别

2. K-means聚类实现

2.1 API介绍

from sklearn.cluster import KMeans# 主要参数
KMeans(n_clusters=8)  # n_clusters指定聚类中心数量# 常用方法
estimator.fit(x)      # 训练模型
estimator.predict(x)   # 预测类别
estimator.fit_predict(x)  # 训练+预测

2.2 代码实现步骤

1.创建数据集from sklearn.datasets import make_blobs
import matplotlib.pyplot as pltX, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1,-1], [0,0], [1,1], [2,2]], cluster_std=[0.4, 0.2, 0.2, 0.2], random_state=9)# 可视化
plt.scatter(X[:,0], X[:,1], marker='o')
plt.show()2.聚类
from sklearn.cluster import KMeans# 尝试不同聚类数量
y_pred = KMeans(n_clusters=2, random_state=9).fit_predict(X)# 可视化结果
plt.scatter(X[:,0], X[:,1], c=y_pred)
plt.show()3.聚类评估from sklearn.metrics import calinski_harabasz_score# 使用Calinski-Harabasz指数评估
print(calinski_harabasz_score(X, y_pred))

3.算法流程 

算法优化的是SSE,所以每一步都在把每个点分配到欧式距离最小的点。当然当优化的损失函数不同时,我们可以采取不同的距离。

K-means聚类步骤详解

  1. 初始化聚类中心

    • 随机选择(有改进)K个数据点作为初始聚类中心

    • 这些中心点位于特征空间内

  2. 分配数据点到最近中心

    • 对于每个数据点,计算它与所有K个中心的距离

    • 将该点分配到距离最近的聚类中心所属的簇

    • 常用距离度量:欧几里得距离(欧式距离)

  3. 重新计算聚类中心

    • 对每个簇,计算其中所有点的均值(每个特征维度的平均值)

    • 将均值点作为新的聚类中心

  4. 判断收敛

    • 比较新旧中心点的位置变化

    • 如果中心点不再移动(或移动小于阈值),算法终止

    • 否则,返回步骤2继续迭代

算法特点说明

  • 需要预先指定K值:这是算法的主要限制之一

  • 对初始中心敏感:不同的初始中心可能导致不同的最终结果

  • 对异常点敏感:涉及到求平均,异常点会产生误差很大。

  • 迭代过程保证收敛:算法一定会收敛,但可能只是局部最优

  • 适用于凸形数据分布:对非凸分布效果可能不佳

实际应用提示

  1. 可以通过多次运行取最优结果来缓解初始中心敏感问题

  2. 使用肘部法则(Elbow Method)或轮廓系数等方法帮助确定最佳K值

  3. 数据标准化很重要,因为K-means对特征的量纲敏感

4.算法评估:

4.1SSE(确定迭代次数)

 

就是计算每个簇中,每个点到中心点的距离平方,很明显当数据很多时,SSE计算会很计算量大、

4.2.肘方法(确定K)

4.3.轮廓系数(选择K)

a就是凝聚度,b就是分离度,我们希望高凝聚,高分离,也就是a小b大,所以那个公式就是SC越为一越好。但是,SC越1越好吗,我们在选择K的时候需要考虑希望使得样本不是很极端,比如

k=2的时候第一簇极度窄于第二簇,虽然它的SC小但是我们选择k=4.

4.4.C-H系数(选择K)

5.kmeans优缺点

6.Canopy算法

算法流程:

该算法之所以被称为预聚类,因为它的结果和选取的起始点可以作为以后的参考。 算法简而言之就是我先选一个点,在T1距离内视作这个类,在T2内我们不能再选出另一个起始点,然后选择一个随机点继续进行以上步骤。

优点解读

  • 抗干扰能力提升:K - means 算法对噪声敏感,离群点易使聚类中心偏移。Canopy 算法在预处理阶段,通过设定距离阈值,可将包含少量样本点(NumPoint 较小)的 Cluster 直接去除。这些小 Cluster 很可能是由噪声或离群点形成的,去掉它们能减少噪声对后续聚类的干扰,提升聚类结果的稳定性 。
  • 聚类中心初始化优化:Canopy 算法在聚类过程中,会确定每个 Canopy 的中心点。将这些中心点作为 K - means 算法的初始聚类中心(K ),相较于 K - means 随机选取初始中心,Canopy 算法得到的中心更具代表性,能使 K - means 更快收敛到更优解,提高聚类精度 。
  • 计算量降低:Canopy 算法先将数据集划分成若干个相互重叠的子集(Canopy) 。后续对每个 Canopy 内部进行 K - means 聚类,无需在整个数据集上进行相似性计算,极大减少了计算量,尤其适用于大规模数据集,能有效提高聚类效率 。

缺点解读

  • 阈值确定难题:Canopy 算法依赖两个距离阈值 T1 和 T2 ,合适的阈值能使算法有效划分数据集。但实际应用中,很难事先确定最优的 T1 和 T2 值。若阈值设置不当,可能导致划分的 Canopy 过于稀疏或过于密集,影响聚类效果。同时,即使使用 Canopy 算法进行预处理,后续基于 Canopy 的 K - means 聚类依旧可能陷入局部最优解,因为 K - means 本身的迭代优化特性容易受初始条件和数据分布影响 。

7.k-means++算法

K - means++ 是 K - means 算法的改进版本,主要改进在于初始聚类中心的选择,目的是让选择的质心尽可能分散,以提升聚类效果,减少陷入局部最优的可能性

初始聚类中心选择概率公式

  • 公式原理其中D(x)表示数据点x到最近已选聚类中心的距离 。该公式计算每个数据点被选为下一个聚类中心的概率,分子是单个数据点到最近已选中心距离的平方,分母是所有数据点到最近已选中心距离平方的总和。通过这种方式,距离已选中心远的点有更大概率被选为新的聚类中心 。

8.二分k-means算法

 

9.K-中心聚类算法

k - medoids 算法抗噪性优势

  • 原理:k - medoids 算法选择实际数据点作为簇中心(medoids ,即中心点),通过最小化绝对误差(如曼哈顿距离等)来确定簇中心。与 k - means 计算均值作为质心不同,它更关注数据点本身的代表性。
  • 示例:样本点(1,1)、(1,2)、(2,1)相对接近,属于正常数据,而(1000,1000)是明显噪声点。k - means 会受噪声影响,使质心偏向噪声点方向;k - medoids 则在所有样本点中选择使簇绝对误差最小的点作为中心,由于噪声点会增大误差,所以更可能在前三个正常样本点中选中心,避免噪声干扰,体现出对噪声的鲁棒性。

k - medoids 算法局限性

  • 计算效率问题:k - medoids 算法计算量较大,随着样本数量增加,计算每个数据点作为中心点时的绝对误差并进行比较的操作会耗费大量时间和资源,导致算法运行速度变慢。
  • 与 k - means 对比:在大规模样本情况下,k - means 虽然对噪声敏感,但少量噪声对其质心计算影响有限,且 k - means 计算简单、效率高。所以综合来看,k - means 在实际应用中更为广泛,而 k - medoids 更适用于对噪声敏感且样本规模较小的场景。

数据降维

1.定义和主要方式

 方式主要是特征选择和主成分分析(因子分析等)

2.特征选择

2.1特征选择定义

旨在从数据中包含的众多特征(属性、指标等)里,找出主要特征,剔除冗余或无关变量。例如分析鸟类相关数据时,羽毛颜色、眼睛宽度等都是可能的特征,需筛选出对研究目的(如区分鸟类种类等)有重要作用的特征 。

2.2特征选择方法

  • Filter(过滤式)也就是直接进行选择
    • 方差选择法:依据特征方差大小筛选。方差小意味着多数样本在该特征上取值相近,对区分样本作用小,可删除。如sklearn.feature_selection.VarianceThreshold(threshold = 0.0) ,默认删除所有样本取值相同(方差为 0 )的特征,也可指定阈值,删除方差低于该值的特征 。
    • 相关系数
      • 皮尔逊相关系数:衡量两变量线性相关程度,取值 [-1, 1] 。r > 0 为正相关,r < 0 为负相关;|r| = 1 完全相关,r = 0 无相关;0 < |r| < 1 存在一定程度相关,|r| 越接近 1 线性关系越密切。可通过from scipy.stats import pearsonr 计算,返回相关系数和 p 值 。
      • 斯皮尔曼相关系数:也是反映变量相关程度的统计指标,能表明变量相关方向,取值 [-1, 1] ,应用比皮尔逊相关系数更广泛 ,计算使用from scipy.stats import spearmanr 。
  • Embedded(嵌入式)也就是在某些算法中嵌入的
    • 决策树:利用信息熵、信息增益等指标,在构建决策树过程中自动选择与目标值关联紧密的特征 。
    • 正则化:如 L1、L2 正则化,在模型训练时通过约束参数,使部分特征系数趋近于 0 ,从而实现特征选择 。
    • 深度学习:如卷积神经网络等,在训练过程中自动学习数据特征,隐式进行特征选择 。

2.3低方差特征过滤

  • 原理:方差用于衡量数据的离散程度。在特征选择中,若某个特征的方差很小,说明该特征在不同样本间取值差异不大,对样本区分能力弱,可视为冗余特征进行删除。例如,在一个关于学生成绩的数据集里,如果 “学生姓名笔画数” 这个特征方差极小,说明该特征对区分学生成绩好坏没什么作用,就可考虑删除。
  • API 使用示例
import pandas as pd
from sklearn.feature_selection import VarianceThresholddef variance_demo():"""删除低方差特征——特征选择:return: None"""data = pd.read_csv("factor_returns.csv")print(data)# 1、实例化一个转换器类,指定阈值方差为1transfer = VarianceThreshold(threshold=1)# 2、调用fit_transform进行转换,这里选取data.iloc[:, 1:10]部分数据data = transfer.fit_transform(data.iloc[:, 1:10])print("删除低方差特征的结果: \n", data)print("形状: \n", data.shape)return None

2.4相关系数 - 皮尔逊相关系数

  • 原理:皮尔逊相关系数衡量两个变量之间的线性相关程度(皮尔逊低说明的是线性关系弱,并不代表相关性弱,可能还有非线性关系)。它基于变量的均值、标准差等统计量计算。当两个变量的变化趋势呈现同向线性关系时,相关系数为正;反向线性关系时,相关系数为负;若不存在线性关系,相关系数接近 0 。比如研究身高和体重的关系,若身高增加时体重也倾向于增加,皮尔逊相关系数为正。
  • API 及案例
from scipy.stats import pearsonrx1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]
result = pearsonr(x1, x2)
print(result)

代码中,从scipy.stats导入pearsonr函数,定义两个数据列表x1x2 ,调用pearsonr计算二者的皮尔逊相关系数和 p 值,打印结果。这里得到的相关系数接近 0.994 ,说明x1x2之间存在高度线性正相关关系,p 值极小表明这种相关性在统计上非常显著。

2.5相关系数 - 斯皮尔曼相关系数

  • 原理:斯皮尔曼相关系数是一种非参数统计量,它基于变量的秩次(排序位置)计算,反映变量之间的单调相关关系,不局限于线性关系。例如,研究学生考试成绩排名和平时作业完成质量排名之间的关系,斯皮尔曼相关系数能有效衡量二者关联程度。
  • API 及案例
from scipy.stats import spearmanrx1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]
result = spearmanr(x1, x2)
print(result)

3.主成分分析(这里只将实现,具体原理参考李航机器学习)

PCA(主成分分析)API 

  • 类定义sklearn.decomposition.PCA(n_components=None) 是用于主成分分析的类,主成分分析是一种常用的数据降维技术,目的是将高维数据转换到较低维数空间,同时尽可能保留数据的关键信息。
  • 参数n_components :
    • 小数形式:表示要保留数据信息的比例。例如n_components = 0.9 ,意味着 PCA 会自动确定一个合适的低维空间维度,使得转换后的数据能够保留原始数据 90% 的信息 。
    • 整数形式:直接指定降维后数据的特征维度。如n_components = 3 ,就是将数据降到 3 维 。
  • 方法fit_transform(X) :X需是numpy array格式,形状为[n_samples, n_features] (n_samples是样本数量,n_features是特征数量) 。该方法先对数据进行拟合(学习数据的分布特征等),再进行转换(降维操作),返回降维后指定维度的数组 。

PCA 代码示例

from sklearn.decomposition import PCAdef pca_demo():"""对数据进行PCA降维:return: None"""data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]# 1、实例化PCA,小数——保留多少信息transfer = PCA(n_components=0.9)# 2、调用fit_transformdata1 = transfer.fit_transform(data)print("保留90%的信息,降维结果为: \n", data1)# 1、实例化PCA,整数——指定降维到的维数transfer2 = PCA(n_components=3)# 2、调用fit_transformdata2 = transfer2.fit_transform(data)print("降维到3维的结果: \n", data2)return None

相关文章:

机器学习 Day16 聚类算法 ,数据降维

聚类算法 1.简介 1.1 聚类概念 无监督学习&#xff1a;聚类是一种无监督学习算法&#xff0c;不需要预先标记的训练数据 相似性分组&#xff1a;根据样本之间的相似性自动将样本归到不同类别 相似度度量&#xff1a;常用欧式距离作为相似度计算方法 1.2 聚类vs分类 聚类&…...

白日梦:一个方便快捷的将故事制作成视频的工具

我有故事&#xff0c;但我想把它制作成视频&#xff0c;有没有什么好用的工具可以使用呢&#xff1f;如果你也被类似的问题困扰&#xff0c;那么今天分享的这个工具将会解决这个问题。从需求来看&#xff0c;我们希望的是纯文本的故事输入&#xff0c;完整的故事视频输出&#…...

ultralytics中tasks.py---parse_model函数解析

一、根据scale获取对应的深度、宽度和最大通道数 具体例如yaml文件内容如下: depth=0.33,那么重复的模块例如C2f原本重复次数是3,6,6,3,那么T对应的模型重复次数就是三分之一即1,1,2,1次。这个在后面定义的: width=0.25,max_channels=1024 原本c2=64,但经过make_div…...

Codeforces Round 1003 (Div. 4)

A. Skibidus and Amog’u 题目大意 给你一个字符串&#xff0c;把末尾的us换成i 解题思路 删掉最后两个加上“i”即可 代码实现 #include <bits/stdc.h>using i64 long long;int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int …...

基于RFSOC ZU28DR+DSP 6U VPX处理板

板卡概述 基于RFSOC ZU28DRDSP 6U VPX处理板&#xff0c;是一款基于6U VPX总线架构的高速信号处理平台&#xff0c;数模混合信号处理卡&#xff0c;采用 Xilinx ZYNQ UltraScale RFSoC ZU28DR和TI DSP TMS320C6678组合设计&#xff0c;两者之间通过4x 5G SRIO互联。本板卡可实…...

C# 通过脚本实现接口

以前C#脚本用的委托注入模式&#xff0c;今天在AI提示下&#xff0c;尝试用脚本直接实现接口&#xff0c;然后C#可以动态或指定新类型创建接口实现对象。从代码角度看&#xff0c;稍显复杂&#xff0c;但脚本方面显得更简洁和有条理。 引用包需要Microsoft.CodeAnalysis、Micro…...

代码随想录算法训练营Day58

力扣695.岛屿的最大面积【medium】 力扣827.最大人工岛【hard】 一、力扣695.岛屿的最大面积【medium】 题目链接&#xff1a;力扣695.岛屿的最大面积 视频链接&#xff1a;代码随想录 1、思路 和岛屿数量那道题很像&#xff0c;只是递归这边要多一个怎么计算面积&#xff0c…...

若依框架页面

1.页面地址 若依管理系统 2.账号和密码 管理员 账号admin 密码admin123 运维 账号yuwei 密码123456 自己搭建的地址方便大家学习&#xff0c;不要攻击哦&#xff0c;谢谢啊...

redis 缓存穿透,缓存击穿,缓存雪崩

一&#xff1a;什么是缓存 &#xff08;1&#xff09;计算机&#xff1a;cpu、内存、磁盘&#xff0c;cpu任何需要的数据都要从内容中读入数据放入cpu,从cup内部添加一个缓存 &#xff08;2&#xff09;web开发的每个阶段都可以添加缓存 &#xff08;3&#xff09;缓存优缺点&a…...

ORACLE查看归档是否打开

一、使用V$DATABASE视图 SELECT log_mode FROM v$database; 结果说明&#xff1a; ARCHIVELOG - 数据库处于归档模式 NOARCHIVELOG - 数据库处于非归档模式 二、 使用v$instance视图 SELECT archiver FROM v$instance; 结果说明&#xff1a; STARTED - 归档进程已启动(归档模…...

Python环境管理工具深度指南:pip、Poetry、uv、Conda

Python环境管理工具深度指南&#xff1a;pip、Poetry、uv、Conda Python开发中&#xff0c;环境管理和依赖管理是不可避开的重要话题。合理地管理项目的Python环境&#xff08;尤其是虚拟环境&#xff09;有助于隔离不同项目的依赖&#xff0c;避免版本冲突&#xff0c;并确保…...

高等数学第七章---微分方程(§7.4-§7.5可降阶的高阶微分方程、二阶线性微分方程)

7.4 可降阶的高阶微分方程 某些类型的高阶微分方程可以通过适当的变量代换&#xff0c;将其阶数降低&#xff0c;从而化为阶数较低的方程进行求解。 一、 y ( n ) f ( x ) y^{(n)}f(x) y(n)f(x) 型方程 特征&#xff1a;方程的左端是 y y y 的 n n n 阶导数&#xff0c;右…...

Jmeter对服务端进行压测快速上手

安装 下载 安装jmeter的之前必须先装有JDK 官网下载地址&#xff1a;https://archive.apache.org/dist/jmeter/binaries/ jmeter3.0的对应jdk1.7&#xff0c;jmeter4.0对应jdk1.8以上&#xff0c;否者启用jmeter也会报错 配置 配置环境变量 在系统变量PATH上加上: %JMET…...

【嵌入模型与向量数据库】

目录 一、什么是向量&#xff1f; 二、为什么需要向量数据库&#xff1f; 三、向量数据库的特点 四、常见的向量数据库产品 FAISS 支持的索引类型 vs 相似度 五、常见向量相似度方法对比 六、应该用哪种 七、向量数据库的核心逻辑 &#x1f50d; 示例任务&#xff1a;…...

鸿蒙OSUniApp 开发实时聊天页面的最佳实践与实现#三方框架 #Uniapp

使用 UniApp 开发实时聊天页面的最佳实践与实现 在移动应用开发领域&#xff0c;实时聊天功能已经成为许多应用不可或缺的组成部分。本文将深入探讨如何使用 UniApp 框架开发一个功能完善的实时聊天页面&#xff0c;从布局设计到核心逻辑实现&#xff0c;带领大家一步步打造专…...

React构建组件

React构建组件 React 组件构建方式详解 React 组件的构建方式随着版本迭代不断演进&#xff0c;目前主要有 函数组件 和 类组件 两种核心模式&#xff0c;并衍生出多种高级组件设计模式。以下是完整的构建方式指南&#xff1a; 文章目录 React构建组件React 组件构建方式详解…...

auto.js面试题及答案

以下是常见的 Auto.js 面试题及参考答案&#xff0c;涵盖基础知识、脚本编写、运行机制、权限、安全等方面&#xff0c;适合开发岗位的技术面试准备&#xff1a; 一、基础类问题 什么是 Auto.js&#xff1f;它的主要用途是什么&#xff1f; 答案&#xff1a; Auto.js 是一个…...

OPC UA + ABP vNext 企业级实战:高可用数据采集框架指南

&#x1f680;&#x1f4ca; OPC UA ABP vNext 企业级实战&#xff1a;高可用数据采集框架指南 &#x1f680; &#x1f4d1; 目录 &#x1f680;&#x1f4ca; OPC UA ABP vNext 企业级实战&#xff1a;高可用数据采集框架指南 &#x1f680;一、前言 &#x1f3af;二、系统…...

【springcloud学习(dalston.sr1)】Ribbon负载均衡(七)

该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍&#xff08;含源代码&#xff09;&#xff08;一&#xff09; &#xff08;一&#xff09;Ribbon 负载均衡的理解 ribbon是一种客户端的负载均衡。类似于比如我们在火车站窗口…...

编程题 03-树1 树的同构【PAT】

文章目录 题目输入格式输出格式输入样例1&#xff08;对应图一&#xff09;输出样例1输入样例2&#xff08;对应图二&#xff09;输出样例2 题解解题思路完整代码 编程练习题目集目录 题目 给定两棵树 T 1 T_1 T1​ 和 T 2 T_2 T2​ 。如果 T 1 T_1 T1​ 可以通过若干次左右…...

团结引擎开源车模 Sample 发布:光照渲染优化 动态交互全面体验升级

光照、材质与交互效果的精细控制&#xff0c;通常意味着复杂的技术挑战&#xff0c;但借助 Shader Graph 14.1.0(已内置在团结引擎官方 1.5.0 版本中)&#xff0c;这一切都变得简单易用。通过最新团结引擎官方车模 Sample&#xff0c;开发者能切身感受到全新光照优化与编辑功能…...

Chrome安装最新vue-devtool插件

本vue-devtool版本是官方的 v7.6.8版本&#xff0c;兼容性好、功能齐全且稳定。 操作步骤&#xff1a; 方法一&#xff1a; 打开谷歌浏览器 --> 右上角三个点 --> 扩展程序 --> 管理扩展程序 --> 加载已解压的扩展程序&#xff0c; 然后选择解压后的文件夹即可。…...

鸿蒙OSUniApp打造多功能图表展示组件 #三方框架 #Uniapp

使用UniApp打造多功能图表展示组件 在当前移动应用开发领域&#xff0c;数据可视化已成为不可或缺的一部分。无论是展示销售数据、用户增长趋势还是其他业务指标&#xff0c;一个优秀的图表组件都能有效提升用户体验。UniApp作为一款跨平台开发框架&#xff0c;如何在其中实现…...

海量数据Top k 与查重问题

海量数据求top k 问题&#xff1a; - 求最大的前k个元素、求最小的前k个元素 - 求最大的第k个元素、求最小的第k个元素 解法&#xff1a; - 大根堆、小跟堆 -》 优先级队列&#xff08;priority_queue&#xff09; - 快速分割函数 priority_queue<int,vector<int>…...

Beats

Beats是一个开放源代码的数据发送器。我们可以把Beats作为一种代理安装在我 们的服务器上&#xff0c;这样就可以比较方便地将数据发送到Elasticsearch或者Logstash 中。Elastic Stack提供了多种类型的Beats组件。 Beats可以直接将数据发送到Elasticsearch或者发送到Logstash&a…...

微型PCB打样厂家选型指南

智能手机、可穿戴设备、医疗电子等高精尖领域&#xff0c;微型PCB&#xff08;印制电路板&#xff09;如同设备的“神经中枢”&#xff0c;承载着信号传输、电源分配、元件互联等核心功能。其设计精度与制造质量直接决定了产品的性能上限与可靠性。而打样环节&#xff0c;则是从…...

ISP有感自发

一、黑电平 由于传感器&#xff0c;即便在无光的情况下&#xff0c;依然会产生微小的暗电流&#xff0c;这些暗电流可能是噪点会影响后期的调试。因此&#xff0c;我们便将这些电流处理为0&#xff0c;成为纯黑的颜色。可以在源头消除这些误差。 如何矫正黑电平&#xff1a; …...

编程技能:字符串函数04,直接使用 strcpy,解决报错

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;字符串函数03&#xff0c;strncpy 回到目录…...

网络编程超时检测,unix域套接字,粘包

刷题&#xff1a; # 超时检测核心要点## 1. 基本类型### 阻塞模式- 永久等待数据&#xff0c;无超时机制- 典型函数&#xff1a;recv()阻塞调用### 非阻塞模式- 立即返回结果&#xff08;成功/错误&#xff09;- 设置方式&#xff1a;fcntl(fd, F_SETFL, O_NONBLOCK)### 超时检…...

springboot AOP 接口限流(基于IP的接口限流和黑白名单)

使用 Spring Boot 自定义注解和AOP实现基于IP的接口限流和黑白名单 在我们日常开发的项目中为了保证系统的稳定性&#xff0c;很多时候我们需要对系统做限流处理&#xff0c;它可以有效防止恶意请求对系统造成过载。常见的限流方案主要有&#xff1a; 网关限流&#xff1a; NG…...

Python uv包管理器使用指南:从入门到精通

Python uv包管理器使用指南&#xff1a;从入门到精通 作为一名Python开发者&#xff0c;你是否曾经为虚拟环境管理和依赖包安装而头疼&#xff1f;今天我要向大家介绍一个强大的工具——uv包管理器&#xff0c;它将彻底改变你的Python开发体验。 什么是uv包管理器&#xff1f…...

【计算机网络】TLS中的对称加密和非对称加密的应用,应对第三方抓包的双向https认证

TLS工作流程简化版 证书验证流程 客户端通过CA的公钥验证服务器数字证书的签名&#xff0c;确保服务器身份可信&#xff0c;防止中间人攻击。 预主密钥加密传输 客户端生成预主密钥&#xff0c;用服务器证书中的公钥加密后发送给服务器&#xff0c;只有服务器&#xff08;持有…...

Stable Diffusion WebUI 插件大全:功能详解与下载地址

Stable Diffusion WebUI 的强大之处在于其丰富的插件生态&#xff0c;这些插件可以大幅提升 AI 绘画的效率和质量。本文将详细介绍 21 个常用插件&#xff0c;包括它们的功能、效果说明以及下载地址&#xff0c;帮助你更好地使用 Stable Diffusion WebUI。 插件的安装方式 直…...

【行为型之策略模式】游戏开发实战——Unity灵活算法架构的核心实现策略

文章目录 &#x1f3ae; 策略模式&#xff08;Strategy Pattern&#xff09;深度解析一、模式本质与核心价值二、经典UML结构三、Unity实战代码&#xff08;动态伤害计算系统&#xff09;1. 定义策略接口与上下文2. 实现具体策略3. 客户端使用 四、模式进阶技巧1. 策略组合2. 策…...

第二十九节:直方图处理-直方图均衡化

在数字图像处理中,直方图均衡化(Histogram Equalization)是一种经典的对比度增强技术。它通过重新分配图像像素的亮度值,使图像的灰度级分布更加均匀,从而显著提升图像的视觉效果。 一、直方图基础 1.1 什么是直方图? 直方图(Histogram)是图像处理中用于描述图像像素…...

性能比拼: Nginx vs. Envoy

本内容是对知名性能评测博主 Anton Putra Nginx vs. Envoy performance benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 Envoy 被设计为服务网格中的高性能代理。 你可以将它部署在虚拟机&#xff08;VM&#xff09;中&#xff0c;或作为 sidecar 方式部…...

在 C 语言中,U、UL、ULL、L、LL 等符号使用说明

在 C 语言中&#xff0c;U、UL、ULL、L、LL 等符号是用于明确指定整数字面量类型的后缀&#xff0c;其核心作用是避免数据类型隐式转换导致的溢出或未定义行为。以下是具体分类和使用场景&#xff1a; 一、整数字面量后缀分类 后缀全称适用场景示例说明Uunsigned100U无符号整数…...

一般枚举题目合集

一般枚举题目合集 枚举NOIP 2011 提高组 铺地毯P2327 [SCOI2005] 扫雷蓝桥真题 跑步蓝桥真题 猜年龄 二进制枚举常用的技巧整理子集 - 力扣P10449 费解的开关UVA11464 Even Parity通过Virtual Judge提交代码正解 日期枚举蓝桥真题 跑步NOIP 2016 普及组 回文日期日期统计 写这段…...

MCP(Model Context Protocol,模型上下文协议)

1. 起因&#xff0c; 目的: MCP, 貌似最近很火&#xff0c;简单了解一下&#xff0c; 跟上时代节奏。看似是一个工具&#xff0c;一个新概念&#xff0c;其实是个鸡肋&#xff08;仅仅代表个人观点&#xff09;。 2. 先看效果 这里插入图片 3. 过程: 问题1, 什么是 MCP h…...

MQTT 在Spring Boot 中的使用

在 Spring Boot 中使用 MQTT 通常会借助 Spring Integration 项目提供的 MQTT 支持。这使得 MQTT 的集成可以很好地融入 Spring 的消息驱动和企业集成模式。 以下是如何在 Spring Boot 中集成和使用 MQTT 的详细步骤&#xff1a; 前提条件&#xff1a; MQTT Broker&#xff…...

uniapp使用全局组件,

在 Uniapp 中&#xff0c;如果你的组件是应用层组件&#xff08;例如全局悬浮按钮、全局通知栏等&#xff09;&#xff0c;并且希望它自动出现在所有页面而无需在每个页面模板中手动添加组件标签&#xff0c;可以通过以下两种方案实现&#xff1a; 方案一&#xff1a;通过 app.…...

【三维重建】三维场景生成:综述

标题&#xff1a;《3D Scene Generation: A Survey》 来源&#xff1a;新加坡南洋理工大学 项目&#xff1a;https://github.com/hzxie/Awesome-3D-Scene-Generation 文章目录 摘要一、前言二、准备工作2.1 任务定义2.2 三维场景表示2.3 生成模型 三、方法&#xff1a;分层分类…...

怎样将MM模块常用报表设置为ALV默认格式(MB52、MB5B、ME2M、ME1M等)

【SAP系统研究】 对SAP系统中的报表,最方便的格式就是ALV了,可排序、可导出,非常友好。 但有些常见报表却不是默认ALV界面的,譬如MB52: 是不是有点别扭?但其实是可以后台配置进行调整的。 现将一些常用报表修改为默认ALV的方法进行总结,便于大家使用。 一、MB52、MB5…...

Flutter 开发入门:从一个简单的计数器应用开始

在当今快速发展的移动应用开发领域&#xff0c;Flutter 框架以其高效、跨平台的特点脱颖而出&#xff0c;成为许多开发者的首选。本文将通过一个简单的 Flutter 项目代码&#xff0c;带你深入了解 Flutter 开发的基本概念和流程。这个项目是一个简单的计数器应用&#xff0c;它…...

Python解释器、REPL与脚本的区别

用ChatGPT做软件测试 “初学者写代码&#xff0c;高手理解运行。” 要成为真正理解代码的人&#xff0c;必须透彻理解&#xff1a;Python 是如何运行你的代码的&#xff1f;解释器、REPL 和脚本之间的界限与联系究竟是什么&#xff1f; 一、编程学习常见误区&#xff1a;把“运…...

总共76dp 空出20dp然后放一个控件的写法

<FrameLayout android:id"id/bt_user_agree" android:layout_width"120dp" android:layout_height"76dp" > <ImageView android: 这里里上一个 android:layout_width"wrap_content" android:layout_height"40dp" …...

【PmHub后端篇】PmHub集成 Sentinel+OpenFeign实现网关流量控制与服务降级

在微服务架构中&#xff0c;保障服务的稳定性和高可用性至关重要。本文将详细介绍在 PmHub 中如何利用 Sentinel Gateway 进行网关限流&#xff0c;以及集成 Sentinel OpenFeign 实现自定义的 fallback 服务降级。 1 熔断降级的必要性 在微服务架构中&#xff0c;服务间的调…...

C#扩展方法的入门理解

public static class CanGetModelExtension {public static T GetModel<T>(this ICanGetModel self) where T : class, IModel >self.GetArchitecture().GetModel<T>(); } 前言&#xff1a; 在学习QFramework时&#xff0c;看底层框架代码注意到这个函数&#…...

HTML应用指南:利用POST请求获取全国圆通快递服务网点位置信息

圆通快递作为国内物流行业的领军企业&#xff0c;自2000年成立以来&#xff0c;始终秉持 “客户要求&#xff0c;圆通使命” 的服务宗旨&#xff0c;致力于为客户提供高效、优质的物流服务。凭借其庞大的物流网络、先进的信息技术以及卓越的运营管理&#xff0c;圆通快递在激烈…...

vulnhub靶场——secarmy

靶机&#xff1a;secarmy靶机&#xff0c;IP地址为192.168.230.18 攻击&#xff1a;kali&#xff0c;IP地址为192.168.230.134 靶机和攻击机都采用VMware虚拟机&#xff0c;都采用NAT模式 端口扫描&#xff1a; nmap 192.168.230.18 -O -A -p- --reason -sV 21/tcp (ftp): 开…...