
本節摘要上一節中我們利用線性回歸從應力—應變數據中識別了材料彈性模量。當模型只有一個輸入特征時問題相對簡單。但真實的有限元代理模型往往同時包含載荷、幾何尺寸、材料參數和邊界條件等多個輸入其中一些變量還可能高度相關。本節將通過一個多參數結構位移預測案例學習嶺回歸、Lasso回歸和彈性網絡理解如何利用正則化緩解特征共線性與過擬合并從大量候選參數中篩選關鍵力學特征。一、本節學習目標完成本節后你將能夠理解過擬合與特征共線性的基本含義解釋正則化為什么能夠提高模型穩定性掌握嶺回歸的L2正則化原理掌握Lasso回歸的L1正則化原理理解彈性網絡如何結合L1與L2正則化正確使用StandardScaler標準化力學特征比較不同模型的系數、MAE、RMSE和利用Lasso初步篩選關鍵力學參數。二、為什么普通線性回歸還不夠考慮一個結構位移預測任務。模型輸入包括其中為載荷為結構長度為截面寬度為截面厚度為截面積為彈性模量。模型輸出為最大位移由于截面積與寬度、厚度之間存在直接關系。因此模型輸入中的、和并不是相互獨立的。這類現象稱為特征共線性。當多個特征表達了相似的信息時普通線性回歸可能出現回歸系數隨數據擾動明顯變化某些系數符號不符合直覺不同數據劃分得到完全不同的系數訓練集表現很好測試集表現下降很難判斷哪個參數真正重要。三、什么是過擬合一個模型如果過度追隨訓練數據中的偶然波動就可能出現訓練誤差很小但測試誤差較大。這種現象稱為過擬合。可以把它想象成一個結構設計約束過少結構雖然靈活卻可能不穩定約束過強結構非常穩定卻可能失去必要的變形能力約束合理才能兼顧適應性與穩定性。正則化就是給模型系數增加適當的“約束力”。圖5-1 不同正則化方法的作用四、普通線性回歸的目標函數多元線性回歸模型可以寫成普通線性回歸通過最小化殘差平方和尋找模型參數它只關心預測誤差不限制系數大小。當特征數量較多或存在共線性時模型可能使用較大的正負系數相互抵消。雖然訓練誤差很小但模型容易受到數據擾動影響。五、正則化的基本思想正則化在原有損失函數后增加一個系數懲罰項預測誤差系數懲罰它要求模型在兩個目標之間進行權衡盡量準確地擬合數據不要使用過大、過于復雜的系數組合。控制懲罰強度的參數通常記為一般來說時模型接近普通線性回歸較小時約束作用較弱較大時系數被明顯壓縮過大時模型可能發生欠擬合。六、嶺回歸使用L2約束穩定模型嶺回歸的目標函數為其中稱為L2懲罰項。嶺回歸的主要特點是將較大的系數向0壓縮通常不會讓系數嚴格等于0能夠降低共線特征造成的系數波動適合大部分特征都有一定貢獻的情況。嶺回歸更像是讓所有參數“共同承擔責任”但不允許某一個參數獲得過大的權重。七、Lasso回歸使用L1約束篩選特征Lasso回歸的目標函數為其中稱為L1懲罰項。Lasso的重要特點是它可以把部分不重要或冗余特征的系數直接壓縮為0。因此Lasso不僅能夠抑制過擬合還可以用于特征選擇。在力學預測中它可以幫助回答哪些幾何參數對位移影響較大哪些材料參數可以暫時忽略哪些特征表達了重復信息后續參數化仿真應重點掃描哪些變量八、彈性網絡同時結合L1和L2彈性網絡的目標函數可以寫成其中在scikit-learn中對應l1_ratio當模型接近Lasso回歸。當模型接近嶺回歸。彈性網絡適合以下情況特征數量較多多個特征高度相關希望進行特征篩選又不希望Lasso只保留相關特征中的一個。九、構造多參數力學仿真數據集本案例模擬80組結構參數化仿真數據。輸入變量包括載荷、長度、寬度、厚度、截面積和彈性模量輸出為最大位移。import numpy as np import pandas as pd n_samples 80 index np.arange(n_samples) load_kN 5 (index % 16) * 0.8 length_mm 600 (index % 8) * 25 width_mm ( 20 (index % 10) * 0.9 0.5 * np.sin(index) ) thickness_mm ( 2.5 (index % 7) * 0.12 0.05 * np.cos(index) ) area_mm2 width_mm * thickness_mm elastic_modulus_values np.array([ 70.0, 110.0, 210.0, 110.0 ]) elastic_modulus_GPa ( elastic_modulus_values[index % 4] ) noise ( 0.18 * np.sin(0.7 * index) 0.08 * np.cos(1.3 * index) ) max_displacement_mm ( 0.55 * load_kN 0.004 * length_mm - 0.035 * area_mm2 - 0.018 * elastic_modulus_GPa noise ) data pd.DataFrame({ 載荷_kN: load_kN, 長度_mm: length_mm, 寬度_mm: width_mm, 厚度_mm: thickness_mm, 截面積_mm2: area_mm2, 彈性模量_GPa: elastic_modulus_GPa, 最大位移_mm: max_displacement_mm }) print(數據形狀, data.shape) print(列名, data.columns.tolist())預期輸出數據形狀 (80, 7) 列名 [載荷_kN, 長度_mm, 寬度_mm, 厚度_mm, 截面積_mm2, 彈性模量_GPa, 最大位移_mm]這里加入少量周期性擾動用來模擬有限元離散誤差、測量誤差和未建模因素。十、檢查特征共線性geometry_correlation data[ [寬度_mm, 厚度_mm, 截面積_mm2] ].corr() print(geometry_correlation.round(3))預期輸出寬度_mm 厚度_mm 截面積_mm2 寬度_mm 1.000 -0.002 0.777 厚度_mm -0.002 1.000 0.624 截面積_mm2 0.777 0.624 1.000可以看到這說明截面積與寬度、厚度包含較多重復信息。相關系數接近1或-1時代表兩個特征具有較強線性關系。但相關系數只能幫助發現問題不能單獨決定是否刪除某個力學參數。十一、劃分特征、標簽和數據集feature_names [ 載荷_kN, 長度_mm, 寬度_mm, 厚度_mm, 截面積_mm2, 彈性模量_GPa ] X data[feature_names] y data[最大位移_mm] test_mask index % 5 0 train_mask ~test_mask X_train X.loc[train_mask] X_test X.loc[test_mask] y_train y.loc[train_mask] y_test y.loc[test_mask] print(訓練集, X_train.shape) print(測試集, X_test.shape)預期輸出訓練集 (64, 6) 測試集 (16, 6)測試集不參與模型參數訓練只用于評價模型對未見工況的預測能力。十二、為什么必須進行特征標準化不同力學特征的數值尺度差異很大載荷可能為長度可能為厚度可能只有彈性模量可能為。如果直接進行正則化數值尺度較大的特征可能受到不公平的懲罰。標準化公式為其中為第個特征的訓練集均值為第個特征的訓練集標準差。注意標準化器只能使用訓練集擬合不能提前讀取測試集信息否則會造成數據泄漏。十三、建立四種回歸模型使用Pipeline可以將標準化和模型訓練封裝成一個完整流程。from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.linear_model import ( LinearRegression, Ridge, Lasso, ElasticNet ) models { 線性回歸: Pipeline([ (scaler, StandardScaler()), (model, LinearRegression()) ]), 嶺回歸: Pipeline([ (scaler, StandardScaler()), (model, Ridge(alpha1.0)) ]), Lasso: Pipeline([ (scaler, StandardScaler()), (model, Lasso( alpha0.04, max_iter100000, tol1e-10 )) ]), 彈性網絡: Pipeline([ (scaler, StandardScaler()), (model, ElasticNet( alpha0.04, l1_ratio0.5, max_iter100000, tol1e-10 )) ]) } for name, model in models.items(): model.fit(X_train, y_train) print(name, 訓練完成)預期輸出線性回歸 訓練完成 嶺回歸 訓練完成 Lasso 訓練完成 彈性網絡 訓練完成Pipeline可以保證預測新數據時自動使用訓練階段建立的標準化規則。十四、比較四種模型的回歸系數coefficient_table pd.DataFrame( indexfeature_names ) for name, pipeline in models.items(): coefficient_table[name] ( pipeline.named_steps[model].coef_ ) print(coefficient_table.round(4))預期輸出線性回歸 嶺回歸 Lasso 彈性網絡 載荷_kN 2.0392 1.9980 2.0108 1.9728 長度_mm 0.2153 0.2287 0.1779 0.2139 寬度_mm -0.1459 -0.0894 0.0000 0.0000 厚度_mm -0.1504 -0.1054 -0.0070 -0.0253 截面積_mm2 -0.1015 -0.1734 -0.2663 -0.2716 彈性模量_GPa -0.9308 -0.9144 -0.8812 -0.8856這里展示的是標準化特征對應的系數因此可以比較不同特征的相對影響程度。從結果可以看到載荷系數為正說明載荷增大時位移增大彈性模量系數為負說明材料剛度提高時位移減小截面積系數為負說明截面增大時結構位移減小Lasso將寬度系數壓縮為0嶺回歸保留了全部特征但減小了共線特征的系數波動。圖5-2 四種模型的標準化回歸系數十五、為什么Lasso刪除了寬度截面積滿足當模型已經獲得、和時這些變量之間存在信息重復。Lasso發現在保留截面積和少量厚度信息后寬度不再提供足夠的額外預測價值因此將其系數壓縮為但必須注意系數為0不等于這個參數在物理上絕對沒有作用。它只表示在當前數據范圍、當前特征組合和當前下該變量沒有提供足夠的獨立預測信息。如果刪除截面積再重新訓練模型寬度和厚度的系數就可能重新增大。十六、計算模型評價指標from sklearn.metrics import ( mean_absolute_error, mean_squared_error, r2_score ) evaluation_records [] for name, model in models.items(): prediction model.predict(X_test) mae mean_absolute_error( y_test, prediction ) rmse np.sqrt( mean_squared_error( y_test, prediction ) ) r2 r2_score( y_test, prediction ) evaluation_records.append({ 模型: name, MAE_mm: mae, RMSE_mm: rmse, R2: r2 }) evaluation pd.DataFrame( evaluation_records ) print( evaluation.to_string( indexFalse, float_formatlambda value: f{value:.4f} ) )預期輸出模型 MAE_mm RMSE_mm R2 線性回歸 0.1329 0.1544 0.9947 嶺回歸 0.1316 0.1566 0.9946 Lasso 0.1227 0.1480 0.9951 彈性網絡 0.1312 0.1584 0.9944在本案例中四種模型都取得了較高精度。其中Lasso的測試集MAE和RMSE略低并且使用了更少的有效特征。這并不意味著Lasso在所有問題中都最好而是說明預測精度模型簡潔性工程可解釋性應當綜合考慮。圖5-3 不同模型的測試集誤差十七、正則化強度的影響決定模型受到多強的約束。當過小時此時模型接近普通線性回歸系數約束較弱訓練誤差較小可能無法解決過擬合與共線性。當過大時大量系數被壓縮Lasso可能刪除過多特征模型表達能力下降訓練誤差和測試誤差都可能增大。這種現象稱為欠擬合。因此不是越大越好也不是越小越好而應通過交叉驗證選擇。十八、Lasso篩選出的特征是否可信可以查看Lasso保留的特征lasso_coefficients ( models[Lasso] .named_steps[model] .coef_ ) selected_features [ feature for feature, coefficient in zip( feature_names, lasso_coefficients ) if abs(coefficient) 1e-8 ] removed_features [ feature for feature, coefficient in zip( feature_names, lasso_coefficients ) if abs(coefficient) 1e-8 ] print(保留特征, selected_features) print(刪除特征, removed_features)預期輸出保留特征 [載荷_kN, 長度_mm, 厚度_mm, 截面積_mm2, 彈性模量_GPa] 刪除特征 [寬度_mm]模型篩選結果還需要接受力學知識檢查載荷被保留符合結構變形規律長度被保留符合尺寸效應彈性模量被保留符合剛度規律截面積被保留符合截面承載規律寬度被刪除可能是因為它的信息已經被截面積吸收。這種檢查過程稱為物理一致性驗證。十九、嶺回歸、Lasso和彈性網絡怎么選方法主要特點適用場景線性回歸不限制系數特征少、共線性弱、數據充足嶺回歸所有系數整體收縮多數特征都有作用、共線性明顯Lasso部分系數變為0希望篩選關鍵參數、建立稀疏模型彈性網絡同時使用L1與L2特征多且成組相關需要兼顧篩選和穩定可以使用下面的經驗判斷主要目標是穩定預測優先嘗試嶺回歸主要目標是篩選參數優先嘗試Lasso特征很多且相關性復雜優先嘗試彈性網絡樣本和特征都比較簡單普通線性回歸可能已經足夠。最終仍應以交叉驗證結果和力學合理性為準。二十、常見錯誤與排查方法錯誤一正則化前沒有標準化不同單位和數值尺度會造成不公平的系數懲罰。推薦使用Pipeline([ (scaler, StandardScaler()), (model, Ridge(alpha1.0)) ])錯誤二使用全部數據計算標準化參數這會讓測試集信息提前進入訓練過程造成數據泄漏。錯誤三認為Lasso刪除的特征沒有物理作用Lasso判斷的是特征對當前數據和當前模型的獨立預測貢獻而不是物理因果關系。錯誤四只比較還應同時檢查MAERMSE系數穩定性特征數量殘差分布物理合理性。錯誤五把正則化系數直接當作物理參數標準化后的回歸系數適合比較相對重要性但通常不能直接替代具有明確單位的材料參數。錯誤六設置過大如果所有系數都接近0模型可能已經受到過強約束。二十一、本節練習基礎練習分別將嶺回歸的修改為0.01 0.1 1.0 10.0 100.0觀察回歸系數是否隨著增大而逐漸減小。進階練習分別將Lasso的設置為0.001 0.01 0.04 0.1 0.5記錄每種情況下系數為0的特征數量。物理思考從數據集中刪除“截面積”列然后重新訓練Lasso模型觀察寬度和厚度的系數如何變化并解釋原因。工程挑戰將輸出變量由最大位移改為最大應力重新思考哪些輸入特征應該保留彈性模量是否仍然重要截面積與應力之間應是什么關系模型系數符號是否符合力學規律二十二、本節小結本節從多參數力學數據出發學習了三種重要的正則化回歸方法。嶺回歸使用L2約束使所有系數整體縮小提高模型穩定性。Lasso使用L1約束能夠將部分系數壓縮為0實現特征篩選。彈性網絡同時結合L1和L2兼顧模型稀疏性和共線特征下的穩定性。需要記住的核心思想是模型更復雜模型預測一定更可靠正則化通過犧牲少量訓練集擬合能力換取更穩定的測試表現和更清晰的工程解釋。下一節將進入決策樹學習模型如何通過一系列條件判斷自動發現結構失效、應力突變和裂紋擴展中的關鍵參數閾值。