Scikit-learn模型构建全流程解析:从数据预处理到超参数调优
模型选择与训练步骤及示例
1. 数据准备与探索
步骤说明:加载数据并初步探索其分布、缺失值、异常值等。
注意事项:
- 检查数据类型(数值/类别)、缺失值和异常值。
- 对类别型特征进行编码(如独热编码)。
实例:鸢尾花数据集(load_iris()
)。
函数及参数: sklearn.datasets.load_iris()
:加载数据集。
2. 数据预处理
步骤说明:标准化/归一化特征,处理缺失值,分割训练/测试集。
注意事项:
- 特征缩放(如标准化)对许多算法(如SVM、逻辑回归)至关重要。
- 避免在测试集上泄漏信息(如先分割数据再标准化)。
实例:标准化鸢尾花特征。
函数及参数: sklearn.preprocessing.StandardScaler()
:with_mean=True, with_std=True
。sklearn.model_selection.train_test_split()
:test_size=0.2, random_state=42
。
3. 模型选择
步骤说明:根据问题类型(分类/回归/聚类)选择算法。
注意事项:
- 分类问题:逻辑回归、随机森林、SVM。
- 回归问题:线性回归、决策树回归。
- 简单问题可用线性模型,复杂问题可尝试集成模型。
实例:鸢尾花分类选择逻辑回归。
函数及参数: sklearn.linear_model.LogisticRegression()
:C=1.0, solver='lbfgs'
(正则化参数C
控制模型复杂度)。
4. 模型训练
步骤说明:用训练集拟合模型。
注意事项:
- 确保输入数据已预处理且无缺失值。
- 对于分类问题,需确保标签是整数或独热编码。
实例:训练逻辑回归模型。
函数及参数: model.fit(X_train, y_train)
:拟合数据。
5. 模型评估
步骤说明:在测试集上评估性能,选择合适的指标。
注意事项:
- 分类问题常用准确率(accuracy)、F1分数;回归问题用均方误差(MSE)、R²分数。
- 避免仅依赖单一指标(如精度可能因类别不平衡误导)。
实例:计算逻辑回归的准确率。
函数及参数: sklearn.metrics.accuracy_score(y_true, y_pred)
。
6. 模型调优
步骤说明:通过交叉验证和超参数搜索优化模型。
注意事项:
- 使用
GridSearchCV
或RandomizedSearchCV
系统搜索超参数。 - 交叉验证(如5折)避免过拟合。
实例:调优逻辑回归的正则化参数C
。
函数及参数: sklearn.model_selection.GridSearchCV(estimator=model, param_grid={'C': [0.1, 1, 10]}, cv=5)
。
7. 模型部署
步骤说明:保存模型并用于预测新数据。
注意事项:
- 使用
joblib
或pickle
保存模型。 - 预测前需对新数据进行与训练数据相同的预处理。
函数及参数: joblib.dump(model, 'model.pkl')
。
完整代码示例(鸢尾花分类)
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import GridSearchCV
from sklearn.externals import joblib
# 1. 加载数据
iris = datasets.load_iris()
X, y = iris.data, iris.target
# 2. 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 3. 特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 4. 模型训练
model = LogisticRegression(C=1.0, solver='lbfgs', max_iter=200)
model.fit(X_train_scaled, y_train)
# 5. 模型评估
y_pred = model.predict(X_test_scaled)
print(f"Accuracy: {accuracy_score(y_test, y_pred):.2f}")
# 6. 超参数调优
param_grid = {'C': [0.1, 1, 10]}
grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(X_train_scaled, y_train)
print(f"Best C: {grid_search.best_params_}")
# 7. 保存模型
joblib.dump(model, 'iris_model.pkl')
关键点总结
- 预处理:标准化是多数模型的必要步骤。
- 超参数调优:通过交叉验证避免过拟合。
- 评估指标:根据任务选择合适的指标(如分类 vs 回归)。