4. 传统机器学习模型(上):线性回归、岭回归、Lasso回归在材料性能预测中的应用与对比
各位同学,今天我们来聊聊材料性能预测中最基础、也最实用的三个模型。说实话,很多刚入行的朋友一上来就追着深度学习跑,结果数据量不够,模型反而跑偏了。我个人习惯是,先拿传统线性模型试试水,往往能发现不少规律。
4.1 线性回归:最朴素的预测工具
线性回归,说白了就是找一条直线,让这条线尽可能穿过所有数据点。在材料科学里,我们经常用它来建立成分-性能之间的简单关系。
举个例子,你想预测合金的硬度。假设你发现硬度主要跟某个元素的含量有关,那模型就是:
硬度 = w × 元素含量 + b
这里的w和b就是我们要学的参数。模型的目标是让预测值和真实值的误差平方和最小。这就是经典的最小二乘法。
核心公式:
损失函数 J(w) = (1/2m) × Σ(y_pred - y_true)²
其中m是样本数量,y_pred是预测值,y_true是真实值。
我在项目中遇到过一件事。有一次预测陶瓷材料的断裂韧性,我直接用线性回归,结果训练集上表现不错,但一换到测试集就崩了。为什么会这样?因为特征之间高度相关,模型过拟合了。
4.2 岭回归:给模型加点约束
岭回归就是在线性回归的损失函数里加了一个惩罚项。这个惩罚项是参数w的平方和。你想想看,加了惩罚之后,模型就不敢把某个特征的权重设得太大,从而抑制过拟合。
岭回归损失函数 = 线性回归损失 + λ × Σ(w²)
这里的λ是一个超参数,控制惩罚的力度。λ越大,模型越简单,越不容易过拟合。但λ太大也不行,模型会欠拟合。
我的经验:λ一般从0.001、0.01、0.1、1、10这样去试。我习惯用对数尺度搜索,效率高很多。
我记得有一次做聚合物玻璃化转变温度的预测,特征有几十个,很多特征之间相关性很强。线性回归直接炸了,但岭回归稳稳地给出了合理的预测。嗯,这里要注意,岭回归不会把特征的权重变成0,它只是让权重变小。
4.3 Lasso回归:帮你做特征选择
Lasso回归跟岭回归很像,但惩罚项不一样。Lasso用的是参数w的绝对值之和。这个小小的差别,带来了一个巨大的好处——Lasso可以把不重要的特征权重直接变成0。
Lasso回归损失函数 = 线性回归损失 + λ × Σ|w|
说白了,Lasso帮你自动筛选特征。在材料性能预测中,这太实用了。你有一堆可能的成分、工艺参数,但不知道哪些真正起作用。Lasso跑一遍,哪些特征被保留,哪些被剔除,一目了然。
避坑指南:我曾经在预测电池材料的循环寿命时,直接用Lasso选了特征。结果发现它把一些物理上很重要的特征剔除了,因为那些特征跟其他特征高度相关。所以,Lasso选完特征后,一定要结合物理知识再检查一遍。
4.4 三个模型的对比
下面这张表是我自己总结的,平时做项目时经常参考:
| 模型 | 特点 | 适用场景 | 缺点 |
|---|---|---|---|
| 线性回归 | 无惩罚,简单直接 | 特征少、无共线性 | 容易过拟合 |
| 岭回归 | L2惩罚,权重缩小但不为零 | 特征多、有共线性 | 不能做特征选择 |
| Lasso回归 | L1惩罚,权重可变为零 | 需要特征选择 | 可能剔除重要特征 |
4.5 实战:用Python跑一个材料性能预测
我们拿一个公开的合金硬度数据集来演示。假设数据有5个特征:元素A、B、C的含量,以及热处理温度和时间。目标是预测硬度。
# 导入必要的库
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 加载数据(假设数据已准备好)
# data = pd.read_csv('alloy_hardness.csv')
# X = data.drop('hardness', axis=1)
# y = data['hardness']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 线性回归
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred_lr = lr.predict(X_test)
print(f'线性回归 MSE: {mean_squared_error(y_test, y_pred_lr):.4f}')
# 岭回归
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
y_pred_ridge = ridge.predict(X_test)
print(f'岭回归 MSE: {mean_squared_error(y_test, y_pred_ridge):.4f}')
# Lasso回归
lasso = Lasso(alpha=0.01)
lasso.fit(X_train, y_train)
y_pred_lasso = lasso.predict(X_test)
print(f'Lasso回归 MSE: {mean_squared_error(y_test, y_pred_lasso):.4f}')
# 查看Lasso选中的特征
print(f'Lasso保留的特征数: {np.sum(lasso.coef_ != 0)}')
跑完这段代码,你会发现三个模型的MSE不一样。通常岭回归和Lasso会优于线性回归,尤其是当特征之间存在相关性时。
4.6 知识体系总览
下面这张图帮你理清这三个模型的关系和选择逻辑:
4.7 总结与建议
做材料性能预测,我建议你按这个顺序来:
- 先跑线性回归,看看数据的基本规律。如果效果不错,说明问题比较简单。
- 再试岭回归,尤其是特征数量多的时候。它能帮你稳定模型。
- 最后用Lasso,看看哪些特征是真正重要的。但记住,Lasso的结果要结合物理知识验证。
一个小技巧:如果你不确定用哪个模型,可以试试弹性网络(Elastic Net),它结合了L1和L2惩罚。不过那是下一章的内容了。
好了,今天的内容就到这里。这三个模型虽然简单,但用好了能解决材料预测中80%的问题。下次遇到新的材料数据,不妨先拿它们试试手。
公众号:蓝海资料掘金营,微信deep3321