Sklearn 基础概念

Scikit-learn(sklearn)是一个功能强大的 Python 机器学习库,提供了简单且一致的接口来实现各种机器学习任务。以下是 Scikit-learn 的基础概念,简洁明了,适合快速理解其核心组件和工作原理。


1. 核心概念

  • 估算器(Estimator)
  • Scikit-learn 的核心对象,所有模型(如分类器、回归器、聚类算法)都基于估算器接口。
  • 主要方法:
    • fit(X, y):训练模型,X 是特征矩阵,y 是目标变量(监督学习中需要)。
    • predict(X):对新数据进行预测(分类或回归)。
    • transform(X):数据转换(用于预处理或降维)。
    • score(X, y):评估模型性能(如准确率或 R² 分数)。
  • 示例:LogisticRegression() 是一个分类估算器,StandardScaler() 是一个转换估算器。
  • 特征矩阵(X)与目标向量(y)
  • X:特征矩阵,通常是二维 NumPy 数组或 Pandas DataFrame,形状为 (n_samples, n_features),表示样本数和特征数。
  • y:目标向量,通常是一维数组,形状为 (n_samples,),表示每个样本的标签(分类)或值(回归)。
  • 示例:鸢尾花数据集 X(150, 4)(150 个样本,4 个特征),y(150,)(150 个类别标签)。
  • 监督学习与无监督学习
  • 监督学习:使用带标签的数据(Xy)训练模型,如分类(LogisticRegression)和回归(LinearRegression)。
  • 无监督学习:处理无标签数据(仅 X),如聚类(KMeans)或降维(PCA)。
  • 数据集
  • Scikit-learn 提供内置数据集(如 load_iris()load_breast_cancer())用于测试和学习。
  • 支持外部数据(如 CSV 文件)通过 NumPy 或 Pandas 加载。

2. 数据预处理

数据预处理是机器学习的关键步骤,Scikit-learn 提供多种工具:

  • 标准化(StandardScaler):将特征缩放为均值 0、方差 1。
  from sklearn.preprocessing import StandardScaler
  scaler = StandardScaler()
  X_scaled = scaler.fit_transform(X)
  • 归一化(MinMaxScaler):将特征缩放到指定范围(如 [0, 1])。
  • 处理缺失值(SimpleImputer):用均值、中位数等填充缺失数据。
  • 编码分类变量(LabelEncoder, OneHotEncoder):将文本标签转为数值。
  • 特征选择(SelectKBest):选择重要特征以提高模型性能。

3. 模型训练与评估

  • 训练/测试拆分
    使用 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)
  • 交叉验证
    使用 cross_val_score 评估模型稳定性。
  from sklearn.model_selection import cross_val_score
  scores = cross_val_score(model, X, y, cv=5)  # 5 折交叉验证
  • 性能指标
  • 分类:准确率(accuracy_score)、精确率、召回率、F1 分数(classification_report)。
  • 回归:均方误差(mean_squared_error)、R² 分数。
  • 聚类:轮廓系数(silhouette_score)。

4. 管道(Pipeline)

Pipeline 将数据预处理和模型训练步骤组合,避免数据泄漏并简化工作流。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('classifier', LogisticRegression())
])
pipeline.fit(X_train, y_train)

5. 超参数调优

使用 GridSearchCVRandomizedSearchCV 优化模型参数。

from sklearn.model_selection import GridSearchCV
param_grid = {'classifier__C': [0.1, 1, 10]}
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(X_train, y_train)
print(grid_search.best_params_)

6. 常用模型

  • 分类:LogisticRegression, RandomForestClassifier, SVC。
  • 回归:LinearRegression, Ridge, Lasso。
  • 聚类:KMeans, DBSCAN。
  • 降维:PCA, TSNE。

7. 统一的工作流程

  1. 加载数据(load_iris() 或 Pandas)。
  2. 预处理数据(标准化、编码等)。
  3. 拆分训练/测试集(train_test_split)。
  4. 选择模型并训练(fit)。
  5. 预测(predict)并评估(accuracy_score 或其他指标)。
  6. 调优参数(GridSearchCV)或使用 Pipeline 优化流程。

8. 关键特点

  • 一致性:所有功能遵循统一的 API 设计,易于学习和使用。
  • 模块化:支持模块化组合(如 Pipeline、FeatureUnion)。
  • 生态兼容:与 NumPy、Pandas、Matplotlib 无缝集成。
  • 社区支持:活跃的社区,丰富的文档和示例(https://scikit-learn.org/stable/)。

9. 快速示例

使用鸢尾花数据集进行分类:

from sklearn.datasets import load_iris
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

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

# 预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

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

# 训练模型
model = LogisticRegression(random_state=42)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred):.2f}")

10. 注意事项

  • 数据质量:确保数据无缺失值、无异常值。
  • 过拟合:使用交叉验证、正则化或简单模型防止过拟合。
  • 计算效率:中小规模数据表现优异,大数据集可考虑增量学习算法(如 SGDClassifier)。

如果需要深入某个概念(如 Pipeline 的高级用法或特定模型的细节),请告诉我,我可以提供更详细的解释或代码!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注