新闻详情

新闻详情

首页 / 资讯中心 / 详情

连续投影算法(SPA)原理与Python实现:光谱特征选择实战指南

发布时间:2026/9/4 23:23:46来源:尧图网络
连续投影算法(SPA)原理与Python实现:光谱特征选择实战指南
简介本资源是一套面向光谱分析初学者与科研人员的连续投影算法SPA实践工具包聚焦高维光谱数据的特征波长筛选与降维需求特别适用于食品安全检测、环境监测及生物医学等领域的建模前处理环节。压缩包共11个文件含5个MATLAB核心脚本如spa.m主算法、validation.m性能验证、projections_qr.m正交投影实现、2个编译型GUI程序gui_spa.p用于交互式演示、1个说明文档instructions.doc、1个学习报告PPT含原理图解与案例分析、1个图形文件spa2.fig及1个MATLAB数据文件matlab.mat整体仅1.8MB轻量易部署。已有853人学习下载资源结构完整既提供可直接运行的算法实现与可视化界面又配备原理性读书报告和验证评估模块便于读者从代码调试、结果解读到性能量化全流程掌握SPA与PCA协同建模的关键技术路径。1. 从“大海捞针”到“精准定位”连续投影算法在光谱分析中的价值如果你处理过光谱数据尤其是近红外、拉曼或者高光谱图像这类动辄成百上千个波长的数据那你一定对“维度灾难”这个词深有体会。面对一个样本就有上千个特征波长点的数据集直接扔进模型里不仅计算量大得吓人模型还容易“学歪”——那些冗余的、共线性的、甚至包含大量噪声的波长变量会严重干扰模型的稳定性和预测精度。这就好比你要在一座巨大的图书馆里找一本特定的书如果毫无头绪地瞎翻效率极低。而连续投影算法就是那个能帮你快速锁定最相关书架区域的智能导航系统。它不是简单地粗暴删减而是通过一套巧妙的数学投影操作从海量的光谱波长中筛选出信息量最大、彼此间冗余度最低的一个特征子集。我最初接触SPA是在做农产品品质的近红外快速检测项目时当时模型总是过拟合预测新样本的效果时好时坏。在尝试了各种滤波和标准化方法效果不佳后引入了SPA进行波长筛选模型的复杂度显著降低预测稳健性却大幅提升这让我彻底理解了“特征工程”在光谱建模中的核心地位。2. SPA的核心原理如何在光谱的海洋中“投影”出关键信息理解SPA关键在于弄懂“投影”这个操作。我们可以把整个光谱看作一个高维空间每个波长点就是这个空间里的一个坐标轴。我们的目标是找到少数几个轴波长使得它们所张成的子空间能够最大程度地“解释”原始光谱数据中的有效信息。2.1 算法流程的逐步拆解SPA是一种前向循环的变量选择方法。它的核心思想是在未选入的波长变量中每次选择一个与已选变量集合正交性最强即冗余信息最少的新变量。以下是其标准步骤我会结合一个近红外光谱预测水分含量的例子来说明初始化首先我们需要一个启动波长。通常SPA会遍历所有波长点将每个波长点作为初始变量分别构建一元线性回归模型比如只用这一个波长点来预测水分含量选择那个预测误差最小的波长作为第一个被选入的变量记作 $x_{k(0)}$。这一步确保了算法从一个“信息量”较大的点开始。在我的项目中这个点往往位于水分特征吸收峰附近比如1450nm或1940nm附近。投影与选择循环这是SPA最核心的迭代过程。假设我们已经选择了一个变量集合 $S {x_{k(0)}, x_{k(1)}, ..., x_{k(n-1)}}$。投影操作将所有未被选入的波长变量向当前已选变量集合 $S$ 所张成的子空间进行投影。这个投影操作本质上就是计算每个未选变量与已选变量集合之间的“相似度”或“相关性”。数学上是通过计算残差向量来实现的$Px_j x_j - X_S(X_S^T X_S)^{-1}X_S^T x_j$其中 $x_j$ 是某个未选变量$X_S$ 是由已选变量构成的矩阵。得到的 $Px_j$ 就是 $x_j$ 中无法被已选变量 $S$ 解释的那部分信息即正交分量。选择标准计算所有未选变量投影后的向量 $Px_j$ 的范数通常是2-范数即向量的长度。这个范数越大说明该变量 $x_j$ 中蕴含的、独立于已选变量集合的新信息越多与已选变量的冗余度越低。纳入新变量选择拥有最大投影向量范数的那个波长变量将其纳入已选集合 $S$ 中作为 $x_{k(n)}$。循环终止重复步骤2直到选出的变量数量达到预设的 $N$ 个。这个 $N$ 是一个超参数需要后续通过验证来确定最优值。注意这里有一个非常关键的细节。SPA的每一次迭代都是基于当前已选变量集合进行投影。这意味着第n次选择时它是在寻找与“前n-1个已选变量”整体冗余度最低的新变量而不是简单地与上一个变量不相关。这保证了最终选出的变量子集内部具有最小的共线性。2.2 与其他波长选择方法的直观对比为了更清晰地理解SPA的特点我们把它和另外两种常见方法放在一起看方法核心思想优点缺点适用场景连续投影算法 (SPA)前向选择最小化信息冗余。通过投影运算每次选择与已选变量最不相关信息重叠最少的新变量。1.有效消除共线性所选变量集冗余度低。2. 运算效率较高。3. 物理意义相对明确选出的波长常对应特征吸收峰。1.结果依赖于初始波长虽然有一元回归初始化但仍可能陷入局部最优。2. 需要预先设定或寻找最佳变量数N。光谱定量分析如PLS SVM回归、需要模型解释性的场景。竞争性自适应重加权采样 (CARS)模仿“适者生存”。利用蒙特卡洛采样和指数衰减函数动态地保留回归系数大的波长淘汰系数小的波长。1.全局搜索能力强不易陷入局部最优。2. 能自适应地确定关键变量子集。1. 计算量相对较大。2. 过程具有随机性可能需要多次运行取平均。3. 物理意义有时不如SPA直观。复杂体系的光谱分析、变量间交互作用强的场景。无信息变量消除 (UVE)基于稳定性选择。通过加入随机噪声变量作为参照剔除那些重要性不如随机噪声的原始波长变量。1. 有一个清晰的、基于统计的剔除阈值。2. 能有效去除大量无信息变量。1. 阈值确定有一定主观性。2. 可能过于激进误删一些弱相关但有用的变量。3. 计算成本高。光谱数据信噪比较低、存在大量无关变量的初筛。简单来说如果你希望得到的波长子集物理意义清晰、变量间相互独立性高并且计算速度要快SPA是一个非常不错的选择。它像是一位严谨的架构师精心挑选每一块承重墙确保整体结构既稳固又无冗余。3. 实战使用Python从头实现并验证SPA理论说得再多不如亲手跑一遍代码来得实在。下面我将结合一个公开的近红外光谱数据集例如用于预测玉米样品水分、油分、蛋白质含量的corn数据集演示如何用Python和scikit-learn实现SPA并集成到PLS建模流程中。3.1 数据准备与预处理首先我们加载数据并进行必要的预处理。光谱预处理是建模前的关键一步旨在消除物理散射、基线漂移等干扰。import numpy as np import pandas as pd from scipy.signal import savgol_filter from sklearn.cross_decomposition import PLSRegression from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import mean_squared_error, r2_score import matplotlib.pyplot as plt # 假设我们已经加载了光谱矩阵 X (样本数 x 波长数) 和性质矩阵 y (样本数 x 1) # X, y load_your_spectra_data() # 这里使用模拟数据示意 np.random.seed(42) n_samples, n_wavelengths 100, 700 X np.random.randn(n_samples, n_wavelengths) * 0.1 # 基础信号 # 模拟三个特征吸收峰 X[:, 150:160] np.random.randn(n_samples, 10) * 0.5 1.0 # 峰1 X[:, 320:335] np.random.randn(n_samples, 15) * 0.5 0.8 # 峰2 X[:, 500:515] np.random.randn(n_samples, 15) * 0.5 1.2 # 峰3 y 10 X[:, 155]*5 X[:, 330]*3 - X[:, 510]*4 np.random.randn(n_samples)*0.5 # 模拟目标性质 # 1. 标准正态变换 (SNV) - 消除散射影响 def snv(input_data): 对每行光谱进行标准正态变换。 output_data np.zeros_like(input_data) for i in range(input_data.shape[0]): spectrum input_data[i, :] output_data[i, :] (spectrum - np.mean(spectrum)) / np.std(spectrum) return output_data X_snv snv(X) # 2. Savitzky-Golay平滑滤波 (一阶导消除基线) X_sg savgol_filter(X_snv, window_length11, polyorder2, deriv1) # 划分训练集和测试集 (7:3) X_train, X_test, y_train, y_test train_test_split(X_sg, y, test_size0.3, random_state42) wavelengths np.arange(n_wavelengths) # 波长轴假设单位是nm3.2 SPA算法的Python实现接下来是SPA的核心实现。我们将它封装成一个类方便调用。class SPA: 连续投影算法 (Successive Projections Algorithm) 实现。 用于从高维数据如光谱中选择特征变量子集。 def __init__(self, max_vars20): 初始化。 :param max_vars: 最大选择的变量数。 self.max_vars max_vars self.selected_vars_ None # 存储最终选出的变量索引 self.projection_residuals_ None # 存储投影残差可选用于诊断 def fit(self, X, y): 在训练数据上运行SPA算法。 :param X: 训练数据形状 (n_samples, n_features) :param y: 目标值形状 (n_samples,) :return: self n_samples, n_vars X.shape # 步骤1: 初始化通过一元线性回归找到第一个变量 error np.zeros(n_vars) for j in range(n_vars): # 简单的一元回归计算均方误差 coef np.cov(X[:, j], y)[0, 1] / np.var(X[:, j]) pred X[:, j] * coef error[j] np.mean((y - pred) ** 2) first_var np.argmin(error) # 误差最小的波长索引 selected [first_var] unselected [i for i in range(n_vars) if i not in selected] # 初始化投影矩阵和残差 X_selected X[:, selected].reshape(-1, 1) # 当前已选变量矩阵 residuals np.zeros((n_vars, self.max_vars)) # 步骤2: 前向循环选择 for var_idx in range(1, self.max_vars): # 计算未选变量到已选变量空间的投影残差 proj_residual np.zeros(len(unselected)) for i, u_idx in enumerate(unselected): x_u X[:, u_idx] # 投影计算: x_u - X_selected * (X_selected^T * X_selected)^-1 * X_selected^T * x_u # 使用最小二乘法求解投影系数 if X_selected.shape[1] 0: # 计算投影到已选空间的分量 coefs np.linalg.lstsq(X_selected, x_u, rcondNone)[0] projection X_selected coefs residual x_u - projection else: residual x_u proj_residual[i] np.linalg.norm(residual, 2) # 计算残差的2-范数 residuals[u_idx, var_idx-1] proj_residual[i] # 记录可选 # 选择投影残差范数最大的变量 chosen_rel_idx np.argmax(proj_residual) chosen_var unselected[chosen_rel_idx] selected.append(chosen_var) unselected.remove(chosen_var) # 更新已选变量矩阵 X_selected X[:, selected] self.selected_vars_ np.array(selected) self.projection_residuals_ residuals return self def transform(self, X): 根据选出的变量转换数据。 :param X: 原始数据 :return: 筛选变量后的数据 if self.selected_vars_ is None: raise ValueError(SPA must be fitted before transform!) return X[:, self.selected_vars_]3.3 确定最佳变量数N交叉验证是关键SPA需要指定选择的变量数量N。N太小信息可能不足N太大又会引入冗余。最佳N需要通过验证来确定。通常使用交叉验证观察不同N下模型的预测性能如均方根误差RMSE。# 尝试不同的N值通过交叉验证评估 n_var_range range(5, 51, 5) # 从5到50步长5 cv_scores_rmse [] for n_vars in n_var_range: spa SPA(max_varsn_vars) spa.fit(X_train, y_train) X_train_spa spa.transform(X_train) # 使用偏最小二乘回归 (PLS) 建模 PLS是光谱定量分析最常用的模型之一 pls PLSRegression(n_componentsmin(10, n_vars)) # PLS主成分数不超过变量数 # 5折交叉验证计算负均方误差取正值得到RMSE的近似 scores -cross_val_score(pls, X_train_spa, y_train, cv5, scoringneg_mean_squared_error) cv_rmse np.mean(np.sqrt(scores)) cv_scores_rmse.append(cv_rmse) print(fN_vars{n_vars:2d}, CV_RMSE{cv_rmse:.4f}) # 绘制RMSE随N变化的曲线 plt.figure(figsize(10, 6)) plt.plot(n_var_range, cv_scores_rmse, bo-, linewidth2, markersize8) plt.xlabel(Number of Variables Selected by SPA) plt.ylabel(Cross-Validated RMSE) plt.title(Determining Optimal Number of Variables) plt.grid(True, linestyle--, alpha0.7) plt.show() # 找到使RMSE最小的N通常也会看拐点 optimal_n_vars n_var_range[np.argmin(cv_scores_rmse)] print(f\n根据交叉验证最优的变量数量为: {optimal_n_vars})在实际操作中曲线通常会先快速下降然后趋于平缓甚至略有上升。最优N往往位于曲线拐点即下降趋势明显变缓处附近这平衡了模型精度和复杂度。3.4 使用最优N构建最终模型并评估确定optimal_n_vars后我们用全部训练数据重新运行SPA并在测试集上评估最终模型。# 使用最优变量数重新训练SPA和PLS final_spa SPA(max_varsoptimal_n_vars) final_spa.fit(X_train, y_train) X_train_final final_spa.transform(X_train) X_test_final final_spa.transform(X_test) # 训练最终PLS模型 final_pls PLSRegression(n_componentsmin(10, optimal_n_vars)) final_pls.fit(X_train_final, y_train) # 预测 y_train_pred final_pls.predict(X_train_final).ravel() y_test_pred final_pls.predict(X_test_final).ravel() # 评估指标 train_rmse np.sqrt(mean_squared_error(y_train, y_train_pred)) test_rmse np.sqrt(mean_squared_error(y_test, y_test_pred)) train_r2 r2_score(y_train, y_train_pred) test_r2 r2_score(y_test, y_test_pred) print(*50) print(最终模型性能评估) print(*50) print(f训练集 RMSE: {train_rmse:.4f}, R²: {train_r2:.4f}) print(f测试集 RMSE: {test_rmse:.4f}, R²: {test_r2:.4f}) print(f选中的波长索引: {final_spa.selected_vars_}) print(f选中的波长位置 (nm): {wavelengths[final_spa.selected_vars_]})3.5 结果可视化看看SPA选出了哪些波长可视化能直观展示SPA的选择结果通常选中的波长会落在光谱的特征吸收区域附近。# 绘制原始平均光谱和SPA选中的波长位置 mean_spectrum np.mean(X_train, axis0) plt.figure(figsize(14, 6)) plt.subplot(1, 2, 1) plt.plot(wavelengths, mean_spectrum, k-, linewidth1, labelMean Spectrum (Train)) plt.scatter(wavelengths[final_spa.selected_vars_], mean_spectrum[final_spa.selected_vars_], cred, s80, zorder5, labelfSPA Selected ({optimal_n_vars} vars)) plt.xlabel(Wavelength (nm)) plt.ylabel(Absorbance (SNVSG Deriv.)) plt.title(Original Spectrum with SPA-Selected Wavelengths) plt.legend() plt.grid(True, linestyle--, alpha0.5) # 绘制预测值与真实值散点图 plt.subplot(1, 2, 2) plt.scatter(y_train, y_train_pred, alpha0.6, labelTrain, edgecolorsk) plt.scatter(y_test, y_test_pred, alpha0.6, labelTest, edgecolorsk) min_val min(y_train.min(), y_test.min(), y_train_pred.min(), y_test_pred.min()) max_val max(y_train.max(), y_test.max(), y_train_pred.max(), y_test_pred.max()) plt.plot([min_val, max_val], [min_val, max_val], r--, linewidth2, labelIdeal Fit) plt.xlabel(Measured Value) plt.ylabel(Predicted Value) plt.title(fPLS Model Performance (SPA Selected)\nTest R²{test_r2:.3f}, RMSE{test_rmse:.3f}) plt.legend() plt.grid(True, linestyle--, alpha0.5) plt.tight_layout() plt.show()通过左图你可以清晰地看到红点标记的波长在光谱曲线上的分布。如果这些点恰好落在了你已知的化学键特征吸收峰区域那就从物理意义上验证了SPA选择的有效性。右图的预测散点图则量化了模型的性能。4. 避坑指南SPA应用中的常见问题与优化策略尽管SPA原理清晰效果显著但在实际项目中直接套用依然会遇到几个典型的“坑”。根据我的经验处理好以下三点能让你事半功倍。4.1 初始波长选择的敏感性及其对策SPA的第一步是选择一个初始波长虽然算法通过一元回归误差最小化来寻找但这个选择依然会影响后续变量的选择路径可能使结果陷入局部最优。一个波长启动选出的最终集合可能只是众多“较优解”中的一个而非“全局最优解”。应对策略多次随机初始化与集成不要只运行一次SPA。可以采用以下两种策略随机初始化多次运行不再固定使用一元回归误差最小的那个波长作为起点而是随机选择多个不同的初始波长分别运行SPA。然后统计所有运行结果中各个波长被选中的频率。最终选择那些被高频选中的波长作为更稳健的特征子集。与全局搜索算法结合将SPA作为CARS等算法的后续精炼步骤。先用CARS进行全局粗选得到一个包含较多变量的子集再在这个子集上运行SPA进一步剔除冗余。这样结合了CARS的全局性和SPA的去冗余能力。4.2 最优变量数N的确定不仅仅是看最低RMSE在交叉验证确定N时单纯选择RMSE最小的点有时并非最佳。因为当N增加到一定程度后RMSE的下降会变得微乎其微进入平台期但模型复杂度变量数却一直在增加这会增加过拟合的风险降低模型的鲁棒性和可解释性。实操建议结合“拐点法”与业务知识绘制RMSE随N变化的曲线如上文所示。找到曲线的“肘点”elbow point即RMSE下降速度发生明显变化的点。选择肘点对应的N这是在精度和简洁性之间一个很好的平衡。考虑物理意义查看选出的波长是否落在已知的、与待测指标相关的特征吸收峰附近。如果某个N选出的波长包含了核心特征峰而N1选出的新波长物理意义不明那么选择N可能是更明智的。稳定性检查在训练集的不同子集上运行SPA观察选出的波长集合是否稳定。如果变化很大说明结果对数据敏感此时选择的N可能偏大或模型本身不稳定。4.3 光谱预处理对SPA结果的深刻影响这是最容易忽视的一点。SPA是在你提供的光谱数据矩阵上工作的。你喂给它的数据是什么样它选出的波长就是基于这个“样子”的。不同的预处理方法会彻底改变光谱的形态和变量间的相关关系。如果用了导数处理如SG一阶导、二阶导这会放大光谱的局部变化突出峰和谷的信息。SPA可能会更倾向于选择那些导数变化剧烈的波长点这些点往往对应原始光谱的拐点与物质浓度有密切关系。如果用了标准化如SNV、MSC这主要消除的是由于散射、光程等引起的乘性效应使光谱更反映化学信息。经过标准化后SPA选出的波长更可能指向纯粹的吸收特征。如果未做任何处理光谱中的基线漂移和噪声会占主导。SPA可能会错误地将一些由基线漂移造成的“假峰”或噪声点选入导致模型物理意义丧失预测新样本时性能骤降。核心建议将预处理作为SPA流程的固定前置环节在对比不同波长选择方法或优化模型时必须将“预处理方法”和“波长选择方法”绑定在一起作为整体流程进行交叉验证。你不能先固定一种预处理选出波长再换另一种预处理来建模。正确的流程是原始光谱 - (预处理方法A) - (SPA) - 建模 - 评估。要比较不同方案就完整地运行多个这样的流程链。5. 超越基础SPA在高光谱图像与多任务学习中的进阶应用SPA的价值不仅限于一维光谱的定量分析。在更复杂的场景下经过变通它依然能发挥强大作用。5.1 应用于高光谱图像数据从像素到特征波段高光谱图像每个像素都有一条连续光谱数据量巨大空间x光谱维度。直接处理所有波段进行分类或反演计算负荷难以承受。此时SPA可以用于进行“特征波段选择”。操作思路数据重整将高光谱图像数据立方体(height, width, bands)重塑为二维矩阵(height*width, bands)即把每个像素视为一个样本。样本采样由于像素数量巨大可以随机选取一部分有代表性的像素如涵盖所有地物类别作为训练样本。运行SPA在这部分像素样本的光谱数据上运行SPA筛选出N个特征波段。应用与重建使用这N个波段的索引对原始高光谱图像的所有波段进行筛选得到降维后的新数据立方体(height, width, N)。后续的分类、分割等任务都在这个降维后的数据上进行效率极大提升。这种方法选出的波段是从整个场景的光谱统计特征中挖掘的具有全局代表性比单纯基于光谱曲线形状选择更为客观。5.2 面向多输出任务的SPA扩展在有些应用中我们需要用同一套光谱预测多个指标如同时预测水果的糖度、酸度、硬度。传统的SPA是为单输出任务设计的。如何为多输出任务选择一套共用的、有效的波长子集一种可行的改进思路基于联合信息的SPA我们可以在SPA的变量评价标准上做文章。不再仅仅衡量一个新变量与已选变量集合的正交性投影残差范数而是同时衡量这个新变量对所有多个输出目标的联合解释能力。初始化计算每个波长变量与所有输出目标的多变量回归误差如PLS模型选择综合误差最小的波长。投影循环在每次选择新变量时计算其投影残差向量与已选变量正交的部分。然后评估这个残差向量与所有输出目标的相关性矩阵例如计算残差与每个目标变量的相关系数并取某种综合度量如平均绝对值或范数。选择那个投影残差与多目标联合相关性最强的变量。这样选出的波长子集是那些既能提供独立于已选变量的新信息又同时对多个预测目标都有贡献的变量实现了“一举多得”。当然这需要自定义SPA的评价函数实现起来更复杂但在多任务学习场景下非常有价值。从我自己的项目经验来看SPA更像是一个“思维框架”——通过投影来追求变量的独立性。理解了这个核心你就能根据实际数据的特性和业务需求对它进行灵活的调整和扩展而不仅仅是调用一个现成的工具包。当你的模型因为变量太多而显得臃肿不堪时试试SPA它很可能就是那把帮你精准“瘦身”的手术刀。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

