模型评估与调优是机器学习流程中确保模型性能的重要环节。这个过程涉及使用不同的度量指标评估模型的性能,并通过调整模型参数或选择不同的模型来优化其表现。
模型评估的目的是衡量模型的性能,通常使用测试集上的性能指标来评估模型的泛化能力。
分类任务:
回归任务:
Scikit-learn 提供了一些用于评估模型的函数。以下是一个评估分类模型的示例:
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, confusion_matrix
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建随机森林分类器模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')
roc_auc = roc_auc_score(y_test, model.predict_proba(X_test), multi_class='ovr')
print(f"Accuracy: {accuracy:.2f}")
print(f"Precision: {precision:.2f}")
print(f"Recall: {recall:.2f}")
print(f"F1-Score: {f1:.2f}")
print(f"ROC AUC: {roc_auc:.2f}")
模型调优旨在通过优化模型的参数和超参数来提高其性能。常见的调优方法有:
超参数是指在训练过程中不会更新的参数,需要手动设定,比如决策树的最大深度、随机森林的树数量、神经网络的学习率等。
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
# 定义超参数范围
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10]
}
# 使用网格搜索和交叉验证
grid_search = GridSearchCV(RandomForestClassifier(random_state=42), param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)
print(f"Best parameters: {grid_search.best_params_}")
print(f"Best cross-validation score: {grid_search.best_score_:.2f}")
from sklearn.model_selection import RandomizedSearchCV
# 定义超参数范围
param_dist = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10]
}
# 使用随机搜索和交叉验证
random_search = RandomizedSearchCV(RandomForestClassifier(random_state=42), param_distributions=param_dist, cv=5, scoring='accuracy', n_iter=10, random_state=42)
random_search.fit(X_train, y_train)
print(f"Best parameters: {random_search.best_params_}")
print(f"Best cross-validation score: {random_search.best_score_:.2f}")
交叉验证是一种评估模型性能的方法,通过将数据集分为 K 个折叠(fold),每次使用一个折叠作为验证集,其余的作为训练集,重复 K 次,计算平均性能。
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
# 使用交叉验证评估模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
print(f"Cross-validation accuracy scores: {scores}")
print(f"Mean accuracy: {scores.mean():.2f}")
print(f"Standard deviation: {scores.std():.2f}")
模型评估与调优是提高模型性能的重要步骤。通过正确的评估指标判断模型的表现,利用超参数调优和交叉验证来优化模型,可以显著提高模型的准确性和泛化能力。选择合适的模型、特征工程和正则化等方法也是提升模型性能的重要策略。