sklearn.model_selection库
时间: 2025-02-28 13:58:54 浏览: 65
### 使用 `sklearn.model_selection` 进行模型选择和验证
#### 数据集划分
为了确保模型能够很好地推广到未见过的数据,在训练之前通常会将原始数据划分为训练集和测试集。这可以通过 `train_test_split` 函数来实现,它允许指定测试集所占的比例以及其他参数如是否打乱数据。
```python
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
此操作有助于防止过拟合并提供一个独立的评估环境[^1]。
#### 超参数调优与网格搜索
当涉及到调整模型超参数时,可以利用 GridSearchCV 或 RandomizedSearchCV 来执行穷举式搜索或基于分布采样的高效搜索。这两个类都支持并行处理,并能自动找到最佳组合以最大化给定评分标准下的表现。
```python
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
grid_search = GridSearchCV(SVC(), param_grid, refit=True, verbose=2, n_jobs=-1)
grid_search.fit(X_train, y_train)
best_params = grid_search.best_params_
print(f'Best parameters found: {best_params}')
```
这种方法不仅提高了效率还简化了寻找最优配置的过程。
#### 交叉验证
对于更稳健的结果估计,推荐采用 k 折交叉验证 (k-fold Cross Validation),它可以多次分割数据从而获得更加可靠的性能度量。通过设置不同的折叠数目 (`cv`) 和其他选项比如分层抽样 (`StratifiedKFold`) 可进一步增强其适用性和准确性。
```python
from sklearn.model_selection import cross_val_score
scores = cross_val_score(DecisionTreeClassifier(), iris.data, iris.target, cv=5)
average_accuracy = scores.mean()
print("Average accuracy over all folds:", average_accuracy)
```
上述例子展示了如何计算决策树分类器在五次不同拆分上的平均精度得分[^2]。
#### 学习曲线绘制
最后,借助于 learning_curve 工具可以从另一个角度理解模型的学习行为。该函数返回一系列分数反映了随着训练样本数量增加而变化的趋势,这对于诊断偏差/方差问题非常有用。
```python
import numpy as np
from sklearn.model_selection import learning_curve
train_sizes, train_scores, validation_scores = learning_curve(
RandomForestRegressor(),
X,
y,
train_sizes=np.linspace(0.1, 1.0, 10),
cv=5,
scoring='neg_mean_squared_error'
)
plt.plot(train_sizes, -validation_scores.mean(axis=1), label="Validation Error")
plt.xlabel('Training examples')
plt.ylabel('Score')
plt.title('Learning Curve')
plt.legend(loc="best");
```
这段代码片段说明了怎样创建随机森林回归器随时间推移的表现图谱[^4]。
阅读全文
相关推荐

















