【Ollama模型部署黄金法则】:20年SRE亲授5步极简安装+3大避坑指南,新手10分钟上线本地大模型
2026/7/16 15:51:13
# PCA 示例代码:使用 scikit-learn 对 Iris 数据集降维 from sklearn.decomposition import PCA from sklearn.datasets import load_iris # 加载数据 data = load_iris() X = data.data # 特征 (4维) # 初始化 PCA,降至2维 pca = PCA(n_components=2) X_reduced = pca.fit_transform(X) # 输出主成分解释的方差比例 print("方差解释比例:", pca.explained_variance_ratio_) # 结果显示前两个主成分共解释了约95%的方差| 方法 | 类型 | 优点 | 局限 |
|---|---|---|---|
| PCA | 线性 | 计算高效,易于解释 | 无法捕捉非线性结构 |
| t-SNE | 非线性 | 擅长可视化聚类结构 | 计算开销大,难泛化 |
| UMAP | 非线性 | 速度快,保持全局与局部结构 | 参数敏感 |
import numpy as np C = np.cov(X.T) # 计算协方差矩阵 eigenvals, eigenvecs = np.linalg.eigh(C) # 特征分解 sorted_indices = np.argsort(eigenvals)[::-1] eigenvecs = eigenvecs[:, sorted_indices] # 按方差降序排列上述代码首先计算数据的协方差矩阵,然后进行特征分解,并按特征值大小对主成分排序,确保前几个成分保留最多信息。| 特征向量 | 特征值 | 解释力 |
|---|---|---|
| [0.7, 0.7] | 4.5 | 主要变化方向 |
| [-0.7, 0.7] | 0.5 | 次要变化方向 |
import numpy as np # 计算协方差矩阵 cov_matrix = np.cov(data.T) # 特征值分解 eigen_vals, eigen_vecs = np.linalg.eig(cov_matrix)上述代码首先转置数据以适配 np.cov 输入要求,计算协方差矩阵后,利用 linalg.eig 进行分解,获得主成分方向与方差贡献度。import numpy as np from sklearn.decomposition import PCA pca = PCA() pca.fit(data) cumulative_variance_ratio = np.cumsum(pca.explained_variance_ratio_) # 输出前n个主成分的累计贡献率 for n, ratio in enumerate(cumulative_variance_ratio, 1): if ratio >= 0.9: # 达到90% print(f"前{n}个主成分累计方差贡献率为: {ratio:.2f}") break代码中pca.explained_variance_ratio_表示每个主成分解释的方差比例,np.cumsum计算累计值,用于判断保留多少维仍能保留主要信息。prcomp和princomp是两个常用函数,尽管功能相似,但在实现机制和默认参数上存在差异。na.action参数处理。scale.参数控制是否标准化;princomp使用cor参数决定是否基于相关系数矩阵。# 使用iris数据集进行PCA对比 pca_comp <- prcomp(iris[,1:4], scale. = TRUE) pca_incomp <- princomp(iris[,1:4], cor = TRUE)上述代码中,prcomp通过scale. = TRUE对变量标准化,避免量纲影响;princomp设置cor = TRUE表示基于相关矩阵进行分析。两者结果相近,但prcomp更推荐用于现代数据分析。from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler import numpy as np # 构造含不同量纲的样本数据 X = np.array([[100, 0.1], [200, 0.2], [300, 0.3], [400, 0.4]]) # 未标准化直接PCA pca = PCA(n_components=1) X_pca_raw = pca.fit_transform(X) print("原始数据PCA主成分贡献率:", pca.explained_variance_ratio_) # 标准化后PCA scaler = StandardScaler() X_scaled = scaler.fit_transform(X) X_pca_scaled = pca.fit_transform(X_scaled) print("标准化后PCA主成分贡献率:", pca.explained_variance_ratio_)上述代码中,原始数据因第一列数值远大于第二列,导致其主导主成分。经StandardScaler处理后,各特征被赋予相同权重,PCA能真实反映数据结构。| 处理方式 | 第一主成分解释方差比例 |
|---|---|
| 无预处理 | 99.9%+ |
| 标准化后 | ≈85% |
ggplot2,可将PCA结果绘制成美观且信息丰富的散点图。library(ggplot2) pca <- prcomp(iris[,1:4], scale. = TRUE) scores <- as.data.frame(pca$x) scores$Species <- iris$Species ggplot(scores, aes(x = PC1, y = PC2, color = Species)) + geom_point(size = 3) + labs(title = "PCA Score Plot", x = "PC1", y = "PC2")上述代码首先执行标准化主成分分析,提取前两个主成分得分并绑定原始分类变量。绘图时以PC1和PC2为坐标轴,不同物种用颜色区分。参数scale. = TRUE确保变量量纲一致,geom_point控制点的大小便于观察聚类趋势。biplot(pca_result, scale = 0, cex = c(0.7, 0.9))该代码生成标准化的双标图,scale = 0表示保留原始变量量纲,cex控制标签字体大小。向量长度代表变量方差解释力,夹角反映相关性。factoextra是专为多元统计分析设计的R包,能够以极简代码生成美观的ggplot2风格图形。通过封装复杂的绘图逻辑,它让用户专注于结果解读而非图形细节。library(factoextra) res.pca <- prcomp(iris[, -5], scale = TRUE) fviz_pca_ind(res.pca, col.ind = iris$Species, palette = "jco", addEllipses = TRUE, ellipse.type = "convex")上述代码绘制了主成分分析(PCA)的样本点图。col.ind指定按物种着色,palette应用期刊级配色方案,addEllipses与ellipse.type结合可添加凸包轮廓,增强组间区分效果。factoextra提供一致的函数命名模式:fviz_pca_*用于PCA,fviz_mca_*用于对应分析,降低学习成本,提升代码可读性。from sklearn.decomposition import PCA import numpy as np # 假设 data 为 n_samples × n_genes 的表达矩阵 pca = PCA(n_components=2) # 降至二维便于可视化 reduced_data = pca.fit_transform(data) print("解释方差比:", pca.explained_variance_ratio_)该代码将基因表达数据投影至两个主成分。参数n_components控制目标维度,explained_variance_ratio_显示各主成分对原始数据方差的贡献度,帮助评估信息保留程度。import numpy as np from sklearn.decomposition import PCA # 假设 returns 是资产收益率矩阵(n_days × n_assets) pca = PCA(n_components=3) factors = pca.fit_transform(returns) explained_ratio = pca.explained_variance_ratio_该代码段利用 PCA 提取三个主要风险因子。`n_components=3` 表示保留前三个主成分,`explained_variance_ratio_` 显示各因子解释的方差比例,通常前三个因子可解释超过70%的市场波动。# 计算PSNR与SSIM from skimage.metrics import peak_signal_noise_ratio, structural_similarity psnr = peak_signal_noise_ratio(original, compressed) ssim = structural_similarity(original, compressed, channel_axis=2)上述代码使用skimage.metrics库计算图像质量指标,channel_axis=2指定彩色图像的通道维度,确保多通道数据被正确处理。from sklearn.linear_model import Ridge import numpy as np # 示例数据 X = np.random.rand(100, 5) y = X @ np.array([1.0, -2.0, 3.0, -1.0, 0.5]) + np.random.normal(0, 0.1, 100) # 岭回归模型 model = Ridge(alpha=1.0) model.fit(X, y) print("系数:", model.coef_)代码中alpha=1.0控制正则化强度,值越大对共线性抑制越强,但可能引入偏差。通过交叉验证选择最优 alpha 可平衡偏差与方差。在高维数据中,线性方法如PCA常因假设数据分布为线性而失效。t-SNE和UMAP等非线性降维技术能有效捕捉局部结构。例如,在单细胞RNA测序数据分析中,UMAP成功将数万个基因表达向量映射到二维空间,揭示出不同细胞类型的聚类。
# 使用UMAP进行降维 import umap reducer = umap.UMAP(n_components=2, random_state=42) embedding = reducer.fit_transform(high_dim_data)自编码器通过神经网络学习数据的低维表示。以下是一个简单的全连接自编码器结构,适用于图像数据压缩:
| 方法 | 时间复杂度 | 适用场景 |
|---|---|---|
| PCA | O(n³) | 线性结构、快速预处理 |
| t-SNE | O(n²) | 可视化、小规模数据 |
| UMAP | O(n log n) | 大规模、保留全局结构 |
随着图神经网络的发展,Node2Vec等图嵌入方法将拓扑结构融入降维过程。在社交网络分析中,节点被映射至低维空间后可用于社区检测或链接预测。结合注意力机制,模型可自动识别关键邻居节点,提升嵌入质量。
数据输入 → 图构建 → 随机游走采样 → Skip-gram训练 → 节点嵌入输出