scikit-learn(简称 sklearn)是一个功能强大的 Python 库,专为机器学习设计,提供了丰富的工具集来执行数据预处理、建模、评估以及超参数调优等任务。它的核心思想是将机器学习过程分为多个模块,每个模块都提供了简单易用的接口。理解 sklearn 的基础概念对于顺利进行机器学习项目至关重要。


🧠 Sklearn 的基础概念

1. 数据表示(Data Representation)

在 sklearn 中,数据通常以 特征矩阵(Feature Matrix) 和 目标数组(Target Array) 形式表示:

  • 特征矩阵(X):每一行代表一个样本(数据点),每一列代表一个特征。
  • 目标数组(y):包含每个样本的标签或目标值,用于监督学习任务(分类或回归)。

例如:

  • 特征矩阵 X[[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2], ... ] 每一行是一个样本,每一列是一个特征。
  • 目标数组 y[0, 0, 0, ... ] 这里的每个元素对应特征矩阵中样本的标签。

2. Estimator(估计器)

在 scikit-learn 中,所有机器学习模型都被称为 估计器(Estimator)。估计器通过 .fit() 方法进行训练,然后可以用 .predict() 方法进行预测。

  • 监督学习(Supervised Learning):算法从训练数据中学习,通过给定的目标(标签)来预测新数据的标签。
  • 无监督学习(Unsupervised Learning):算法从未标注的数据中寻找模式,例如聚类任务。

常见的估计器类型:

  • 分类估计器(Classifier):用于分类任务,如逻辑回归、决策树等。
  • 回归估计器(Regressor):用于回归任务,如线性回归、SVR 等。
from sklearn.linear_model import LogisticRegression

# 创建一个逻辑回归估计器
model = LogisticRegression()

# 训练模型
model.fit(X_train, y_train)

# 用训练好的模型进行预测
y_pred = model.predict(X_test)

3. 训练(Training)和预测(Prediction)

  • 训练(Training):通过调用 .fit() 方法,在给定的训练数据上训练模型。model.fit(X_train, y_train)
  • 预测(Prediction):通过调用 .predict() 方法,使用训练好的模型对新数据进行预测。predictions = model.predict(X_test)

4. 交叉验证(Cross-Validation)

交叉验证是评估模型性能的一种方法,它将数据集分为多个折叠(folds),并在每个折叠上进行训练和测试。常见的交叉验证方法有 K折交叉验证(K-Fold Cross Validation)

from sklearn.model_selection import cross_val_score

# 使用交叉验证评估模型
scores = cross_val_score(model, X, y, cv=5)  # 5折交叉验证
print("交叉验证得分:", scores)

5. 评估指标(Evaluation Metrics)

sklearn 提供了多种评估指标,用于衡量模型在不同任务中的表现。

  • 分类评估指标
    • 准确率(Accuracy):正确预测的比例。
    • 精度(Precision):正样本预测正确的比例。
    • 召回率(Recall):实际正样本中被正确预测的比例。
    • F1分数(F1-Score):精度和召回率的调和平均。
    from sklearn.metrics import accuracy_score accuracy = accuracy_score(y_test, y_pred) print("准确率:", accuracy)
  • 回归评估指标
    • 均方误差(Mean Squared Error, MSE):预测值与实际值之间差异的平方的平均值。
    • 决定系数(R² Score):模型预测值和实际值的拟合度。
    from sklearn.metrics import mean_squared_error mse = mean_squared_error(y_test, y_pred) print("均方误差:", mse)

6. 管道(Pipeline)

Pipeline 是 sklearn 中的一种机制,用来将多个步骤(如数据预处理、模型训练)连在一起,形成一个流式处理过程。使用 Pipeline 可以简化代码并减少数据泄漏的风险。

例如:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

# 创建一个包含标准化和支持向量机分类器的管道
pipeline = Pipeline([
    ('scaler', StandardScaler()), 
    ('svc', SVC())
])

# 训练管道
pipeline.fit(X_train, y_train)

# 使用管道进行预测
y_pred = pipeline.predict(X_test)

7. 超参数调优(Hyperparameter Tuning)

每个机器学习模型都有一些 超参数(Hyperparameters),这些参数不是从数据中学习到的,而是在模型训练之前手动设置的。通过调节这些超参数,可以优化模型的性能。

sklearn 提供了 网格搜索(GridSearchCV) 和 随机搜索(RandomizedSearchCV) 来自动寻找最佳的超参数组合。

from sklearn.model_selection import GridSearchCV

# 设置超参数网格
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}

# 创建网格搜索对象
grid_search = GridSearchCV(SVC(), param_grid, cv=5)

# 在训练数据上进行超参数搜索
grid_search.fit(X_train, y_train)

# 输出最佳超参数组合
print("最佳超参数:", grid_search.best_params_)

8. 特征选择(Feature Selection)

特征选择 是从所有特征中挑选出对预测最有帮助的特征。sklearn 提供了多种特征选择的方法,如基于模型的特征选择、递归特征消除等。

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier

# 使用随机森林进行特征选择
model = RandomForestClassifier()
model.fit(X_train, y_train)

# 基于模型的特征选择
selector = SelectFromModel(model, threshold="mean")
X_selected = selector.transform(X_train)


🛠 总结

scikit-learn 是一个功能强大的机器学习库,包含了从数据预处理到模型训练、评估和优化的各个方面。通过以下几个基础概念,你可以更好地理解如何使用它:

  1. 数据表示:特征矩阵(X)和目标数组(y)。
  2. 估计器:所有机器学习模型都称为估计器,通过 .fit() 进行训练,使用 .predict() 进行预测。
  3. 交叉验证和评估:用于评估模型的表现,常用的评估指标有准确率、精度、召回率等。
  4. 管道和超参数调优:将多个步骤组合在一起,进行自动化的超参数搜索。

掌握这些基础概念后,你可以开始使用 scikit-learn 来进行各种机器学习任务。如果你需要进一步的指导或示例,随时告诉我!😊