Scikit-learn模型评估全流程解析:从数据划分到交叉验证优化

模型评估的步骤、scikit-learn函数及实例说明

1. 数据划分(Train-Test Split)
  • 函数train_test_split
  • 使用场景:将数据分为训练集和测试集,避免模型过拟合。
  • 作用:确保模型在未见过的数据上验证性能。
  • 示例
    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)
    
2. 模型训练与预测
  • 函数:模型类(如LogisticRegression)的.fit().predict()
  • 使用场景:在训练集上训练模型,并对测试集进行预测。
  • 作用:评估模型在未知数据上的表现。
  • 示例
    from sklearn.linear_model import LogisticRegression
    model = LogisticRegression()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    
3. 评估指标计算
  • 函数accuracy_score, classification_report, confusion_matrix
  • 使用场景:量化模型性能,分析分类结果的详细指标(如精确率、召回率)。
  • 作用:全面评估模型的准确性和潜在缺陷(如类别偏差)。
  • 示例
    from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
    print("Accuracy:", accuracy_score(y_test, y_pred))
    print("Classification Report:\n", classification_report(y_test, y_pred))
    print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
    
4. 调参与交叉验证
  • 函数GridSearchCV
  • 使用场景:寻找最佳超参数组合,避免手动试错。
  • 作用:提高模型泛化能力,减少过拟合风险。
  • 示例
    from sklearn.model_selection import GridSearchCV
    param_grid = {'C': [0.1, 1, 10], 'penalty': ['l1', 'l2']}
    grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
    grid_search.fit(X_train, y_train)
    best_model = grid_search.best_estimator_
    
5. 交叉验证(Cross-Validation)
  • 函数cross_val_score
  • 使用场景:评估模型在不同数据子集上的稳定性。
  • 作用:减少数据划分的随机性对结果的影响。
  • 示例
    from sklearn.model_selection import cross_val_score
    scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
    print("Cross-Validation Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
    

完整评估实例(使用鸢尾花数据集)

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

# 加载数据
iris = datasets.load_iris()
X, y = iris.data, iris.target

# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 模型训练与预测
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

# 基础评估
print("Accuracy:", accuracy_score(y_test, y_pred))
print("Classification Report:\n", classification_report(y_test, y_pred))

# 调参与交叉验证
param_grid = {'C': [0.1, 1, 10], 'penalty': ['l1', 'l2']}
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
print("Best Parameters:", grid_search.best_params_)
print("Best Cross-Validation Score:", grid_search.best_score_)

# 交叉验证(整体数据)
cv_scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
print("Overall Cross-Validation Accuracy:", np.mean(cv_scores))
输出示例
Accuracy: 0.9666666666666667
Classification Report:
              precision    recall  f1-score   support

           0       1.00      1.00      1.00         9
           1       1.00      0.93      0.96        15
           2       0.92      1.00      0.96        12

    accuracy                           0.97        36
   macro avg       0.97      0.98      0.97        36
weighted avg       0.97      0.97      0.97        36

Best Parameters: {'C': 1, 'penalty': 'l2'}
Best Cross-Validation Score: 0.9666666666666666
Overall Cross-Validation Accuracy: 0.9533333333333334

关键点总结

  1. 数据划分:避免模型在训练集上过拟合。
  2. 评估指标:结合准确率、分类报告和混淆矩阵,全面分析模型表现。
  3. 调参与交叉验证:通过网格搜索和交叉验证优化超参数,确保模型泛化能力。
  4. 完整流程:从数据划分到最终评估,形成闭环验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值