杰瑞科技汇

Python sklearn学习从哪开始?

Scikit-learn 学习指南

Scikit-learn (简称 sklearn) 是 Python 生态中最核心、最流行的机器学习库,它提供了简单高效的工具用于数据挖掘和数据分析,其特点是一致、高效的 API,让初学者和专家都能轻松上手。

Python sklearn学习从哪开始?-图1
(图片来源网络,侵删)

核心思想与工作流程

理解 sklearn 的核心思想至关重要,它遵循一个统一的模式,让你学会一个模型后,能轻松应用到其他模型。

核心概念

  • Estimator (估计器)sklearn 中所有机器学习算法的统称,任何实现了 fit() 方法的对象都是一个估计器。
  • Transformer (转换器):实现了 fit()transform() 方法的估计器,用于对数据进行预处理,如标准化、降维等。
  • Predictor (预测器):实现了 fit()predict() 方法的估计器,用于进行预测,如分类、回归。
  • Pipeline (管道):将多个转换器和一个预测器串联起来,形成一个完整的机器学习工作流,这能确保数据在每一步都得到正确的处理,避免数据泄露。

标准工作流程

几乎所有 sklearn 的任务都遵循以下四个步骤:

  1. 数据准备

    • 加载数据(通常使用 pandas)。
    • 将数据分为特征和标签:X (特征矩阵) 和 y (目标向量)。
    • 划分训练集和测试集:train_test_split
  2. 模型选择

    Python sklearn学习从哪开始?-图2
    (图片来源网络,侵删)
    • sklearn 中选择一个合适的模型(LinearRegression, RandomForestClassifier)。
    • 实例化模型:model = ModelName()
  3. 模型训练

    • 使用训练数据来拟合模型:model.fit(X_train, y_train)
  4. 模型评估

    • 使用测试数据进行预测:predictions = model.predict(X_test)
    • 将预测结果 predictions 与真实标签 y_test 进行比较,计算评估指标(如准确率、均方误差等)。

核心模块详解

sklearn 的结构非常清晰,主要功能都封装在不同的子模块中。

sklearn.datasets:数据集

这是练习和入门的起点。

Python sklearn学习从哪开始?-图3
(图片来源网络,侵删)
from sklearn import datasets
import pandas as pd
# 加载内置数据集
# iris: 鸢尾花分类数据集
iris = datasets.load_iris()
X_iris = iris.data  # 特征: 花萼和花瓣的长度宽度
y_iris = iris.target # 标签: 鸢尾花的种类
# diabetes: 糖尿病回归数据集
diabetes = datasets.load_diabetes()
X_diabetes = diabetes.data
y_diabetes = diabetes.target
# 也可以从Pandas DataFrame或CSV文件加载数据
# df = pd.read_csv('my_data.csv')
# X = df.drop('target_column', axis=1)
# y = df['target_column']

sklearn.model_selection:模型评估与选择

这是最常用的模块之一,用于评估模型性能和进行参数调优。

  • train_test_split:将数据集划分为训练集和测试集。

    from sklearn.model_selection import train_test_split
    # test_size=0.2 表示20%的数据作为测试集
    # random_state 确保每次划分结果一致,便于复现
    X_train, X_test, y_train, y_test = train_test_split(X_iris, y_iris, test_size=0.2, random_state=42)
  • cross_val_score:交叉验证,更稳健地评估模型性能。

    from sklearn.model_selection import cross_val_score
    from sklearn.svm import SVC
    model = SVC(kernel='linear')
    # cv=5 表示5折交叉验证
    scores = cross_val_score(model, X_iris, y_iris, cv=5)
    print(f"交叉验证准确率: {scores.mean():.2f} (+/- {scores.std() * 2:.2f})")
  • GridSearchCV:网格搜索,用于寻找最佳的超参数组合。

    from sklearn.model_selection import GridSearchCV
    from sklearn.ensemble import RandomForestClassifier
    param_grid = {
        'n_estimators': [50, 100, 200],
        'max_depth': [None, 10, 20]
    }
    rf = RandomForestClassifier()
    grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5)
    grid_search.fit(X_train, y_train)
    print(f"最佳参数: {grid_search.best_params_}")
    print(f"最佳模型: {grid_search.best_estimator_}")

sklearn.preprocessing:数据预处理

在训练模型之前,通常需要对数据进行预处理。

  • StandardScaler:标准化,使特征均值为0,方差为1,适用于大多数基于距离的算法(如SVM、KNN)。

    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train) # 先在训练集上拟合
    X_test_scaled = scaler.transform(X_test)       # 再用相同的scaler转换测试集
  • MinMaxScaler:归一化,将数据缩放到一个固定的范围(通常是[0, 1])。

  • OneHotEncoder:独热编码,将分类变量转换为数值形式。

    from sklearn.preprocessing import OneHotEncoder
    from sklearn.compose import ColumnTransformer
    # 假设 'category_col' 是分类特征的列名
    categorical_features = ['category_col']
    preprocessor = ColumnTransformer(
        transformers=[('cat', OneHotEncoder(), categorical_features)],
        remainder='passthrough' # 其他列保持不变
    )
    X_processed = preprocessor.fit_transform(X)