冲压与旋压封头技术对比:成形过程与壁厚变化分析 2026/9/5 2:57:26

冲压与旋压封头技术对比:成形过程与壁厚变化分析

椭圆封头的冲压成形与旋压成形是两种本质不同的工艺方法,在成形机理、壁厚变化规律、受力性能等方面存在显著差异。本文从技术角度对两种工艺进行系统对比分析。 一、冲压成形的技术特征 冲压成形是利用模具和压力机,使金属板材在模腔内发生塑性变形&…

阅读更多 →
2026主流ETL工具推荐TOP10榜单,选ETL工具必看 2026/9/5 2:57:26

2026主流ETL工具推荐TOP10榜单,选ETL工具必看

当下,许多企业同时运营业务库、数仓、数据湖、SaaS等多类数据源,ETL工具选型直接影响数据底座建设成败。本榜单综合市场份额、产品成熟度、信创适配、实时能力、社区生态开放性五大维度,筛选出覆盖国产商业、开源社区、云原生三大阵营的10款代…

阅读更多 →
Clip Studio Paint深度解析:矢量笔迹与对象化设计如何重塑数字绘画工作流 2026/9/5 2:57:26

Clip Studio Paint深度解析:矢量笔迹与对象化设计如何重塑数字绘画工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
轻量级课堂行为感知系统:专注度与作弊检测实战 2026/9/5 2:57:26

轻量级课堂行为感知系统:专注度与作弊检测实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Transformer大模型实战:从原理到Hugging Face应用全解析 2026/9/5 2:57:26

Transformer大模型实战:从原理到Hugging Face应用全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
微三云实践:OPC 私域用户标签系统的设计与实现(附数据模型) 2026/9/5 2:54:26

微三云实践:OPC 私域用户标签系统的设计与实现(附数据模型)

微三云实践:OPC 私域用户标签系统的设计与实现(附数据模型)技术拆解。本文以一类 One Person Company(一人公司智能商业系统)的私域运营场景为例,拆解用户标签系统的设计与实现,供做电商系统、M…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