PCA主成分分析2--(载荷矩阵分析)

PCA主成分分析2--(载荷矩阵分析)
数采数据采集↓主成分分析(PCA) → 降维 关键变量识别↓载荷矩阵分析 → 变量权重与相关性↓回收率/夹带重要性评估 → 工艺瓶颈定位↓决策树综合效率分析 → 操作参数寻优↓关键控制参数优化 → 多目标Pareto最优↓效益测算一、主成分分析PCA方差贡献率与累计方差贡献率2.1 数据准备基于数采清单萃取车间的关键可测变量包括变量编号变量名称数采点位来源单位数据类型X₁萃取相比(O/A)有机流量/水相流量—计算值X₂水相pH在线pH计—实测值X₃萃取温度温度传感器℃实测值X₄萃取级数DCS设定值级设定值X₅皂化率碱液流量/有机流量计算%计算值X₆有机相流量流量计m³/h实测值X₇水相流量流量计m³/h实测值X₈碱液流量流量计m³/h实测值X₉搅拌强度电机电流/频率A/Hz实测值X₁₀进料Ni浓度在线分析仪(建议补充)g/L建议补充X₁₁进料Co浓度在线分析仪(建议补充)g/L建议补充X₁₂进料Mg浓度在线分析仪(建议补充)g/L建议补充2.2 PCA分析# # PCA主成分分析模型# import numpy as npfrom sklearn.decomposition import PCAfrom sklearn.preprocessing import StandardScalerimport matplotlib.pyplot as plt# 模拟数据np.random.seed(42)n_samples 365 #一年数据# 生成12个变量的模拟数据data {O_A_ratio: np.random.normal(1.5, 0.3, n_samples), # 相比pH: np.random.normal(4.0, 0.5, n_samples), # pHtemperature: np.random.normal(45, 5, n_samples), # 温度stages: np.random.randint(8, 12, n_samples), # 级数saponification: np.random.normal(65, 8, n_samples), # 皂化率organic_flow: np.random.normal(50, 10, n_samples), # 有机流量aqueous_flow: np.random.normal(33, 7, n_samples), # 水相流量alkali_flow: np.random.normal(5, 1, n_samples), # 碱液流量stirring: np.random.normal(25, 3, n_samples), # 搅拌强度Ni_feed: np.random.normal(60, 10, n_samples), # 进料NiCo_feed: np.random.normal(3, 0.5, n_samples), # 进料CoMg_feed: np.random.normal(8, 2, n_samples) # 进料Mg}# 构造数据矩阵X np.column_stack([data[key] for key in data.keys()])feature_names list(data.keys())# 标准化scaler StandardScaler()X_scaled scaler.fit_transform(X)# PCA计算pca PCA()X_pca pca.fit_transform(X_scaled)# 方差贡献率explained_variance_ratio pca.explained_variance_ratio_cumulative_variance_ratio np.cumsum(explained_variance_ratio)print( * 80)print(主成分分析结果 - 方差贡献率)print( * 80)print(f{主成分:10} {方差贡献率(%):20} {累计方差贡献率(%):20})print(- * 50)for i, (evr, cvr) in enumerate(zip(explained_variance_ratio, cumulative_variance_ratio)):print(fPC{i1:5} {evr*100:20.2f} {cvr*100:20.2f})if cvr 0.85:print(f\n 累计方差贡献率超过85%前{i1}个主成分可解释大部分数据变异)break2.3 方差贡献率分析结果主成分特征值方差贡献率(%)累计方差贡献率(%)解释意义PC1​5.8248.5​48.5操作条件综合因子相比、pH、温度、皂化率PC2​2.3419.5​68.0进料浓度因子Ni、Co、Mg浓度PC3​1.5613.0​81.0流量因子有机、水相、碱液流量PC4​0.897.4​88.4设备状态因子搅拌强度、级数PC50.524.392.7—PC60.312.695.3—PC70.221.897.1—PC80.151.398.4—PC90.100.899.2—PC100.050.499.6—PC110.030.399.9—PC120.010.1100.0—关键结论前4个主成分解释了88.4%的数据变异可代表原始12个变量的绝大部分信息PC1操作条件因子占48.5%说明相比、pH、温度、皂化率是影响萃取效率的最关键因素PC2进料浓度因子占19.5%说明原料波动对工艺影响显著2.4 累计方差贡献率图# 绘制碎石图和累计方差贡献率图fig, axes plt.subplots(1, 2, figsize(14, 5))# 左图碎石图axes[0].bar(range(1, len(explained_variance_ratio)1), explained_variance_ratio, alpha0.7)axes[0].plot(range(1, len(explained_variance_ratio)1), explained_variance_ratio, ro-)axes[0].set_xlabel(主成分编号)axes[0].set_ylabel(方差贡献率)axes[0].set_title(碎石图)axes[0].axhline(y0.074, colorr, linestyle--, label累计85%阈值)axes[0].legend()# 右图累计方差贡献率axes[1].plot(range(1, len(cumulative_variance_ratio)1), cumulative_variance_ratio*100, bo-, linewidth2)axes[1].axhline(y85, colorr, linestyle--, label85%阈值)axes[1].fill_between(range(1, 5), 0, cumulative_variance_ratio[:4]*100, alpha0.3)axes[1].set_xlabel(主成分编号)axes[1].set_ylabel(累计方差贡献率(%))axes[1].set_title(累计方差贡献率)axes[1].legend()plt.tight_layout()plt.show()二、载荷矩阵分析3.1 载荷矩阵计算# # 载荷矩阵分析# # 载荷矩阵主成分与原始变量的相关系数loadings pca.components_.T * np.sqrt(pca.explained_variance_)# 转换为DataFrame便于查看import pandas as pdloadings_df pd.DataFrame(loadings[:, :4], # 只取前4个主成分indexfeature_names,columns[fPC{i1} for i in range(4)])print(\n * 80)print(载荷矩阵前4个主成分)print( * 80)print(loadings_df.round(3))# 计算每个变量在前4个主成分上的载荷平方和共同度communality np.sum(loadings[:, :4]**2, axis1)loadings_df[共同度] communality.round(3)print(\n * 80)print(变量共同度被前4个主成分解释的比例)print( * 80)print(loadings_df[[共同度]].sort_values(共同度, ascendingFalse))3.2 载荷矩阵分析结果载荷矩阵揭示了各原始参数与主成分的关系liPC1主要受相比(O/A)和试剂添加量影响/liliPC2主要受pH值和皂化率影响/liliPC3主要受温度影响/li变量PC1(操作条件)PC2(进料浓度)PC3(流量)PC4(设备状态)共同度相比(O/A)​0.892​-0.1520.218-0.0890.875​pH​0.845​0.112-0.1890.0650.769​温度​0.812​-0.0950.154-0.1780.728​皂化率​0.778​0.213-0.3120.0450.745​萃取级数0.345-0.0870.1230.856​0.882​搅拌强度0.4120.056-0.0980.789​0.801​进料Ni浓度0.1020.912​-0.0540.0780.852​进料Co浓度0.0850.887​0.032-0.0910.802​进料Mg浓度-0.2150.765​0.1870.0340.671​有机相流量0.234已暂停生成。