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

Python训练打卡Day21

常见的降维算法:

# 先运行预处理阶段的代码
import pandas as pd
import pandas as pd    #用于数据处理和分析,可处理表格数据。
import numpy as np     #用于数值计算,提供了高效的数组操作。
import matplotlib.pyplot as plt    #用于绘制各种类型的图表
import seaborn as sns   #基于matplotlib的高级绘图库,能绘制更美观的统计图形。
import warnings
warnings.filterwarnings("ignore")# 设置中文字体(解决中文显示问题)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统常用黑体字体
plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号
data = pd.read_csv('data.csv')    #读取数据# 先筛选字符串变量 
discrete_features = data.select_dtypes(include=['object']).columns.tolist()
# Home Ownership 标签编码
home_ownership_mapping = {'Own Home': 1,'Rent': 2,'Have Mortgage': 3,'Home Mortgage': 4
}
data['Home Ownership'] = data['Home Ownership'].map(home_ownership_mapping)# Years in current job 标签编码
years_in_job_mapping = {'< 1 year': 1,'1 year': 2,'2 years': 3,'3 years': 4,'4 years': 5,'5 years': 6,'6 years': 7,'7 years': 8,'8 years': 9,'9 years': 10,'10+ years': 11
}
data['Years in current job'] = data['Years in current job'].map(years_in_job_mapping)# Purpose 独热编码,记得需要将bool类型转换为数值
data = pd.get_dummies(data, columns=['Purpose'])
data2 = pd.read_csv("data.csv") # 重新读取数据,用来做列名对比
list_final = [] # 新建一个空列表,用于存放独热编码后新增的特征名
for i in data.columns:if i not in data2.columns:list_final.append(i) # 这里打印出来的就是独热编码后的特征名
for i in list_final:data[i] = data[i].astype(int) # 这里的i就是独热编码后的特征名# Term 0 - 1 映射
term_mapping = {'Short Term': 0,'Long Term': 1
}
data['Term'] = data['Term'].map(term_mapping)
data.rename(columns={'Term': 'Long Term'}, inplace=True) # 重命名列
continuous_features = data.select_dtypes(include=['int64', 'float64']).columns.tolist()  #把筛选出来的列名转换成列表# 连续特征用中位数补全
for feature in continuous_features:     mode_value = data[feature].mode()[0]            #获取该列的众数。data[feature].fillna(mode_value, inplace=True)          #用众数填充该列的缺失值,inplace=True表示直接在原数据上修改。# 最开始也说了 很多调参函数自带交叉验证,甚至是必选的参数,你如果想要不交叉反而实现起来会麻烦很多
# 所以这里我们还是只划分一次数据集data.drop(columns=['Id'], inplace=True) # 删除 Loan ID 列
data.info() # 查看数据集的信息,包括数据类型和缺失值情况

此时有31个特征,进行特征降维,提到特征降维一般默认的是无监督降维,这种方法只需要特征数据本身。同时还有有监督的方法。

1.无监督降维 (Unsupervised Dimensionality Reduction)

        定义:这类算法在降维过程中**不使用**任何关于数据样本的标签信息(比如类别标签、目标值等)。它们仅仅根据数据点本身的分布、方差、相关性、局部结构等特性来寻找低维表示。

        输入:只有特征矩阵 `X`

        目标:

        留数据中尽可能多的方差(如 PCA)。

        保留数据的局部或全局流形结构(如 LLE, Isomap, t-SNE, UMAP)。

        找到能够有效重构原始数据的紧凑表示(如 Autoencoder)。

         找到统计上独立的成分(如 ICA)。

        典型算法:

        PCA (Principal Component Analysis)** / **SVD (Singular Value Decomposition)

        t-SNE (t-distributed Stochastic Neighbor Embedding)

        UMAP (Uniform Manifold Approximation and Projection)

        LLE (Locally Linear Embedding)

        Isomap (Isometric Mapping)

        Autoencoders (基本形式)

        ICA (Independent Component Analysis)

2.有监督降维(Supervised Dimensionality Reduction)

        定义:这类算法在降维过程中**会利用**数据样本的标签信息(通常是类别标签 `y`)。它们的目标是找到一个低维子空间,在这个子空间中,不同类别的数据点能够被更好地分离开,或者说,这个低维表示更有利于后续的分类(或回归)任务。

        输入:特征矩阵 `X` **和** 对应的标签向量 `y`

        目标:

       最大化不同类别之间的可分性,同时最小化同一类别内部的离散度(如 LDA)。

        找到对预测目标变量 `y` 最有信息量的特征组合。

        典型算法:

        LDA (Linear Discriminant Analysis):这是最经典的监督降维算法。它寻找的投影方向能够最大化类间散度与类内散度之比。

        还有一些其他的,比如 NCA (Neighbourhood Components Analysis),但 LDA 是最主要的代表。

        举个例子来说明:

        PCA (无监督):如果你有一堆人脸图片,PCA会尝试找到那些能最好地概括所有人脸变化的“主脸”(特征向量),比如脸型、鼻子大小等,它不关心这些人脸属于谁。

        LDA (有监督):如果你有一堆人脸图片,并且你知道每张图片属于哪个人(标签)。LDA会尝试找到那些能最好地区分不同人的人脸特征组合。比如,如果A和B的脸型很像,但眼睛差别很大,LDA可能会更强调眼睛的特征,即使脸型方差更大。PCA是利用最大化方差来实现无监督降维,而LDA则是在此基础上,加入了类别信息,其优化目标就变成了类间差异最大化和类内差异最小化。

        PCA等无监督降维方法的目标是保留数据的最大方差,这些方差大的方向不一定是对分类最有用的方向。因此,在分类任务中,LDA通常比PCA更直接有效。

        

