Scikit-Learn是什么,Scikit-Learn库快速入门(附带实例)
在数据科学的领域中,机器学习无疑是重要的组成部分。机器学习可使用户从数据中提取有用的信息和模式,并利用这些信息和模式进行预测和决策。
Python 社区为用户提供了丰富的机器学习库,这些库功能强大,适用于不同的任务和应用场景。本节重点介绍名为 Scikit-Learn 的机器学习库。
Scikit-Learn 是开源的机器学习库,提供了很多有效和广泛使用的机器学习算法。Scikit-Learn 包括清晰、统一、简洁的 API,以及丰富的在线文档和社区支持,这些特性使 Scikit-Learn 成为数据分析和建立机器学习模型的首选库之一。
在 Scikit-Learn 中,每种机器学习算法都被实现为一个可估计(Estimator)的对象。这些对象都包含 fit() 方法和 predict() 方法,fit() 方法用于训练模型,predict() 方法用于进行预测。
Scikit-Learn 为用户提供了大量的机器学习算法,这些算法大致可以分为如下类别。
监督学习:包括回归(线性回归、决策树回归、支持向量回归)、分类(逻辑回归、k-近邻算法、决策树分类、支持向量机)等算法;
无监督学习:包括聚类(k-means、谱聚类、层次聚类)、降维(主成分分析、非负矩阵分解、t-SNE)等算法;
模型选择和评估:包括交叉验证、网格搜索、模型持久化等算法;
预处理:包括特征提取、特征选择、数据缩放、数据编码等算法。
用户可在命令行中运行以下命令进行安装:
如果用户使用 Anaconda Python 发行版,则可使用 conda 命令安装:
线性回归是一种监督学习算法,该算法试图建立输入(特征)和输出(目标变量)之间的线性关系。在二维空间中,这个关系可以被表示为一条直线,但在更高维度的空间中,这个关系是一个超平面。
线性回归的目标是对于给定的数据,找到一组权重(或系数)和偏置(或截距),使通过这些权重和偏置计算得到的预测值与真实值的差异总和尽可能小,这里的差异通常是指平方差异。这种方法被称为最小二乘法。
具体来说,对单变量线性回归来说,只有一个特征,模型的形式为:
对于多变量线性回归,会有多个特征,模型的形式为:
在训练过程中,线性回归模型会通过如梯度下降的优化算法更新权重和偏置,使预测值与真实值的差异尽可能小。这个过程会迭代进行,直到模型的性能达到令人满意的程度或达到预设的迭代次数为止。
在预测阶段,模型会使用训练过程中学习到的权重和偏置,通过上述的线性计算公式计算预测值。
线性回归的一个主要优点是解释性强,用户可以直观地理解每个特征对预测结果的影响。然而,线性回归的主要限制是假设特征和目标变量之间的关系是线性的,对于非线性关系,该算法可能无法提供好的预测性能。在这种情况下,可能需要使用其他模型,如决策树回归、随机森林或神经网络。
下面通过一段代码,说明线性回归的使用方法:
下面对上述代码进行讲解:
此外,Scikit-Learn 还提供了很多用于评估模型性能的函数,如 mean_squared_error()、accuracy_score()、roc_auc_score() 等。
例如,用户可使用 mean_squared_error() 函数计算模型的均方误差(Mean Squared Error,MSE):
均方误差是真实值和预测值之差的平方平均值,表示预测误差的平方期望,可以衡量预测值和真实值之间的偏离程度。均方误差越小,说明模型的预测性能越好。
Python 社区为用户提供了丰富的机器学习库,这些库功能强大,适用于不同的任务和应用场景。本节重点介绍名为 Scikit-Learn 的机器学习库。
Scikit-Learn库简介
Scikit-Learn 是 Python 中最流行的通用机器学习库之一,提供了大量的机器学习算法,包括分类、回归、聚类等,并提供了处理数据、评估模型等全套工具。Scikit-Learn 是开源的机器学习库,提供了很多有效和广泛使用的机器学习算法。Scikit-Learn 包括清晰、统一、简洁的 API,以及丰富的在线文档和社区支持,这些特性使 Scikit-Learn 成为数据分析和建立机器学习模型的首选库之一。
在 Scikit-Learn 中,每种机器学习算法都被实现为一个可估计(Estimator)的对象。这些对象都包含 fit() 方法和 predict() 方法,fit() 方法用于训练模型,predict() 方法用于进行预测。
Scikit-Learn 为用户提供了大量的机器学习算法,这些算法大致可以分为如下类别。
监督学习:包括回归(线性回归、决策树回归、支持向量回归)、分类(逻辑回归、k-近邻算法、决策树分类、支持向量机)等算法;
无监督学习:包括聚类(k-means、谱聚类、层次聚类)、降维(主成分分析、非负矩阵分解、t-SNE)等算法;
模型选择和评估:包括交叉验证、网格搜索、模型持久化等算法;
预处理:包括特征提取、特征选择、数据缩放、数据编码等算法。
安装Scikit-Learn
Python 环境中默认没有安装 Scikit-Learn,如果要安装 Scikit-Learn,用户可以使用 pip(Python 的包管理器)进行安装。用户可在命令行中运行以下命令进行安装:
pip install scikit-learn
如果用户使用 Anaconda Python 发行版,则可使用 conda 命令安装:
conda install scikit-learn
Scikit-Learn快速入门
下面以线性回归为例,介绍 Scikit-Learn 的使用方法。线性回归是一种监督学习算法,该算法试图建立输入(特征)和输出(目标变量)之间的线性关系。在二维空间中,这个关系可以被表示为一条直线,但在更高维度的空间中,这个关系是一个超平面。
线性回归的目标是对于给定的数据,找到一组权重(或系数)和偏置(或截距),使通过这些权重和偏置计算得到的预测值与真实值的差异总和尽可能小,这里的差异通常是指平方差异。这种方法被称为最小二乘法。
具体来说,对单变量线性回归来说,只有一个特征,模型的形式为:
y = ax+b式中,y 是目标变量;x 是特征;a 是权重;b 是偏置。
对于多变量线性回归,会有多个特征,模型的形式为:
y = a1x1 + a2x2 + ... + anxn + b
在训练过程中,线性回归模型会通过如梯度下降的优化算法更新权重和偏置,使预测值与真实值的差异尽可能小。这个过程会迭代进行,直到模型的性能达到令人满意的程度或达到预设的迭代次数为止。
在预测阶段,模型会使用训练过程中学习到的权重和偏置,通过上述的线性计算公式计算预测值。
线性回归的一个主要优点是解释性强,用户可以直观地理解每个特征对预测结果的影响。然而,线性回归的主要限制是假设特征和目标变量之间的关系是线性的,对于非线性关系,该算法可能无法提供好的预测性能。在这种情况下,可能需要使用其他模型,如决策树回归、随机森林或神经网络。
下面通过一段代码,说明线性回归的使用方法:
import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression # 创建一个模拟数据集 np.random.seed(0) X = np.random.rand(100,1) # 有100个样本,每个样本有1个特征 y = 2 + 3 * X.squeeze() + np.random.randn(100) # 目标变量是特征的线性组合加上噪声 # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建模型对象 model = LinearRegression() # 使用训练数据拟合模型 model.fit(X_train, y_train) # 使用模型进行预测 predictions = model.predict(X_test) # 输出预测结果 print(predictions)上述代码的执行结果为:
[4.27026594 2.51048666 5.1166954 4.20518857 4.19365052 4.238518 3.58178783 3.15409484 4.56609108 3.84208888 4.52565055 2.99485301 4.00909327 3.90056792 3.15584075 3.46905103 3.04925149 2.56458823 3.89940734 4.51395779]这段代码首先创建一个包含 100 个样本的模拟数据集,每个样本都有一个特征。目标变量 y是特征的线性组合加上噪声的结果。随后,数据集分割为训练集和测试集,使用训练集拟合模型,并使用模型对测试集进行预测,并输出预测结果。
下面对上述代码进行讲解:
- import numpy as np:导入 Numpy 库,用于处理数值型数据;
- from sklearn.model_selection import train_test_split:导入 train_test_split() 函数,用于将数据集划分为训练集和测试集;
- from sklearn.linear_model import LinearRegression:导入 LinearRegression 类,用于进行线性回归模型的训练;
- np.random.seed(0):设置随机数生成的种子为 0,这样可以保证每次运行代码时,生成的随机数都一样;
- X=np.random.rand(100, 1):生成一个形状为 (100, 1) 的数组,数组的元素是在 [0, 1) 均匀分布的随机数。这里的 100 代表样本数量,1 代表每个样本的特征数量;
- y=2+3*X.squeeze()+np.random.randn(100):根据线性关系生成目标变量。X.squeeze() 将 X 的形状由 (100, 1)变为 (100, ),np.random.randn(100) 生成 100 个符合标准正态分布的随机数,并将这些随机数作为噪声;
- X_train,X_test,y_train,y_test=train_test_split(X, y, test_size=0.2, random_state=42):使用 train_test_split() 将数据集划分为训练集和测试集,测试集的比例为 0.2,随机数生成的种子为 42;
- model=LinearRegression():创建一个模型的实例;
- model.fit(X_train, y_train):使用训练集的特征和目标变量训练线性回归模型。在这个过程中,模型会学习最佳的权重和偏置;
- predictions=model.predict(X_test):使用训练好的模型对测试集的特征进行预测,并得到预测结果。
此外,Scikit-Learn 还提供了很多用于评估模型性能的函数,如 mean_squared_error()、accuracy_score()、roc_auc_score() 等。
例如,用户可使用 mean_squared_error() 函数计算模型的均方误差(Mean Squared Error,MSE):
from sklearn.metrics import mean_squared_error # 计算均方误差 mse = mean_squared_error(y_test, predictions) print('均方误差为: ', mse)上述代码的执行结果为:
预测结果: [4.27026594 2.51048666 5.1166954 4.20518857 4.19365052 4.238518 3.58178783 3.15409484 4.56609108 3.84208888 4.52565055 2.99485301 4.00909327 3.90056792 3.15584075 3.46905103 3.04925149 2.56458823 3.89940734 4.51395779] 均方误差为: 0.9177532469714288在上述代码中:
- from sklearn.metrics import mean_squared_error 从 metrics 模块导入 mean_squared_error() 函数。mean_squared_error() 函数用于计算均方误差,是评估模型性能的常用指标;
- mse=mean_squared_error(y_test, predictions) 调用 mean_squared_error() 函数,输入的参数是真实值 y_test 和模型预测值 predictions,函数返回两者之间的均方误差,返回的结果保存在变量 mse 中;
- print('均方误差为:', mse) 打印出计算得到的均方误差。
均方误差是真实值和预测值之差的平方平均值,表示预测误差的平方期望,可以衡量预测值和真实值之间的偏离程度。均方误差越小,说明模型的预测性能越好。