sklearn.metrics:模型评估

用于量化模型的性能。

  • 分类任务

    • accuracy_score: 准确率。
    • confusion_matrix: 混淆矩阵。
    • classification_report: 分类报告(包含精确率、召回率、F1分数)。
    from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
    y_pred = model.predict(X_test)
    print(f"准确率: {accuracy_score(y_test, y_pred)}")
    print("\n分类报告:")
    print(classification_report(y_test, y_pred))
    print("\n混淆矩阵:")
    print(confusion_matrix(y_test, y_pred))
  • 回归任务

    • mean_squared_error (MSE): 均方误差。
    • r2_score: R²分数。
    from sklearn.metrics import mean_squared_error, r2_score
    y_pred_reg = model.predict(X_test)
    print(f"均方误差: {mean_squared_error(y_test, y_pred_reg)}")
    print(f"R²分数: {r2_score(y_test, y_pred_reg)}")

sklearn.pipeline:管道

将预处理和模型训练打包,防止数据泄露,使代码更整洁。

from sklearn.pipeline import Pipeline
# 创建一个管道,先标准化,再训练模型
pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('classifier', SVC(kernel='linear'))
])
# 直接在原始数据上训练和预测,无需手动调用scaler
pipe.fit(X_train, y_train)
score = pipe.score(X_test, y_test)
print(f"管道模型的准确率: {score}")

常用算法实践

分类任务:鸢尾花分类

# 1. 数据准备
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 2. 模型选择与训练
from sklearn.ensemble import RandomForestClassifier
# 实例化模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
# 训练模型
model.fit(X_train, y_train)
# 3. 模型评估
from sklearn.metrics import accuracy_score, classification_report
y_pred = model.predict(X_test)
print(f"模型准确率: {accuracy_score(y_test, y_pred):.4f}")
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

回归任务:糖尿病进展预测

# 1. 数据准备
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 2. 模型选择与训练
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
# 3. 模型评估
from sklearn.metrics import mean_squared_error, r2_score
y_pred = model.predict(X_test)
print(f"均方误差: {mean_squared_error(y_test, y_pred):.2f}")
print(f"R²分数: {r2_score(y_test, y_pred):.2f}")

学习路径与资源建议

学习路径

  1. 基础准备:扎实的 Python 基础和 NumPyPandas 数据处理能力。
  2. 入门理论:了解机器学习的基本概念,如监督/无监督学习、分类/回归、过拟合/欠拟合、训练集/测试集等。
  3. sklearn 核心:熟练掌握上述的 标准工作流程核心模块 (datasets, model_selection, preprocessing, metrics) 和 Pipeline
  4. 常用算法:实践几种经典算法,如线性回归、逻辑回归、K近邻、支持向量机、决策树、随机森林。
  5. 进阶主题:学习更高级的模型(如梯度提升机 XGBoost/LightGBM)、特征工程、模型解释性(如 SHAP)。

推荐资源

  • 官方文档

    • Scikit-learn User Guide必读! 最权威、最全面的资料,包含了所有算法的原理、参数和示例。
    • Scikit-learn Examples:大量可直接运行的代码示例,是学习API用法和算法应用的最好方式。
  • 在线课程

    • Coursera - Machine Learning by Andrew Ng:经典入门课程,虽然使用 Octave/MATLAB,但理论部分是通用的。
    • DataCamp - Data Scientist with Python Track:互动式学习,sklearn 是重要组成部分。
    • Kaggle Learn:免费、实用的微课程,特别是 scikit-learnfeature-engineering 课程,非常适合上手实践。
  • 书籍

    • 《Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow》 (中文版:《Scikit-Learn、Keras与TensorFlow机器学习实用指南》):强烈推荐!这本书被誉为 sklearn 学习的“圣经”,理论与实践结合得非常好。
  • 社区与博客

    • Towards Data Science (Medium):上面有大量关于 sklearn 的高质量教程和案例分析。
    • 知乎/CSDN:搜索特定问题,通常能找到国内开发者的经验和解决方案。

学习 sklearn 的关键在于掌握其统一的 API 设计标准化的工作流程,一旦你熟悉了 fit -> predict -> evaluate 的模式,再结合 PipelineGridSearchCV 这样的高级工具,你就能高效地构建、评估和优化各种机器学习模型。

从今天开始,选择一个小数据集,跟着上面的示例代码跑一遍,你就能很快上手 sklearn 的魅力所在!祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