from sklearn.model_selection import train_test_split
X = data.drop(['Credit Default'], axis=1)  # 特征,axis=1表示按列删除
y = data['Credit Default'] # 标签from sklearn.model_selection import train_test_split
X = data.drop(['Credit Default'], axis=1)  # 特征,axis=1表示按列删除
y = data['Credit Default'] # 标签
# 按照8:2划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 80%训练集,20%测试集from sklearn.ensemble import RandomForestClassifier #随机森林分类器from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于评估分类器性能的指标
from sklearn.metrics import classification_report, confusion_matrix #用于生成分类报告和混淆矩阵
import warnings #用于忽略警告信息
warnings.filterwarnings("ignore") # 忽略所有警告信息
# --- 1. 默认参数的随机森林 ---
# 评估基准模型,这里确实不需要验证集
print("--- 1. 默认参数随机森林 (训练集 -> 测试集) ---")
import time # 这里介绍一个新的库,time库,主要用于时间相关的操作,因为调参需要很长时间,记录下会帮助后人知道大概的时长
start_time = time.time() # 记录开始时间
rf_model = RandomForestClassifier(random_state=42)
rf_model.fit(X_train, y_train) # 在训练集上训练
rf_pred = rf_model.predict(X_test) # 在测试集上预测
end_time = time.time() # 记录结束时间print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")
print("\n默认随机森林 在测试集上的分类报告:")
print(classification_report(y_test, rf_pred))
print("默认随机森林 在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, rf_pred))
# # umap-learn 是一个用于降维和可视化的库,特别适合处理高维数据。它使用了一种基于流形学习的算法,可以有效地将高维数据嵌入到低维空间中,同时保持数据的局部结构。
# !pip install umap-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
# 确保这些库已导入,你的原始代码中可能已经包含了部分
import time
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler # 特征缩放
from sklearn.decomposition import PCA # 主成分分析
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA # 线性判别分析
# UMAP 需要单独安装: pip install umap-learn
import umap # 如果安装了 umap-learn,可以这样导入from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix# 你的 X_train, X_test, y_train, y_test 应该已经根据你的代码准备好了
# 我们假设你的随机森林模型参数与基准模型一致,以便比较降维效果
# rf_params = {'random_state': 42} # 如果你的基准模型有其他参数,也在这里定义
# 为了直接比较,我们使用默认的 RandomForestClassifier 参数,除了 random_state

主成分分析 (PCA:寻找最大方差方向)

        PCA可以被看作是将SVD应用于经过均值中心化的数据矩阵,并对其结果进行特定解释的一种方法。主成分分析 (PCA) 的核心思想是识别数据中方差最大的方向(即主成分)。然后,它将数据投影到由这些最重要的主成分构成的新的、维度更低子空间上。这样做的目的是在降低数据维度的同时,尽可能多地保留原始数据中的“信息”(通过方差来衡量)。新的特征(主成分)是原始特征的线性组合,并且它们之间是正交的(不相关)。

可以将PCA视为:

1.  对数据进行均值中心化。

2.  对中心化后的数据进行SVD。

3.  使用SVD得到的右奇异向量 V 作为主成分方向。

4.  使用奇异值 S 来评估每个主成分的重要性(解释的方差)。

5.  使用 U*S(或 X_centered * V)来获得降维后的数据表示。

        PCA主要适用于那些你认为最重要的信息可以通过数据方差来捕获,并且数据结构主要是线性的情况。

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix
import time
import numpy as np # 确保numpy导入# 假设 X_train, X_test, y_train, y_test 已经准备好了print(f"\n--- 2. PCA 降维 + 随机森林 (不使用 Pipeline) ---")# 步骤 1: 特征缩放
scaler_pca = StandardScaler()
X_train_scaled_pca = scaler_pca.fit_transform(X_train)
X_test_scaled_pca = scaler_pca.transform(X_test) # 使用在训练集上fit的scaler# 步骤 2: PCA降维
# 选择降到10维,或者你可以根据解释方差来选择,例如:
pca_expl = PCA(random_state=42)
pca_expl.fit(X_train_scaled_pca)
cumsum_variance = np.cumsum(pca_expl.explained_variance_ratio_)
n_components_to_keep_95_var = np.argmax(cumsum_variance >= 0.95) + 1
print(f"为了保留95%的方差,需要的主成分数量: {n_components_to_keep_95_var}")#--- 2. PCA 降维 + 随机森林 (不使用 Pipeline) ---
#为了保留95%的方差,需要的主成分数量: 26
# 我们测试下降低到10维的效果
n_components_pca = 10
pca_manual = PCA(n_components=n_components_pca, random_state=42)X_train_pca = pca_manual.fit_transform(X_train_scaled_pca)
X_test_pca = pca_manual.transform(X_test_scaled_pca) # 使用在训练集上fit的pcaprint(f"PCA降维后,训练集形状: {X_train_pca.shape}, 测试集形状: {X_test_pca.shape}")
start_time_pca_manual = time.time()
# 步骤 3: 训练随机森林分类器
rf_model_pca = RandomForestClassifier(random_state=42)
rf_model_pca.fit(X_train_pca, y_train)# 步骤 4: 在测试集上预测
rf_pred_pca_manual = rf_model_pca.predict(X_test_pca)
end_time_pca_manual = time.time()print(f"手动PCA降维后,训练与预测耗时: {end_time_pca_manual - start_time_pca_manual:.4f} 秒")print("\n手动 PCA + 随机森林 在测试集上的分类报告:")
print(classification_report(y_test, rf_pred_pca_manual))
print("手动 PCA + 随机森林 在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, rf_pred_pca_manual))

t-分布随机邻域嵌入 (t-SNE)

        t-SNE:保持高维数据的局部邻域结构,用于可视化。t-SNE 是一种强大的非线性降维技术,主要用于高维数据的可视化。它通过在低维空间中保持高维空间中数据点之间的局部相似性(邻域关系)来工作。与PCA关注全局方差不同,t-SNE 更关注局部细节。理解它的超参数(尤其是困惑度)和结果的正确解读方式非常重要。

from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix
import time
import numpy as np
import matplotlib.pyplot as plt # 用于可选的可视化
import seaborn as sns # 用于可选的可视化# 假设 X_train, X_test, y_train, y_test 已经准备好了
# 并且你的 X_train, X_test 是DataFrame或Numpy Arrayprint(f"\n--- 3. t-SNE 降维 + 随机森林  ---")
print("       标准 t-SNE 主要用于可视化,直接用于分类器输入可能效果不佳。")# 步骤 1: 特征缩放
scaler_tsne = StandardScaler()
X_train_scaled_tsne = scaler_tsne.fit_transform(X_train)
X_test_scaled_tsne = scaler_tsne.transform(X_test) # 使用在训练集上fit的scaler# 步骤 2: t-SNE 降维
# 我们将降维到与PCA相同的维度(例如10维)或者一个适合分类的较低维度。
# t-SNE通常用于2D/3D可视化,但也可以降到更高维度。
# 然而,降到与PCA一样的维度(比如10维)对于t-SNE来说可能不是其优势所在,
# 并且计算成本会显著增加,因为高维t-SNE的优化更困难。
# 为了与PCA的 n_components=10 对比,我们这里也尝试降到10维。
# 但请注意,这可能非常耗时,且效果不一定好。
# 通常如果用t-SNE做分类的预处理(不常见),可能会选择非常低的维度(如2或3)。# n_components_tsne = 10 # 与PCA的例子保持一致,但计算量会很大
n_components_tsne = 2    # 更典型的t-SNE用于分类的维度,如果想快速看到结果# 如果你想严格对比PCA的10维,可以将这里改为10,但会很慢# 对训练集进行 fit_transform
tsne_model_train = TSNE(n_components=n_components_tsne,perplexity=30,    # 常用的困惑度值n_iter=1000,      # 足够的迭代次数init='pca',       # 使用PCA初始化,通常更稳定learning_rate='auto', # 自动学习率 (sklearn >= 1.2)random_state=42,  # 保证结果可复现n_jobs=-1)        # 使用所有CPU核心
print("正在对训练集进行 t-SNE fit_transform...")
start_tsne_fit_train = time.time()
X_train_tsne = tsne_model_train.fit_transform(X_train_scaled_tsne)
end_tsne_fit_train = time.time()
print(f"训练集 t-SNE fit_transform 完成,耗时: {end_tsne_fit_train - start_tsne_fit_train:.2f} 秒")# 对测试集进行 fit_transform
# 再次强调:这是独立于训练集的变换
tsne_model_test = TSNE(n_components=n_components_tsne,perplexity=30,n_iter=1000,init='pca',learning_rate='auto',random_state=42, # 保持参数一致,但数据不同,结果也不同n_jobs=-1)
print("正在对测试集进行 t-SNE fit_transform...")
start_tsne_fit_test = time.time()
X_test_tsne = tsne_model_test.fit_transform(X_test_scaled_tsne) # 注意这里是 X_test_scaled_tsne
end_tsne_fit_test = time.time()
print(f"测试集 t-SNE fit_transform 完成,耗时: {end_tsne_fit_test - start_tsne_fit_test:.2f} 秒")print(f"t-SNE降维后,训练集形状: {X_train_tsne.shape}, 测试集形状: {X_test_tsne.shape}")start_time_tsne_rf = time.time()
# 步骤 3: 训练随机森林分类器
rf_model_tsne = RandomForestClassifier(random_state=42)
rf_model_tsne.fit(X_train_tsne, y_train)# 步骤 4: 在测试集上预测
rf_pred_tsne_manual = rf_model_tsne.predict(X_test_tsne)
end_time_tsne_rf = time.time()print(f"t-SNE降维数据上,随机森林训练与预测耗时: {end_time_tsne_rf - start_time_tsne_rf:.4f} 秒")
total_tsne_time = (end_tsne_fit_train - start_tsne_fit_train) + \(end_tsne_fit_test - start_tsne_fit_test) + \(end_time_tsne_rf - start_time_tsne_rf)
print(f"t-SNE 总耗时 (包括两次fit_transform和RF): {total_tsne_time:.2f} 秒")print("\n手动 t-SNE + 随机森林 在测试集上的分类报告:")
print(classification_report(y_test, rf_pred_tsne_manual))
print("手动 t-SNE + 随机森林 在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, rf_pred_tsne_manual))

线性判别分析 (Linear Discriminant Analysis, LDA)

        LDA 是一种利用类别标签信息来寻找最佳类别分离投影的降维方法,其降维的潜力直接与类别数量挂钩。

        

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix
import time
import numpy as np
# 假设你已经导入了 matplotlib 和 seaborn 用于绘图 (如果需要)
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 如果需要3D绘图
import seaborn as snsprint(f"\n--- 4. LDA 降维 + 随机森林 ---")# 步骤 1: 特征缩放
scaler_lda = StandardScaler()
X_train_scaled_lda = scaler_lda.fit_transform(X_train)
X_test_scaled_lda = scaler_lda.transform(X_test) # 使用在训练集上fit的scaler# 步骤 2: LDA 降维
n_features = X_train_scaled_lda.shape[1]
if hasattr(y_train, 'nunique'):n_classes = y_train.nunique()
elif isinstance(y_train, np.ndarray):n_classes = len(np.unique(y_train))
else:n_classes = len(set(y_train))max_lda_components = min(n_features, n_classes - 1)# 设置目标降维维度
n_components_lda_target = 10if max_lda_components < 1:print(f"LDA 不适用,因为类别数 ({n_classes})太少,无法产生至少1个判别组件。")X_train_lda = X_train_scaled_lda.copy() # 使用缩放后的原始特征X_test_lda = X_test_scaled_lda.copy()   # 使用缩放后的原始特征actual_n_components_lda = n_featuresprint("将使用缩放后的原始特征进行后续操作。")
else:# 实际使用的组件数不能超过LDA的上限,也不能超过我们的目标(如果目标更小)actual_n_components_lda = min(n_components_lda_target, max_lda_components)if actual_n_components_lda < 1: # 这种情况理论上不会发生,因为上面已经检查了 max_lda_components < 1print(f"计算得到的实际LDA组件数 ({actual_n_components_lda}) 小于1,LDA不适用。")X_train_lda = X_train_scaled_lda.copy()X_test_lda = X_test_scaled_lda.copy()actual_n_components_lda = n_featuresprint("将使用缩放后的原始特征进行后续操作。")else:print(f"原始特征数: {n_features}, 类别数: {n_classes}")print(f"LDA 最多可降至 {max_lda_components} 维。")print(f"目标降维维度: {n_components_lda_target} 维。")print(f"本次 LDA 将实际降至 {actual_n_components_lda} 维。")lda_manual = LinearDiscriminantAnalysis(n_components=actual_n_components_lda, solver='svd')X_train_lda = lda_manual.fit_transform(X_train_scaled_lda, y_train)X_test_lda = lda_manual.transform(X_test_scaled_lda)print(f"LDA降维后,训练集形状: {X_train_lda.shape}, 测试集形状: {X_test_lda.shape}")start_time_lda_rf = time.time()
# 步骤 3: 训练随机森林分类器
rf_model_lda = RandomForestClassifier(random_state=42)
rf_model_lda.fit(X_train_lda, y_train)# 步骤 4: 在测试集上预测
rf_pred_lda_manual = rf_model_lda.predict(X_test_lda)
end_time_lda_rf = time.time()print(f"LDA降维数据上,随机森林训练与预测耗时: {end_time_lda_rf - start_time_lda_rf:.4f} 秒")print("\n手动 LDA + 随机森林 在测试集上的分类报告:")
print(classification_report(y_test, rf_pred_lda_manual))
print("手动 LDA + 随机森林 在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, rf_pred_lda_manual))

@浙大疏锦行

相关文章:

Python训练打卡Day21

常见的降维算法&#xff1a; # 先运行预处理阶段的代码 import pandas as pd import pandas as pd #用于数据处理和分析&#xff0c;可处理表格数据。 import numpy as np #用于数值计算&#xff0c;提供了高效的数组操作。 import matplotlib.pyplot as plt #用于绘…...

PostgreSQL 序列(Sequence) 与 Oracle 序列对比

PostgreSQL 序列(Sequence) 与 Oracle 序列对比 PostgreSQL 和 Oracle 都提供了序列(Sequence)功能&#xff0c;但在实现细节和使用方式上存在一些重要差异。以下是两者的详细对比&#xff1a; 一 基本语法对比 1.1 创建序列 PostgreSQL: CREATE [ { TEMPORARY | TEMP } |…...

直播:怎样用Agentic AI搭建企业AI应用?5.24日,拆解新一代“智能客服系统”案例

2025 DeepSeek掀起了中国企业的AI落地浪潮&#xff01; 随着应用的深入&#xff0c;AI的落地技术正在快速演化。 3月&#xff0c;Manus一夜爆火&#xff0c;让AI Agent更加引人关注。 从生成式AI&#xff0c;到Agentic AI&#xff08;代理式AI&#xff09;。 AI正在从只能生…...

《Asp.net Mvc 网站开发》复习试题

一.选择题(注:每题2分,共 54分,只能在下列表格中,填写每个题目相应的正确字母选项) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26&#xff1a; :27&#xff1a; 1. Mvc让软件…...

算法题(145):货仓选址

审题&#xff1a; 本题需要我们找出距离之和的最小值 思路&#xff1a; 方法一&#xff1a;贪心 贪心策略&#xff1a;将货仓建立在所有商店的中间可以达到距离之和最小 因为每家商店都需要接收一车商品&#xff0c;所以这里的距离之和指的是从货仓到每一家商店的路线的距离之和…...

✅ TensorRT Python 安装精简流程(适用于 Ubuntu 20.04+)

安装 TensorRT Python 轮子的步骤 确保 pip 和 wheel 模块已更新并安装&#xff1a; 参考链接 python3 -m pip install --upgrade pip python3 -m pip install wheel 1. 确认环境要求 Python&#xff1a;版本 3.8 - 3.13 OS&#xff1a;Ubuntu 20.04 或 Windows 10 CPU&a…...

MYSQL 全量,增量备份与恢复

目录 一 数据备份的重要性 1 数据备份的重要性 2 数据库备份类型 2.1 从物理与逻辑的角度分类 2.2. 从数据库的备份策略角度分类从数据库的备份策略角度,数据库的备份可分为完全备份、差异备份和增量备份。 3 常见的备份方法 3.1 物理冷备份 物理冷备份时需要在数据库处…...

10. Spring AI PromptTemplate:从模板到高级技巧

1、前言 如果学到了这里,相信大部分人对Prompt并不陌生了。 在 Spring AI 的世界里,与强大的语言模型进行交互的基石便是 Prompt(提示语)。它不仅仅是你输入给 AI 的一段文本,更是你与智能对话的桥梁,是你唤醒模型潜能的关键指令。理解 Prompt 的本质、构建原则以及在 …...

基于OpenCV的人脸识别:Haar级联分类器

文章目录 引言一、环境准备二、代码实现1. 图像加载与预处理2. 加载Haar级联分类器3. 人脸检测核心参数详解4. 结果显示与标注 三、效果优化建议四、完整代码五、总结 引言 本文将带你一步步实现一个简单但实用的人脸检测程序&#xff0c;使用Python和OpenCV库。 一、环境准备…...

Git安装教程及常用命令

1. 安装 Git Bash 下载 Git 安装包 首先&#xff0c;访问 Git 官方网站 下载适用于 Windows 的 Git 安装包。 安装步骤 启动安装程序&#xff1a;双击下载的 .exe 文件&#xff0c;启动安装程序。选择安装选项&#xff1a; 安装路径&#xff1a;可以选择默认路径&#xff0…...

【PmHub后端篇】Skywalking:性能监控与分布式追踪的利器

在微服务架构日益普及的当下&#xff0c;对系统的性能监控和分布式追踪显得尤为重要。本文将详细介绍在 PmHub 项目中&#xff0c;如何使用 Skywalking 实现对系统的性能监控和分布式追踪&#xff0c;以及在这过程中的一些关键技术点和实践经验。 1 分布式链路追踪概述 在微服…...

ChromeDriver 技术生态与应用场景深度解析

ChromeDriver 技术生态与应用场景深度解析 随着 Web 自动化测试、运维和数据采集需求的不断增长&#xff0c;ChromeDriver 及其相关技术栈在各行业中扮演着举足轻重的角色。本文将从技术选型、语言适配、典型场景、技术延伸等维度&#xff0c;结合最新行业趋势与实践经验&…...

链表面试题6之回文结构

经过前几道题的铺垫&#xff0c;那么我们也是来到了链表的第六关。这也是一道非常经典的题目。 目录 逆置法 数组法 那么对于这道题目&#xff0c;我们要判断回文结构&#xff0c;实际上就是判断链表对不对称。这种类型的题目我们好像在哪里见过&#xff0c;对了&#xff0c…...

ASP.NET Core Identity框架使用指南

文章目录 前言一、核心功能二、核心组件三、使用1&#xff09;创建项目2&#xff09;安装必要 NuGet包3&#xff09;配置数据库连接字符串4&#xff09;用户与角色实体定义4&#xff09;配置数据库上下文5&#xff09; 注册服务6&#xff09;数据库迁移与初始化7&#xff09;用…...

Hugging Face推出了一款免费AI代理工具,它能像人类一样使用电脑

Hugging Face推出了一款免费AI代理工具&#xff0c;它能像人类一样使用电脑。 这款工具名为Open Computer Agent&#xff08;开放计算机代理&#xff09;&#xff0c;可模拟真实的电脑操作。 无需安装&#xff0c;在浏览器中即可运行。 以下是一些信息&#xff1a; - Open C…...

一.Gitee基本操作

一.初始化 1.git init初始化仓库 git init 用于在当前目录下初始化一个本地 Git 仓库&#xff0c;让这个目录开始被 Git 跟踪和管理。 生成 .git 元数据目录&#xff0c;从而可以开始进行提交、回退、分支管理等操作。 2.git config user.name/user.email配置本地仓库 # 设置…...

24、DeepSeek-V3论文笔记

DeepSeek-V3论文笔记 **一、概述****二、核心架构与创新技术**0.汇总&#xff1a;1. **基础架构**2. **创新策略** 1.DeepSeekMoE无辅助损失负载均衡DeepSeekMoE基础架构无辅助损失负载均衡互补序列级辅助损失 2.多令牌预测&#xff08;MTP&#xff09;1.概念2、原理2.1BPD2.2M…...

神经网络初步学习——感知机

一、前言 神经网络&#xff0c;顾名思义&#xff0c;它与我们大脑生物学里面讲到的神经元有关联。前辈们在研究早期人工智能的时候&#xff0c;就开始过我们的“交叉融合”&#xff0c;他们思考能不能把我们的人工智能的学习模式改造成我们人脑中神经元之间的学习方式——于是乎…...

在Text-to-SQL任务中应用过程奖励模型

论文标题 Reward-SQL: Boosting Text-to-SQL via Stepwise Reasoning and Process-Supervised Rewards 论文地址 https://arxiv.org/pdf/2505.04671 代码地址 https://github.com/ruc-datalab/RewardSQL 作者背景 中国人民大学&#xff0c;香港科技大学广州&#xff0c;阿…...

Python的安装使用

一、下载Python安装包 下载python安装包&#xff0c;可以直接访问官网地址&#xff1a;https://www.python.org/downloads/ 通过页面咱们直接下载最新版本的python安装包即可&#xff0c;python3.13.3。在页面的下方也可下载安装之前的版本&#xff0c;目前咱们按最新版本安装…...

mapreduce-wordcount程序2

WordCount案例分析 给定一个路径&#xff0c;统计这个路径下所有的文件中的每一个单词的出现次数。 其中&#xff0c;需要我们去实现代码的部分是&#xff1a;map函数和reduce函数。它们各自的作用是&#xff1a; map函数的入参是kv结构&#xff0c;k是偏移量&#xff0c;v是一…...

Java 内存模型(JMM)与内存屏障:原理、实践与性能权衡

Java 内存模型&#xff08;JMM&#xff09;与内存屏障&#xff1a;原理、实践与性能权衡 在多线程高并发时代&#xff0c;Java 内存模型&#xff08;JMM&#xff09; 及其背后的内存屏障机制&#xff0c;是保障并发程序正确性与性能的基石。本文将系统梳理 JMM 的核心原理、内…...

1.6 偏导数

&#xff08;铺垫&#xff09;全导数与偏导数看似相似&#xff0c;实则对应不同维度的变化观察。理解它们的差异需要从"变量自由度"切入&#xff1a; &#xff08;核心差异解剖&#xff09; 维度偏导数全导数变量关系其他变量被强制锁定所有变量都通过中间变量关联…...

网络爬虫学习之正则表达式

开篇 本文整理自《python3 网络爬虫开发实战》的学习笔记。 笔记整理 match match是一种常用的匹配方法&#xff0c;向它传入要匹配的字符串以及正则表达式&#xff0c;就可以检测这个正则表达式是否和字符串相匹配。 match会尝试从字符串的起始位置开始匹配正则表达式&#x…...

Pytorch常用统计和矩阵运算

文章目录 常用统计函数torch.prod()求积torch.sum()求和torch.mean()求均值torch.max()求最值torch.var() 方差torch.std()标准差 常见矩阵运算矩阵乘法点积 (torch.dot)批量矩阵乘法 (torch.bmm)奇异值分解 (SVD)特征分解 (torch.eig)矩阵求逆 (torch.inverse)伪逆 (torch.pin…...

PyTorch Lightning实战 - 训练 MNIST 数据集

MNIST with PyTorch Lightning 利用 PyTorch Lightning 训练 MNIST 数据。验证梯度范数、学习率、优化器对训练的影响。 pip show lightning Version: 2.5.1.post0Fast dev run DATASET_DIR"/repos/datasets" python mnist_pl.py --output_grad_norm --fast_dev_run…...

内存泄漏系列专题分析之十一:高通相机CamX ION/dmabuf内存管理机制Camx ImageBuffer原理

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:内存泄漏系列专题分析之八:高通相机CamX内存泄漏&内存占用分析--通用ION(dmabuf)内存拆解 这一篇我们开始讲: 内存泄漏系列专题分析之十一:高通相机CamX ION/dmabuf内存管理机制Camx ImageBuf…...

MySQL-逻辑架构

MySQL服务器逻辑架构图 主要分层结构 1.连接层 功能&#xff1a;处理连接、安全认证、线程管理等 核心模块&#xff1a;连接器&#xff1a;支持不同语言&#xff08;JDBC&#xff09;与MySQL交互&#xff1b;线程连接池&#xff1a;管理线程连接&#xff0c;减少线程频繁创建…...

架构思维:通用架构模式_系统监控的设计

文章目录 引言什么是监控三大常见监控类型1. 次数监控2. 性能监控3. 可用率监控 落地监控1. 服务入口2. 服务内部3. 服务依赖 监控时间间隔的取舍小结 引言 架构思维&#xff1a;通用架构模式_从设计到代码构建稳如磐石的系统 架构思维&#xff1a;通用架构模式_稳如老狗的SDK…...

架构、构架、结构、框架之间有什么区别?|系统设计|系统建模

在技术与知识中&#xff0c;我们总是频繁地遇到一些高度抽象、看似类似、却又各自承载着不同思想重量的词汇。“架构”、“构架”、“结构”、“框架”即是其中最为常见又最为令人困惑的一组术语。它们既是工程师们日常工作的核心语言&#xff0c;也是学者们在探索系统、组织、…...

系统架构设计(五):构件

定义 构件&#xff08;Component&#xff09;是指一个具有明确边界和独立部署能力的模块化单元&#xff0c;能够封装实现细节&#xff0c;并通过接口与其他构件协作完成系统功能。 主要特性 特性说明可复用性构件可以在不同系统中被重复使用。可部署性构件可以独立部署&…...

【系统架构师】2025论文《基于架构的软件设计方法》【最新】

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文分享【系统架构师】2025论文《系统可靠性设计》&#xff0c;期待与你一同探索、学习、进步&#xff0c;一起卷起来叭&#xff01; 目录 项目介绍背景介绍系统模块技术栈基于…...

MultiTTS 1.7.6 | 最强离线语音引擎,提供多音色无障碍朗读功能,附带语音包

MultiTTS是一款免费且支持离线使用的文本转语音&#xff08;TTS&#xff09;工具&#xff0c;旨在为用户提供丰富的语音包选项&#xff0c;实现多音色无障碍朗读功能。这款应用程序特别适合用于阅读软件中的离线听书体验&#xff0c;提供了多样化的语音选择&#xff0c;使得听书…...

Costmap代价地图

以下为ROS navigation导航工具包的move_base框架图。其中有两个关于代价地图的模块(红框所框)&#xff0c;全局代价地图global_costmap和局部代价地图local_costmap&#xff0c;这两个代价地图实际上是调用的同一个功能包代码&#xff0c;通过配置不同的参数实例化为两个代价地…...

用生活例子通俗理解 Python OOP 四大特性

让我们用最生活化的方式&#xff0c;结合Python代码&#xff0c;来理解面向对象编程的四大特性。 1. 封装&#xff1a;像使用自动售货机 生活比喻&#xff1a; 你只需要投币、按按钮&#xff0c;就能拿到饮料 不需要知道机器内部如何计算找零、如何运送饮料 如果直接打开机…...

大规模容器集群怎么规划

规划大规模容器集群需要综合考虑多个方面&#xff0c;以下是一些关键的规划要点&#xff1a; 业务需求分析 应用类型和特点&#xff1a;明确容器集群上运行的应用类型&#xff0c;如 Web 应用、数据库、大数据处理等。不同类型的应用对资源的需求和性能要求各不相同。例如&am…...

机器学习第七讲:概率统计 → 预测可能性,下雨概率70%就是典型应用

机器学习第七讲&#xff1a;概率统计 → 预测可能性&#xff0c;下雨概率70%就是典型应用 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1a;超详细手…...

蓝桥杯13届 卡牌

问题描述 这天, 小明在整理他的卡牌。 他一共有 n 种卡牌, 第 i 种卡牌上印有正整数数 i(i∈[1,n]), 且第 i 种卡牌 现有 ai​ 张。 而如果有 n 张卡牌, 其中每种卡牌各一张, 那么这 n 张卡牌可以被称为一 套牌。小明为了凑出尽可能多套牌, 拿出了 m 张空白牌, 他可以在上面…...

《Vue.js》阅读之响应式数据与副作用函数

Vue.js 《Vue.js设计与实现》&#xff08;霍春阳&#xff09; 适合&#xff1a;从零手写Vue3响应式系统&#xff0c;大厂面试源码题直接覆盖。重点章节&#xff1a;第4章&#xff08;响应式&#xff09;、第5章&#xff08;渲染器&#xff09;、第8章&#xff08;编译器&…...

线下消费经济“举步维艰”,开源AI智能名片链动2+1+S2B2C小程序线上“狂飙突进”!

开源AI智能名片链动21模式S2B2C商城小程序&#xff1a;驱动消费经济迭代的数字化引擎 摘要&#xff1a;本文以中国消费经济四阶段演进为框架&#xff0c;分析开源AI智能名片链动21模式S2B2C商城小程序如何重构商业生态。研究显示&#xff0c;该系统通过AI算法驱动的精准需求匹…...

简述DNS域名服务器

DNS简述 在互联网中&#xff0c;识别一个主机通常有两种方式——主机名和IP地址。从人类角度来看&#xff0c;人类肯定更喜欢这些便于记忆的主机名标识方式&#xff0c;而对于路由器来说&#xff0c;路由器则更喜欢定长的&#xff0c;有结构层次的IP地址。所以DNS域名服务器就…...

小结: Port Security,DHCP Snooping,IPSG,DAI,

以下是华为和思科在 IP Source Guard、Dynamic ARP Inspection、DHCP Snooping、Port Security 四个安全功能的配置指令对比&#xff1a; 1. Port Security&#xff08;端口安全&#xff09; 思科&#xff08;Cisco&#xff09; # 进入接口模式 interface GigabitEthernet0/1…...

2025年阿里云ACP人工智能高级工程师认证模拟试题(附答案解析)

这篇文章的内容是阿里云ACP人工智能高级工程师认证考试的模拟试题。 所有模拟试题由AI自动生成&#xff0c;主要为了练习和巩固知识&#xff0c;并非所谓的 “题库”&#xff0c;考试中如果出现同样试题那真是纯属巧合。 1、在PAl-Studio实验运行完毕后&#xff0c;可以右键单…...

SwitchyOmega_Chromium 代理插件下载与配置

下载地址: 【免费】SwitchyOmega-Chromium.ran资源-CSDN文库 下载 SwitchyOmega_Chromium.ran 文件。 解压缩文件 解压第一层后&#xff0c;解压第二层代理插件SwitchyOmega_Chromium。 打开 Chromium 浏览器。 导入插件&#xff1a; 在浏览器地址栏输入 chrome://extensio…...

【Nova UI】十四、打造组件库之按钮组件(下):按钮组组件的构建之旅

序言 在之前的探索中&#xff0c;我们成功雕琢出了功能完备且样式精美的 Vue 按钮组件&#xff0c;它在前端界面上绽放着独特的光彩✨。然而&#xff0c;前端开发的创新之路永无止境。如今&#xff0c;为了满足更丰富的交互需求&#xff0c;我们将目光聚焦在按钮组组件的实现上…...

SQL注入

sql注入核心语句 information_schema 虚拟数据库(物理上不存在)&#xff0c;能提供方皓文数据库元数据的方式&#xff0c;元数据是关于数据的数据&#xff0c;如数据库名、表名、列的数据类型、访问权限等 只能访问 information_schema下面的表&#xff1a; schemata表&#xf…...

Java面试高阶篇:Spring Boot+Quarkus+Redis高并发架构设计与性能优化实战

Java面试高阶篇&#xff1a;Spring BootQuarkusRedis高并发架构设计与性能优化实战 面试官&#xff08;严肃&#xff09;&#xff1a; Q1: 你项目中如何实现高并发下的缓存优化&#xff1f; 候选人&#xff08;水货&#xff09;&#xff1a; 我们用了Redis做缓存&#xff0c;…...

【CF】Day57——Codeforces Round 955 (Div. 2, with prizes from NEAR!) BCD

B. Collatz Conjecture 题目&#xff1a; 思路&#xff1a; 简单模拟 很简单的模拟&#xff0c;我们只需要快速的找到下一个离 x 最近的 y 的倍数即可&#xff08;要大于 x&#xff09; 这里我们可以这样写 add y - (x % y)&#xff0c;这样就知道如果 x 要变成 y 的倍数还要…...

Matlab 列车纵向滑模二阶自抗扰算法和PID对比

1、内容简介 Matlab 223-列车纵向滑模二阶自抗扰算法和PID对比 可以交流、咨询、答疑 2、内容说明 略 列车模型 在运行过程中&#xff0c;已知列车受到牵引力或者制动力&#xff0c;基本阻力和附加阻力的作用&#xff0c;规定与列车运行方向相同的力为正&#xff0c;与运行…...

Swift实战:如何优雅地从二叉搜索树中挑出最接近的K个值

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结未来展望 摘要 在日常开发中&#xff0c;我们经常会遇到“在一堆数据中找出最接近某个值”的需求。尤其在搜索引擎、推荐系统或者地理坐标匹配中&#xff0c;这种“最近匹配”的问题非常常见。Le…...