• Sklearn基础教程


            scikit-learn是一个Python库,它提供了一系列的机器学习算法和工具。这个教程旨在介绍scikit-learn的基础知识,并通过例子帮助您理解如何使用它进行简单的分类任务。

    目录

    一、安装scikit-learn

    二、导入scikit-learn

    三、加载数据集

    四、数据预处理

    五、划分数据集

    六、特征选择

    七、训练模型

    八、预测

    九、评估模型


    一、安装scikit-learn

    首先,你需要安装scikit-learn。如果你还没有安装,可以使用以下方法进行安装:

    1. 打开命令行界面(在Windows上是命令提示符或PowerShell,在macOS和Linux上是终端)。

    2. 输入以下命令并按回车键:

      pip install scikit-learn
      

      或者如果你使用的是Python 3,那可以使用以下命令:

      pip3 install scikit-learn
      

      如果你在使用虚拟环境,确保你激活了相应的环境,然后再执行安装命令。

    安装完成后,你可以通过以下方式来确认scikit-learn是否已成功安装:

    1. import sklearn
    2. print(sklearn.__version__)

    如果打印出的版本号显示scikit-learn已安装,那么你就可以开始使用它了。

    如果你遇到权限问题或者网络问题,无法直接通过pip安装,你可能需要使用sudo(在Linux和macOS上)或python -m pip(在Windows上)来获取更高的权限:

    sudo pip install scikit-learn
    

    或者

    python -m pip install scikit-learn
    

            但是需要注意,使用sudo可能会对你的系统安全造成风险,因为它允许任何用户以超级用户权限安装软件。如果你不熟悉使用sudo,建议你使用python -m pip来避免这个问题。

    二、导入scikit-learn

            在Python中导入scikit-learn库,你需要使用import语句。以下是如何导入scikit-learn库的正确语法:

    1. from sklearn import datasets
    2. from sklearn.model_selection import train_test_split
    3. from sklearn.preprocessing import StandardScaler
    4. from sklearn.neighbors import KNeighborsClassifier
    5. from sklearn.metrics import classification_report, confusion_matrix

    这段代码将scikit-learn库中的几个主要模块导入到你的Python脚本中。每个模块都有其特定的功能:

    • datasets:提供了一些标准的数据集,如Iris、Digits等。
    • model_selection:包含了一些用于数据预处理的函数,如分割数据集为训练集和测试集。
    • preprocessing:包含了一些数据预处理的工具,如标准化、归一化等。
    • neighbors:包含了一些基于邻近的分类和回归算法,如K近邻(K-Nearest Neighbors)。
    • metrics:提供了一些评估模型性能的指标,如分类报告和混淆矩阵。

            当你导入这些模块后,你可以使用它们提供的函数和类来执行机器学习任务。例如,使用datasets.load_iris()加载Iris数据集,使用train_test_split分割数据集,使用StandardScaler进行数据标准化,使用KNeighborsClassifier进行K近邻分类,使用classification_reportconfusion_matrix来评估模型的性能。

    三、加载数据集

            scikit-learn提供了多种数据集,你可以直接使用它们来练习。例如,使用Iris数据集:

    1. iris = datasets.load_iris()
    2. X = iris.data
    3. y = iris.target
    1. datasets.load_iris()函数

      • datasets.load_iris()是scikit-learn提供的函数,用于加载Iris数据集。
      • 调用这个函数会返回一个字典,字典中包含了Iris数据集的多个组成部分,如特征数据、目标变量、特征名称、目标名称和数据集的描述。
    2. iris.data

      • iris.data是字典中的一个键,它指向特征数据。这是一个NumPy数组,其中包含了Iris数据集的所有特征。
      • 特征数据通常是一个二维数组,其中行代表不同的样本,列代表不同的特征。
    3. iris.target

      • iris.target是字典中的另一个键,它指向目标变量。这也是一个NumPy数组,其中包含了Iris数据集的所有目标值。
      • 目标变量是一个分类变量,通常表示为整数,对应于鸢尾花的种类。
    4. Xy

      • 在代码中,我们分别将iris.datairis.target赋值给变量Xy
      • 这样,我们就可以使用X来表示特征数据,使用y来表示目标变量,它们分别是Iris数据集的特征和类别。

    四、数据预处理

            为了提高模型的性能,通常需要对数据进行预处理。例如,可以使用StandardScaler对数据进行标准化:

    1. scaler = StandardScaler()
    2. X_scaled = scaler.fit_transform(X)

             在scikit-learn中,StandardScaler是一个用于特征缩放的类。特征缩放是一种常见的数据预处理步骤,它可以将特征缩放到一个统一的尺度,从而提高模型的性能。标准缩放是一种特征缩放方法,它将每个特征缩放到具有零均值和单位方差。

            以下是如何使用StandardScaler对数据进行缩放的步骤:

    1. 创建StandardScaler对象

      scaler = StandardScaler()
      

      这一步创建了一个StandardScaler对象,它没有对数据进行任何缩放。

    2. 使用fit_transform方法

      X_scaled = scaler.fit_transform(X)
      

      fit_transformStandardScaler类的一个方法,它首先使用数据集X来计算每个特征的均值和标准差,然后使用这些统计数据对X进行缩放。

      这个过程可以分为两个主要步骤:

      • 拟合(Fitting):计算数据集X中每个特征的均值和标准差。
      • 转换(Transforming):使用计算出的均值和标准差对数据集X中的每个特征进行缩放。

      fit_transform方法返回一个新的数据集X_scaled,它包含了缩放后的特征。

    五、划分数据集

    将数据集分为训练集和测试集:

    X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
    

            在scikit-learn中,train_test_split是一个用于将数据集分为训练集和测试集的函数。这个函数接受一个特征数据集和一个目标数据集,然后根据给定的比例将它们分为训练集和测试集。

            以下是如何使用train_test_split函数将数据分为训练集和测试集的步骤:

    1. 导入train_test_split函数

      from sklearn.model_selection import train_test_split
      

      这行代码导入了train_test_split函数,它位于sklearn.model_selection模块中。

    2. 调用train_test_split函数

      X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
      

      这行代码调用了train_test_split函数,并传入以下参数:

      • X_scaled:已经进行标准化处理的特征数据。
      • y:目标数据。
      • test_size:测试集的比例。在这个例子中,test_size设置为0.2,意味着20%的数据将被用作测试集,而剩下的80%将被用作训练集。
      • random_state:一个整数,用于设置随机数生成器的种子,以确保每次运行代码时,数据分割的结果是可复现的。在这个例子中,random_state被设置为42,这是一个常用的值,用于确保结果的可复现性。

      train_test_split函数返回四个变量:

      • X_train:包含训练集特征的NumPy数组。
      • X_test:包含测试集特征的NumPy数组。
      • y_train:包含训练集目标变量的NumPy数组。
      • y_test:包含测试集目标变量的NumPy数组。

      这些变量被分别赋值给X_trainX_testy_trainy_test,以便后续使用。

    六、特征选择

            在某些情况下,你可能希望从特征中选择最重要的特征,以减少模型的复杂度并提高性能。可以使用SelectKBestSelectPercentile进行特征选择:

    1. from sklearn.feature_selection import SelectKBest, f_classif
    2. # 选择前3个最佳特征
    3. X_train_selected = SelectKBest(score_func=f_classif, k=3).fit_transform(X_train, y_train)
    4. X_test_selected = SelectKBest(score_func=f_classif, k=3).fit_transform(X_test, y_test)

            在scikit-learn中,特征选择是一个重要的步骤,它可以帮助我们识别哪些特征对于构建模型最为重要。SelectKBest是一个特征选择类,它允许我们根据某些统计量选择前k个最佳特征。f_classif是一个评分函数,用于评估特征的重要性。

            以下是如何使用SelectKBest类和f_classif评分函数选择前k个最佳特征的步骤:

    1. 导入SelectKBestf_classif

      from sklearn.feature_selection import SelectKBest, f_classif
      

      这行代码导入了SelectKBest类和f_classif评分函数,它们都位于sklearn.feature_selection模块中。

    2. 创建SelectKBest对象并指定评分函数和要选择的特征数量

      selector = SelectKBest(score_func=f_classif, k=3)
      

      这行代码创建了一个SelectKBest对象,并指定了评分函数f_classif和要选择的特征数量k。在这个例子中,选择的是前3个最佳特征。

    3. 使用fit_transform方法训练选择器并应用选择

      1. X_train_selected = selector.fit_transform(X_train, y_train)
      2. X_test_selected = selector.transform(X_test)

      这行代码使用fit_transform方法训练选择器,并应用选择来选择前k个最佳特征。fit_transform方法首先计算每个特征的评分,然后选择评分最高的k个特征。

      fit_transform方法返回一个新的特征数据集,其中只包含了前k个最佳特征。这个数据集被存储在变量X_train_selectedX_test_selected中。

      请注意,fit_transform方法不需要目标变量y_trainy_test,因为f_classif评分函数是基于特征的统计量,而不是基于目标变量的。

    在实际应用中,特征选择可以帮助我们减少特征的数量,从而简化模型并提高模型的性能。

    七、训练模型

            使用KNeighborsClassifier进行训练:

    1. knn = KNeighborsClassifier(n_neighbors=3)
    2. knn.fit(X_train, y_train)

            在scikit-learn中,KNeighborsClassifier是一个用于进行分类的算法,它是基于k近邻(k-Nearest Neighbors)算法的。k近邻算法是一种简单的监督学习算法,它通过计算样本之间的距离来找到最接近的k个样本,并基于这k个样本的类别来预测新样本的类别。

            以下是如何使用KNeighborsClassifier进行分类的步骤:

    1. 创建KNeighborsClassifier对象并指定邻居数量

      knn = KNeighborsClassifier(n_neighbors=3)
      

      这行代码创建了一个KNeighborsClassifier对象,并指定了邻居的数量n_neighbors。在这个例子中,我们指定了3个邻居。

    2. 使用fit方法训练模型

      knn.fit(X_train, y_train)
      

      这行代码调用了fit方法,它使用训练集的特征X_train和目标变量y_train来训练模型。fit方法会计算训练集中每个样本的k个最近邻居,并使用这些邻居的类别来训练模型。

      训练完成后,模型knn就准备好了,可以用来预测新数据的类别。

    八、预测

            使用训练好的模型进行预测:

    y_pred = knn.predict(X_test)
    

            在scikit-learn中,predict方法是模型类的一个常用方法,用于根据训练好的模型预测新数据的类别或值。

            以下是如何使用KNeighborsClassifier进行预测的步骤:

    1. 创建KNeighborsClassifier对象并指定邻居数量

      knn = KNeighborsClassifier(n_neighbors=3)
      

      这行代码创建了一个KNeighborsClassifier对象,并指定了邻居的数量n_neighbors。在这个例子中,我们指定了3个邻居。

    2. 使用fit方法训练模型

      knn.fit(X_train, y_train)
      

      这行代码调用了fit方法,它使用训练集的特征X_train和目标变量y_train来训练模型。

    3. 使用predict方法进行预测

      y_pred = knn.predict(X_test)
      

      这行代码调用了predict方法,它使用测试集的特征X_test来预测目标变量的值。predict方法返回一个包含预测结果的NumPy数组。

      在这个例子中,y_pred是一个NumPy数组,其中包含了模型对测试集X_test中每个样本的预测类别。

    九、评估模型

            使用classification_report和confusion_matrix评估模型性能:

    1. print(confusion_matrix(y_test, y_pred))
    2. print(classification_report(y_test, y_pred))

            在scikit-learn中,confusion_matrixclassification_report是两个常用的评估函数,用于评估分类模型的性能。

    1. confusion_matrix: confusion_matrix函数返回一个混淆矩阵,它是一个二维数组,用于显示模型预测的结果与实际结果之间的对比。混淆矩阵的每个单元格表示某个类别的预测数量。

      print(confusion_matrix(y_test, y_pred))
      

      这行代码将打印出混淆矩阵。

              混淆矩阵的行表示实际类别,列表示预测类别。例如,如果模型正确地将类别1的样本预测为类别1,那么混淆矩阵的第一个单元格将包含一个值。如果模型错误地将类别1的样本预测为类别2,那么混淆矩阵的第一个单元格将包含一个值,第二个单元格将增加一个值。

    2. classification_report: classification_report函数返回一个包含多个分类指标的报告,如精确度、召回率、F1分数等。这些指标有助于全面评估模型的性能。

      print(classification_report(y_test, y_pred))
      

      这行代码将打印出分类报告。

      分类报告通常包括以下几个指标:

      • 精确度(Precision):对于每个类别,精确度是预测为该类别的样本中实际属于该类别的比例。
      • 召回率(Recall):对于每个类别,召回率是实际属于该类别的样本中被预测为该类别的比例。
      • F1分数(F1 Score):F1分数是精确度和召回率的调和平均值,它提供了精确度和召回率的平衡度量。
      • 支持(Support):每个类别的实际样本数量。

            这篇文章简单的展示了如何使用scikit-learn进行简单的分类任务。scikit-learn提供了许多其他算法和工具,可以用于更复杂的机器学习任务。你们可以通过阅读官方文档或参加在线课程来学习更多高级功能。

  • 相关阅读:
    建模杂谈系列179 博弈推演模型探索
    不让selenium自动关闭浏览器页面(闪崩)[vscode +edge]
    mysql update inner join
    Powershell命令行设置代理
    关于Qt5中QListWidgetItem不显示的问题
    AI与传统数据库 - ChatGPT风过之后 | 从Duet AI说开来
    针对应用程序依赖库漏洞的攻击
    Jetson Nano 部署(1):YOLOv5 目标检测实战介绍
    描述一下Java中的RMI(远程方法调用)
    怎么把图片转换成ico图标文件?
  • 原文地址:https://blog.csdn.net/weixin_64255870/article/details/139629283