【进阶】Scikit-Learn:决策树与随机森林
发布时间: 2024-06-26 12:49:22 阅读量: 69 订阅数: 115
![python机器学习合集](https://img-blog.csdnimg.cn/img_convert/7a3f7a5d50af30202e2976fcac10e01c.png)
# 2.1 决策树模型的评估指标
决策树模型的评估指标主要用于衡量模型的性能和泛化能力。常用的评估指标包括:
- **准确率 (Accuracy)**:预测正确的样本数占总样本数的比例。
- **召回率 (Recall)**:实际为正类且被预测为正类的样本数占实际正类样本数的比例。
- **F1 值 (F1 Score)**:准确率和召回率的调和平均值,综合考虑了模型的准确性和召回性。
# 2. 决策树模型的评估与调优
### 2.1 决策树模型的评估指标
决策树模型的评估指标通常用于衡量模型在给定数据集上的性能。常用的评估指标包括:
**2.1.1 准确率、召回率和 F1 值**
* **准确率(Accuracy):**正确预测的样本数量占总样本数量的比例。
* **召回率(Recall):**实际为正例的样本中被正确预测为正例的比例。
* **F1 值:**准确率和召回率的加权调和平均值。
**代码块:**
```python
from sklearn.metrics import accuracy_score, recall_score, f1_score
# 计算准确率、召回率和 F1 值
accuracy = accuracy_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
# 输出评估结果
print("准确率:", accuracy)
print("召回率:", recall)
print("F1 值:", f1)
```
**逻辑分析:**
该代码块使用 `sklearn.metrics` 模块中的 `accuracy_score`、`recall_score` 和 `f1_score` 函数计算准确率、召回率和 F1 值。这些函数接受真实标签 `y_true` 和预测标签 `y_pred` 作为输入,并返回相应的评估指标。
**2.1.2 ROC 曲线和 AUC**
* **ROC 曲线(Receiver Operating Characteristic Curve):**绘制真实正例率(TPR)与假正例率(FPR)之间的关系。
* **AUC(Area Under the Curve):**ROC 曲线下面积,表示模型区分正负例的能力。
**代码块:**
```python
from sklearn.metrics import roc_curve, auc
# 计算 ROC 曲线和 AUC
fpr, tpr, thresholds = roc_curve(y_true, y_pred)
auc_score = auc(fpr, tpr)
# 绘制 ROC 曲线
plt.plot(fpr, tpr, label="ROC 曲线")
plt.xlabel("假正例率")
plt.ylabel("真实正例率")
plt.title("ROC 曲线")
plt.legend()
plt.show()
# 输出 AUC 值
print("AUC:", auc_score)
```
**逻辑分析:**
该代码块使用 `sklearn.metrics` 模块中的 `roc_curve` 和 `auc` 函数计算 ROC 曲线和 AUC。`roc_curve` 函数返回假正例率、真实正例率和阈值,而 `auc` 函数计算 ROC 曲线下面积。
### 2.2 决策树模型的调优
决策树模型的调优旨在通过调整超参数和特征来提高模型的性能。
**2.2.1 超参数优化**
超参数是决策树模型中不可学习的参数,需要手动设置。常用的超参数包括:
* **最大深度:**决策树的最大深度。
* **最小样本分割:**分割内部节点所需的最小样本数。
* **最小叶子节点样本数:**叶子节点所需的最小样本数。
**代码块:**
```python
from sklearn.model_selection import GridSearchCV
# 定义超参数网格
param_grid = {
"max_depth": [3, 5, 7],
"min_samples_split": [2, 5, 10],
"min_samples_leaf": [1, 2, 5]
}
# 使用网格搜索进行超参数优化
grid_search = GridSearchCV(
DecisionTreeClassifier(), param_grid, cv=5, n_jobs=-1
)
grid_search.fit(X, y)
# 获取最佳超参数
best_params = grid_search.best_params_
# 输出最佳超参数
print("最佳超参数:", best_params)
```
**逻辑分析:**
该代码块使用 `sklearn.model_selection` 模块中的 `GridSearchCV` 类进行超参数优化。`GridSearchCV` 遍历超参数网格,在交叉验证数据集上评估每个超参数组合的性能,并选择具有最佳性能的超参数。
**2.2.2 特征选择和工程**
特征选择和工程涉及选择和转换特征以提高模型的性能。特征选择技术包括:
* **过滤式特征选择:**基于统计度量(如信息增益或卡方检验)选择特征。
* **包装式特征选择:**使用机器学习算法迭代选择特征。
特征工程技术包括:
* **特征缩放:**将特征值归一化或标准化。
* **特征编码:**将类别特征转换为数值特征。
**代码块:**
```python
from sklearn.feature_selection import SelectKBest, chi
```
0
0