机器学习模型评估与调优:提升模型性能和鲁棒性
发布时间: 2024-08-18 08:30:41 阅读量: 27 订阅数: 24
![机器学习模型评估与调优:提升模型性能和鲁棒性](https://ask.qcloudimg.com/http-save/yehe-1269631/7e6ca48938de6036cb0f07a00e001022.png)
# 1. 机器学习模型评估基础**
机器学习模型评估是衡量模型性能并确定其优缺点的关键步骤。它涉及使用各种指标来量化模型在特定任务上的表现。评估结果为模型调优、选择和部署提供了重要见解。
模型评估通常包括以下步骤:
1. **数据划分:**将数据集划分为训练集和测试集。训练集用于训练模型,而测试集用于评估其性能。
2. **模型训练:**使用训练集训练机器学习模型。
3. **模型评估:**使用测试集对训练后的模型进行评估,并计算评估指标。
4. **指标分析:**分析评估指标,了解模型的优缺点,并确定改进领域。
# 2. 模型评估指标
### 2.1 分类模型评估指标
#### 2.1.1 精度、召回率和 F1 分数
**精度**:正确预测的正例数与所有预测为正例的样本数之比。
**召回率**:正确预测的正例数与所有实际为正例的样本数之比。
**F1 分数**:精度的加权调和平均值和召回率,综合考虑了精度和召回率。
**计算公式:**
```
精度 = TP / (TP + FP)
召回率 = TP / (TP + FN)
F1 分数 = 2 * (精度 * 召回率) / (精度 + 召回率)
```
**参数说明:**
* TP:真正例(正确预测为正例)
* FP:假正例(错误预测为正例)
* FN:假反例(错误预测为反例)
**代码示例:**
```python
from sklearn.metrics import precision_score, recall_score, f1_score
y_true = [0, 1, 0, 1]
y_pred = [0, 1, 1, 0]
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1_score = f1_score(y_true, y_pred)
print("精度:", precision)
print("召回率:", recall)
print("F1 分数:", f1_score)
```
**逻辑分析:**
该代码计算了给定真实标签 `y_true` 和预测标签 `y_pred` 的精度、召回率和 F1 分数。`precision_score`、`recall_score` 和 `f1_score` 函数分别返回这三个指标的值。
#### 2.1.2 ROC 曲线和 AUC
**ROC 曲线**:以假正例率 (FPR) 为横坐标,真正例率 (TPR) 为纵坐标绘制的曲线。
**AUC**:ROC 曲线下的面积,表示模型区分正例和反例的能力。
**代码示例:**
```python
from sklearn.metrics import roc_curve, auc
y_true = [0, 1, 0, 1]
y_score = [0.1, 0.9, 0.3, 0.7]
fpr, tpr, thresholds = roc_curve(y_true, y_score)
roc_auc = auc(fpr, tpr)
print("ROC AUC:", roc_auc)
```
**逻辑分析:**
该代码计算了给定真实标签 `y_true` 和预测分数 `y_score` 的 ROC 曲线和 AUC。`roc_curve` 函数返回假正例率、真正例率和阈值,而 `auc` 函数计算 ROC 曲线下的面积。
### 2.2 回归模型评估指标
#### 2.2.1 均方根误差 (RMSE) 和平均绝对误差 (MAE)
**RMSE**:预测值与真实值之间的平方误差的平方根。
**MAE**:预测值与真实值之间的绝对误差的平均值。
**计算公式:**
```
RMSE = sqrt(mean((y_true - y_pred) ** 2))
MAE = mean(abs(y_true - y_pred))
```
**参数说明:**
* `y_true`:真实值
* `y_pred`:预测值
**代码示例:**
```python
from sklearn.metrics import mean_squared_error, mean_absolute_error
y_true = [10, 20, 30, 40]
y_pred = [12, 18, 32, 45]
rmse = mean_squared_error(y_true, y_pred) ** 0.5
mae = mean_absolute_error(y_true, y_pred)
print("RMSE:", rmse)
print("MAE:", mae)
```
**逻辑分析:**
该代码计算了给定真实值 `y_true` 和预测值 `y_pred` 的 RMSE 和 MAE。`mean_squared_error` 函数返回平方误差的平均值,而 `mean_absolute_error` 函数返回绝对误差的平均值。
#### 2.2.2 R 平方值和调整后的 R 平方值
**R 平方值**:预测值与真实值之间的相关系数的平方。
**调整后的 R 平方值**:考虑了模型复杂度的 R 平方值。
**计算公式:**
```
R^2 = 1 - sum((y_true - y_pred) ** 2) / sum((y_true - mean(y_true)) ** 2)
调整后的 R^2 = 1 - (1 -
```
0
0