Scikit-Learn快速入门

目录

  • 一、sklearn的六大功能模块
  • [二、User Guide](#二、User Guide)
  • 三、API
  • 四、Scikit-Learn常用功能介绍
    • [4.1 数据集读取](#4.1 数据集读取)
      • [4.1.1 鸢尾花数据的读取](#4.1.1 鸢尾花数据的读取)
    • [4.2 数据集切分方法](#4.2 数据集切分方法)
    • [4.3 数据标准化与归一化](#4.3 数据标准化与归一化)
      • [4.3.1 标准化](#4.3.1 标准化)
      • [4.3.2 归一化](#4.3.2 归一化)
    • [4.4 构建机器学习流](#4.4 构建机器学习流)
    • [4.5 模型保存](#4.5 模型保存)

Scikit-learn 是一个用于机器学习的开源 Python 库,基于 SciPy(Scientific Python)构建,提供了各种简单易用且高效的工具来解决数据分析和建模问题。它被广泛应用于数据科学、人工智能和研究领域。可以从这个网址 Scikit-learn官网登陆Scikit-Learn项目官网。

一、sklearn的六大功能模块

从建模功能上进行区分,sklearn将所有的评估器和函数功能分为六大类,分别是分类模型 (Classification)、回归模型 (Regression)、聚类模型 (Clustering)、降维方法 (Dimensionality reduction)、模型选择 (Model selection)和数据预处理 六大类。

其中分类模型、回归模型和聚类模型是机器学习内主流的三大类模型,分类和回归模型是有监督学习、聚类模型属于无监督学习范畴。降维方法、模型选择方法和数据预处理方法,则多为辅助建模的相关方法。这六个功能模块的划分其实是存在很多交叉的,对于很多模型来说,既能处理分类问题、同时也能处理回归问题,而很多聚类算法同时也可以作为降维方法实用。

二、User Guide

Scikit-learn 的 User Guide 是一份详细的官方文档,专注于解释库中的功能和用法,其中包含了sklearn的所有内容按照使用顺序进行的排序。

  • 1、Supervised Learning(监督学习)

含义:用于解决有标签的数据问题,包括分类和回归任务。分类:预测离散类别(如"猫"或"狗")。回归:预测连续值(如房价、温度)。

示例算法:逻辑回归、决策树、随机森林、支持向量机(SVM);线性回归、Lasso、Ridge。

  • 2、Unsupervised Learning(无监督学习)

含义:处理无标签的数据,目的是发现数据中的隐藏模式。聚类:将数据分组(如客户分群)。降维:减少数据特征数量(如 PCA)。

示例算法:K-Means、DBSCAN、层次聚类、主成分分析(PCA)。

  • 3、Model Selection and Evaluation(模型选择与评估)

含义:提供工具来评估模型性能并优化参数。如:交叉验证(Cross-validation):分割数据进行模型评估。性能指标:计算准确率、精确率、召回率、F1 分数等。超参数调优:如网格搜索(GridSearchCV)。

典型应用:确定最佳模型和参数。

  • 4、Inspection(模型解释)

含义:帮助用户理解模型的行为和决策。特征重要性:确定哪些特征对模型决策贡献最大。部分依赖图:展示单个特征对预测的影响。

目的:提升模型的透明性和可解释性。

  • 5、Visualizations(可视化)

含义:通过图形展示数据分布、模型性能和预测效果。分类报告的可视化:混淆矩阵、ROC 曲线。数据分布和聚类结果的可视化。

典型应用:Matplotlib、Seaborn 的集成。

  • 6、Dataset Transformations(数据集变换)

含义:提供数据预处理和特征工程工具。数据清理:处理缺失值、异常值。数据缩放:如标准化和归一化。特征提取和选择:如 One-Hot 编码、主成分提取。

工具:Pipeline:构建自动化数据处理和模型训练流程。

  • 7、Dataset Loading Utilities(数据集加载工具)

含义:提供加载和生成数据集的工具。内置数据集:如 Iris、Wine、Boston 房价等。数据生成:如合成分类数据、回归数据。文件加载:从 CSV、Excel 等加载数据。

常用的模块:datasets 模块。

  • 8、Computing with Scikit-learn(Scikit-learn 的计算特性)

含义:优化计算性能和可扩展性。并行计算:通过 n_jobs 参数并行处理。内存优化:减少内存占用的工具。大数据支持:处理无法一次加载到内存的数据。

典型应用:加速模型训练和预测。

  • 9、Model Persistence(模型持久化)

含义:提供工具保存和加载训练好的模型。使用 joblib 或 pickle 保存模型。在不同环境下重用模型。

python 复制代码
from joblib import dump, load
dump(model, 'model.joblib')
model = load('model.joblib')
  • 10、Common Pitfalls and Recommended Practices(常见问题与推荐实践)

含义:总结在使用 Scikit-learn 时的注意事项和最佳实践。常见问题:如数据泄露、过拟合。推荐做法:如适当的数据分割、使用交叉验证。

目标:帮助用户避免典型错误并提高模型质量。

  • 11、Dispatching(任务调度)

含义:处理任务分发和优化计算资源使用。动态选择计算方式:如是否使用 GPU 或多线程。更高效地分配系统资源以加速模型计算。

应用场景:高性能计算环境中的模型训练。

  • 12、Choosing the Right Estimator(选择合适的估计器)

含义:指导用户根据任务选择合适的模型或算法。提供分类器和回归器的推荐表。帮助用户根据数据特性和目标找到最佳算法。

  • 13、External Resources, Videos, and Talks(外部资源、视频和演讲)

含义:汇集社区贡献的学习资源。

目的:为用户提供更广泛的学习和应用参考。

三、API

Scikit-learn 的 API 模块是用户快速查找和学习评估器及实用工具的主要途径,通过按功能分类的二级模块和完整的函数文档,用户可以高效使用该库的所有功能。二级模块 是指 Scikit-learn 按功能或算法类型划分的子模块。如:linear_model:包含线性模型(如线性回归),metrics:包含评估指标(如均方误差 MSE),decomposition:降维算法(如 PCA),cluster:聚类算法(如 K-Means)等,每个模块包含了与该功能相关的所有评估器和工具。

模块 功能 示例评估器/函数
linear_model 线性模型:分类与回归 LinearRegression, Ridge
ensemble 集成学习:提升模型性能 RandomForestClassifier
svm 支持向量机 SVC, LinearSVC
cluster 聚类算法:无监督学习 KMeans, DBSCAN
decomposition 降维方法 PCA, KernelPCA
metrics 评估指标 accuracy_score, roc_auc_score
model_selection 模型选择工具 train_test_split, GridSearchCV
preprocessing 数据预处理 StandardScaler, OneHotEncoder
datasets 数据加载和生成工具 load_iris, make_regression
pipeline 构建数据处理和模型训练的流水线 Pipeline, FeatureUnion

四、Scikit-Learn常用功能介绍

4.1 数据集读取

在 Scikit-learn 中,数据集相关功能集中在 datasets 模块 下。通过 API 文档的 datasets 模块,可以全面了解 Scikit-learn 提供的所有数据集及创建数据集的方法 。Scikit-learn 提供了丰富的结构化数据集,例如经典的 鸢尾花数据集、波士顿房价数据集、乳腺癌数据集 等,同时也支持图片数据和文本数据等非结构化数据集 。这些数据集可以通过 load 函数 轻松加载。

此外,Scikit-learn 提供了多种数据生成器,用于创建符合不同分布的数据。通过 make 函数 ,用户可以生成测试评估器性能所需的数据集,类似于自定义的数据生成器。这些工具不仅适用于模型评估,还能帮助用户设计特定实验和算法测试环境。

4.1.1 鸢尾花数据的读取

注意,在默认情况下,数据读取结果的类型是Bunch类型,是一个类似字典类型的对象,而该对象(字典)有如下属性(键值对):

Name Description
data 数据集特征矩阵
target 数据集标签数组
feature_names 各列名称
target_names 各类别名称
frame 当生成对象是DataFrame时,返回完整的DataFrame
python 复制代码
from sklearn.datasets import load_iris
iris_data = load_iris()
iris_data.data[:10],iris_data.target[:10],iris_data.feature_names,iris_data.target_names[:10]

如果想创建DataFrame对象,则可以通过在读取数据集时设置参数as_frame为True来实现。

python 复制代码
iris_dataFrame = load_iris(as_frame=True)
iris_dataFrame.frame

如果希望只返回特征矩阵和标签数组这两个对象,则可以通过在读取数据集时设置参数return_X_y为True来实现。

python 复制代码
X, y = load_iris(return_X_y=True)
X[:10],y[:10]

4.2 数据集切分方法

在 Scikit-learn 中,可以通过调用 train_test_split 函数 来完成数据集的切分。数据集切分的主要目的是为了更科学地评估模型性能,而精准的模型性能评估则是模型选择过程中的关键一步。因此,train_test_split 函数 实际上属于 model_selection 模块,与模型选择和评估功能紧密相关。

python 复制代码
import numpy as np
from sklearn.model_selection import train_test_split
X, y = np.arange(12).reshape((6, 2)), np.array([0, 0, 0, 1, 1, 1])
X,y,train_test_split(X, y, random_state=42) #注意:random_state取值不同,切分结果就会各有不同

stratify参数则是控制训练集和测试集不同类别样本所占比例的参数,若希望切分后的训练集和测试集中0、1两类的比例和原始数据相同(1:1),则可令stratify=y。

python 复制代码
train_test_split(X, y, stratify=y, random_state=42)

4.3 数据标准化与归一化

在 Scikit-learn 中,归一化 包括两大类:标准化 (Standardization) 和 归一化 (Normalization)。这两种方法均属于数据预处理的范畴,广泛用于特征缩放与数据规范化,旨在提高模型训练的效果。相关功能均集中在 Scikit-learn 的 preprocessing 模块 中。

  • 标准化:如 Z-Score 标准化和 0-1 标准化,主要用于调整特征值的分布,使其具有相同的均值和标准差(如 StandardScaler)或缩放到指定范围内(如 MinMaxScaler)。
  • 归一化:特指针对单个样本(即每一行数据),利用其范数对数据进行缩放的过程(如 Normalizer)。

4.3.1 标准化

  • Z-Score标准化

(函数实现)--- 通过preprocessing模块下的scale函数进行快速的Z-Score标准化处理。

python 复制代码
from sklearn import preprocessing
X = np.arange(8).reshape(4,2)
X,preprocessing.scale(X)

(评估器实现)---通过preprocessing模块下的StandardScaler方法。

python 复制代码
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = np.random.rand(8).reshape(4, 2)
X_train, X_test = train_test_split(X)
scaler.fit(X_train)
X,scaler.scale_,scaler.mean_,scaler.var_

以上只保留了训练数据的统计量,但尚未对任何数据进行修改,可以通过评估器中的fit_transform方法来进行数据标准化处理。

python 复制代码
scaler.fit_transform(X_train)
  • 0-1标准化
      和Z-Score标准化类似,0-1标准化也有函数实现和评估器实现两种。
    函数实现:
python 复制代码
preprocessing.minmax_scale(X)
X,preprocessing.minmax_scale(X)

评估器实现:

python 复制代码
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit_transform(X)

注:sklearn中还有针对稀疏矩阵的标准化(MaxAbsScaler)、针对存在异常值点特征矩阵的标准化(RobustScaler)、以及非线性变化的标准化(Non-linear transformation)等方法。

4.3.2 归一化

和标准化不同,sklearn中的归一化特指将单个样本(一行数据)放缩为单位范数(1范数或者2范数为单位范数)的过程,该操作常见于核方法或者衡量样本之间相似性的过程中。

向量x的1-范数为各分量的绝对值之和,基本计算公式为:
∣ ∣ x ∣ ∣ 1 = ∣ x 1 ∣ + ∣ x 2 ∣ + . . . + ∣ x n ∣ ||x||_1 = |x_1|+|x_2|+...+|x_n| ∣∣x∣∣1=∣x1∣+∣x2∣+...+∣xn∣

向量x的2-范数为各分量的平方和再开平方,基本计算公式为:
∣ ∣ x ∣ ∣ 2 = ( ∣ x 1 ∣ 2 + ∣ x 2 ∣ 2 + . . . + ∣ x n ∣ 2 ) ||x||_2=\sqrt{(|x_1|^2+|x_2|^2+...+|x_n|^2)} ∣∣x∣∣2=(∣x1∣2+∣x2∣2+...+∣xn∣2)

sklearn中的Normalization过程,实际上就是将每一行数据视作一个向量,然后用每一行数据去除以该行数据的1-范数或者2-范数。具体除以哪个范数,以preprocessing.normalize函数中输入的norm参数为准。

函数实现:

python 复制代码
preprocessing.normalize(X, norm='l1'),
preprocessing.normalize(X, norm='l2')

评估器实现:

python 复制代码
from sklearn.preprocessing import Normalizer
normlize = Normalizer(norm='l1') #默认是l2
normlize.fit_transform(X)

注:除了标准化和归一化之外,还有一个正则化(Regularization)的概念,所谓正则化,往往指的是通过在损失函数上加入参数的1-范数或者2-范数的过程,该过程能够有效避免模型过拟合。

4.4 构建机器学习流

机器学习流是指将多个机器学习的步骤串联起来,形成一个完整的模型训练和预测流程 。在 Scikit-learn 中,我们可以通过 Pipeline 类 实现这一过程。需要注意的是,Scikit-learn 仅支持将评估器类(如模型、转换器等)串联成机器学习流,而无法直接串联实用函数。最终,经过串联的机器学习流在功能上等价于一个评估器,这也表明 Scikit-learn 评估器接口的一致性。

通过构建机器学习流,我们可以将数据预处理(如归一化)、模型训练(如逻辑回归多分类建模)等步骤串联在一起,同时提前进行数据切分。这种流程化的建模方式帮助我们更高效地执行完整的机器学习建模工作。

python 复制代码
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.datasets import load_iris
iris_data = load_iris()
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
pipe = make_pipeline(StandardScaler(),LogisticRegression(max_iter=1000))
pipe.fit(X_train, y_train)

该过程就相当于两个评估器都进行了训练,然后我们即可使用predict方法,利用pipe对数据集进行预测。

python 复制代码
pipe.predict(X_test),pipe.score(X_train, y_train),pipe.score(X_test, y_test)

4.5 模型保存

在模型构建完成后,我们可以使用 joblib 包 来存储和读取 Scikit-learn 模型。相关功能非常简便:通过 dump 函数 保存模型,将模型序列化到文件中;通过 load 函数读取已保存的模型,并进行反序列化恢复。这样,模型就可以方便地进行持久化存储和后续加载,支持跨会话的使用。

python 复制代码
import joblib
joblib.dump(pipe,'pipe.model')
pipe1 = joblib.load('pipe.model')
pipe1.score(X_train, y_train) #输出:0.9642857142857143
相关推荐
从零开始学习人工智能22 分钟前
安装指南:LLaMA Factory、AutoGPTQ 和 vllm
人工智能·python·深度学习·算法
是小白_鸭24 分钟前
(RAG系列)FastGPT批量添加索引
python·ai·语言模型
蒙娜丽宁27 分钟前
【人工智能】Python中的自动化机器学习(AutoML):如何使用TPOT优化模型选择
人工智能·python·自动化
测试19981 小时前
接口测试之postman的使用
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
jerry2011081 小时前
python之二维几何学习笔记
开发语言·python·算法
无限大.1 小时前
使用Python和FFmpeg批量转换视频为GIF
python·ffmpeg·音视频
潇与上海2 小时前
【Python进阶——分布式计算框架pyspark】
python
Kai HVZ2 小时前
《机器学习》——PCA降维
人工智能·机器学习
jimboRen2 小时前
python http server运行Angular 单页面路由时重定向,解决404问题
python·http·angular.js
两千连弹3 小时前
在PyCharm中使用Anaconda中的虚拟环境
ide·python·pycharm·conda