数学建模社区-数学中国

标题: 偏最小二乘回归分析 [打印本页]

作者: 2744557306    时间: 2023-11-30 16:59
标题: 偏最小二乘回归分析
偏小二乘回归提供一种多对多线性回归建模的方法,特别当两组变量的个数很多,且都存在多重相关性,而观测数据的数量(样本量)又较少时,用偏小二乘回归建立的模型具有传统的经典回归分析等方法所没有的优点。* U( V' Q* C/ R6 |0 x
偏小二乘回归分析在建模过程中集中了主成分分析,典型相关分析和线性回归分析方法的特点,因此在分析结果中,除了可以提供一个更为合理的回归模型外,还可以同时完成一些类似于主成分分析和典型相关分析的研究内容,提供更丰富、深入的一些信息。
  1. import numpy as np
    2 C  U4 q" ?; O+ {# b6 o+ ^, K
  2. from sklearn.cross_decomposition import PLSRegression( G" f" U( p7 ?1 Y7 Q1 l
  3. from sklearn.preprocessing import StandardScaler
    1 V: y+ v2 r/ i6 q3 ]. o5 o
  4. import matplotlib.pyplot as plt+ I% u; t% w1 {& A' |8 i9 E6 c( W

  5. / B3 X/ |6 |* ^+ x
  6. # 原始数据,自变量X和因变量y
    6 y4 L; y- C# o% ]9 D0 A  ]. W. {
  7. X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    * T1 x9 X& R6 P* I  Q9 B
  8. y = np.array([1, 2, 3, 4])
    ) U% g! }3 d$ I8 M1 ?; l+ h/ ?

  9. 7 R" ?& h) s" a& f9 y% T% l9 F
  10. # 对自变量进行标准化处理# a6 a; I7 u3 e: X0 A
  11. scaler = StandardScaler()" D4 y4 S3 ?+ S  k+ @: O+ p4 J
  12. X_scaled = scaler.fit_transform(X)$ D9 ^6 i- g, ?; }
  13. ! i, A) q: D/ t6 k
  14. # 创建PLSRegression对象,并指定主成分个数为2
    - S6 @# I) Z1 o$ d: b5 @' I: N2 y) z
  15. pls = PLSRegression(n_components=2)8 N: b; J/ w( i. u4 o! y
  16. $ f3 u+ g& s5 H. T
  17. # 进行偏最小二乘回归分析
    4 i8 j& S2 x9 e' t6 r6 \/ X
  18. pls.fit(X_scaled, y)  s; ?/ O! d- C! P' J0 A3 D& L- P) U
  19. ' @5 ~) F2 y2 S; z
  20. # 获得预测值' q( F2 }; a9 Z5 F" K) m6 @
  21. y_pred = pls.predict(X_scaled)  [% j& h% W7 Q! V8 A5 {6 O

  22. ! h! _4 L1 O( i" [
  23. # 绘制原始数据和预测值
    ; @6 P% D6 U$ S7 u0 l
  24. plt.figure(figsize=(8, 6))& a8 m! [" C. c' o% b/ d+ l- d
  25. plt.scatter(y, y_pred, c='b', label='Predicted vs. Observed')+ s2 |4 V! \+ n! J* X. T
  26. plt.plot([min(y), max(y)], [min(y), max(y)], 'k--', lw=2, label='Perfect Fit'). n2 C. y2 Z' M' O) V) s; C
  27. plt.xlabel('Observed')7 G. ^. B* o) O5 ^
  28. plt.ylabel('Predicted')
    - H: {- b+ u* [0 Y7 V
  29. plt.title('PLS Regression')
    8 z# ?+ ~8 |/ I  W# _, L
  30. plt.legend()8 ~' R7 |, l, M& f
  31. plt.grid(True): i1 v: }+ P1 A. O5 n8 f( R3 f0 k4 e
  32. plt.show(), n$ W+ i# a" \* H/ k& Z9 k; y8 S0 r* }

  33. . V  ?' Q, l, ~- j: ?" ^9 }
复制代码
在上述代码中,我们首先定义了原始数据矩阵X和因变量向量y,然后创建了一个PLSRegression对象并指定保留的主成分个数为2。接下来,使用fit()方法进行偏最小二乘回归分析,并使用coef_属性获取回归系数。最后,使用predict()方法对原始数据进行预测,并获得预测值y_pred。请根据实际情况调整原始数据和保留的主成分个数,并根据需要对结果进行解释和分析。
& n7 f" b+ I" e9 p' b& L! \! b/ {运行上述代码,将绘制散点图来展示观察值(原始数据)与预测值之间的关系。如果模型拟合良好,散点图中的点应该基本落在对角线上。如果点主要集中在对角线上方,则预测值高估了观察值;如果点主要集中在对角线下方,则预测值低估了观察值。在理想情况下,所有点都应该在对角线上。* A4 o9 |: ?, o5 B) t2 B3 i0 p
VeryCapture_20231130164832.jpg
4 @  Q; o" X, h/ R2 o( |3 h% z) U. D
0 E* q4 E% q6 J& S% v; u5 W9 p





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5