2、编程实现三种常用模型评估方法
时间: 2023-12-28 13:54:05 浏览: 20
1. Holdout交叉验证
Holdout交叉验证是最简单的模型评估方法之一。该方法将数据集分成训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。
代码实现:
```python
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 将数据集分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("MSE:", mse)
```
2. K折交叉验证
K折交叉验证是一种更为复杂的模型评估方法。该方法将数据集分成K个折,每个折都作为测试集,剩余的K-1个折作为训练集。模型在每个折上训练K次,并在每个折上测试一次。最终,K次测试的结果取平均值作为模型的性能指标。
代码实现:
```python
from sklearn.model_selection import KFold
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 将数据集分成K个折
kf = KFold(n_splits=5)
mse_list = []
for train_index, test_index in kf.split(X):
# 训练集和测试集
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
mse_list.append(mse)
# 平均MSE值
print("Avg MSE:", sum(mse_list) / len(mse_list))
```
3. 留一交叉验证
留一交叉验证是一种特殊的K折交叉验证方法,当K等于数据集大小时,留一交叉验证等价于完全交叉验证。该方法将数据集中的每个样本都作为测试集,其余的样本都作为训练集。模型在每个样本上训练一次,并在每个样本上测试一次。最终,所有测试结果的平均值作为模型的性能指标。
代码实现:
```python
from sklearn.model_selection import LeaveOneOut
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 将数据集分成留一交叉验证的折
loo = LeaveOneOut()
mse_list = []
for train_index, test_index in loo.split(X):
# 训练集和测试集
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
mse_list.append(mse)
# 平均MSE值
print("Avg MSE:", sum(mse_list) / len(mse_list))
```