第一部分:scikit-learn
全面概述
1.1 什么是 scikit-learn
?
scikit-learn
(简称 sklearn
)是一个基于 Python 的开源机器学习库,广泛用于数据分析、建模和预测。它建立在 NumPy、SciPy 和 Matplotlib 之上,提供了从数据预处理到模型评估的完整工具链。其核心特点包括:
- 统一 API:几乎所有工具和模型都遵循相同的接口(如
fit
、transform
、predict
),极大降低了学习曲线。 - 模块化设计:分为预处理、特征工程、监督学习、无监督学习、模型选择等模块。
- 高效性:底层使用 C 和 Cython 优化,适合中小规模数据集。
- 开源性:BSD 许可证,社区活跃,文档详尽(https://scikit-learn.org/stable/)。
1.2 核心功能
scikit-learn
的功能覆盖了机器学习工作流的各个阶段:
- 数据预处理:清洗、标准化、编码。
- 特征工程:特征选择、提取、降维。
- 监督学习:分类、回归。
- 无监督学习:聚类、降维、异常检测。
- 模型选择:交叉验证、超参数调优。
- 管道与组合:整合工作流。
- 评估与可视化:性能指标、结果分析。
1.3 安装与环境准备
安装 scikit-learn
及其依赖:
# 使用 pip
pip install scikit-learn numpy pandas matplotlib
# 使用 conda
conda install scikit-learn
验证安装:
import sklearn
print(sklearn.__version__) # 截至2023年,最新为1.3.x
推荐环境:Python 3.8+,Jupyter Notebook 或 VS Code。
第二部分:scikit-learn
的统一 API 设计
scikit-learn
的最大优势是其一致的 API 设计,无论是预处理工具、特征选择器还是模型,调用方式高度相似。这种设计让用户只需掌握少数几个核心方法,就能操作几乎所有功能。
2.1 核心方法
以下是 scikit-learn
工具和模型的通用方法:
- 初始化:
model = ClassName(params)
,创建对象并设置参数。 - 训练/拟合:
model.fit(X, y)
,用数据训练模型(监督学习)或拟合数据(无监督学习)。 - 预测/转换:
- 监督学习:
model.predict(X)
(分类/回归预测)。 - 预处理/特征提取:
model.transform(X)
或model.fit_transform(X)
。
- 监督学习:
- 评估:
model.score(X, y)
,返回模型的默认评估指标(如分类的准确率、回归的 R²)。 - 获取属性:如
model.coef_
(线性模型的权重)、model.feature_importances_
(树模型的特征重要性)。
2.2 API 一致性的体现
以下是不同类型工具的调用示例,展示其相似性:
示例 1:数据预处理(StandardScaler
)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler() # 初始化
scaler.fit(X_train) # 拟合,计算均值和方差
X_scaled = scaler.transform(X_train) # 转换
# 或者一步完成:X_scaled = scaler.fit_transform(X_train)
示例 2:特征提取(PCA
)
from sklearn.decomposition import PCA
pca = PCA(n_components=2) # 初始化
pca.fit(X_train) # 拟合,计算主成分
X_pca = pca.transform(X_train) # 转换
# 或者:X_pca = pca.fit_transform(X_train)
示例 3:监督学习(LogisticRegression
)
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression() # 初始化
clf.fit(X_train, y_train) # 训练
y_pred = clf.predict(X_test) # 预测
score = clf.score(X_test, y_test) # 评估
示例 4:无监督学习(KMeans
)
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3) # 初始化
kmeans.fit(X_train) # 拟合,计算簇中心
labels = kmeans.predict(X_train) # 预测簇标签
总结:
- 相同点:都使用
fit
学习数据特性,transform
或predict
应用于新数据。 - 差异点:
- 预处理和特征提取用
transform
输出转换后的数据。 - 监督学习用
predict
输出标签或值。 - 无监督学习(如聚类)的
predict
输出簇标签。
- 预处理和特征提取用
- 注意:
fit
通常只在训练数据上调用,transform
或predict
可用于训练或测试数据。
2.3 一致性带来的好处
- 代码复用:相同的调用模式减少学习成本。
- 模块组合:可以通过
Pipeline
无缝整合多个步骤。 - 调试方便:统一接口便于排查问题。
第三部分:scikit-learn
工具与模型详解
以下按功能模块逐一讲解,并比较工具/模型的调用方式,突出相同点和差异点。
3.1 数据预处理(sklearn.preprocessing
)
预处理是机器学习的第一步,scikit-learn
提供多种工具,调用方式高度一致。
3.1.1 标准化和归一化
- StandardScaler:将特征缩放到均值为 0,方差为 1。
- MinMaxScaler:将特征缩放到指定范围(如 [0, 1])。
- RobustScaler:对异常值更鲁棒,使用中位数和四分位距。
调用示例:
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler1 = StandardScaler()
scaler2 = MinMaxScaler(feature_range=(0,<