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是否已成功安装:

import sklearn
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库的正确语法:

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
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数据集:

iris = datasets.load_iris()
X = iris.data
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对数据进行标准化:

scaler = StandardScaler()
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进行特征选择:

from sklearn.feature_selection import SelectKBest, f_classif

# 选择前3个最佳特征
X_train_selected = SelectKBest(score_func=f_classif, k=3).fit_transform(X_train, y_train)
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方法训练选择器并应用选择

    X_train_selected = selector.fit_transform(X_train, y_train)
    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进行训练:

knn = KNeighborsClassifier(n_neighbors=3)
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评估模型性能:

print(confusion_matrix(y_test, y_pred))
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提供了许多其他算法和工具,可以用于更复杂的机器学习任务。你们可以通过阅读官方文档或参加在线课程来学习更多高级功能。

相关推荐

  1. sklearn基础教程

    2024-06-15 11:50:01       10 阅读
  2. sklearn基础教程

    2024-06-15 11:50:01       7 阅读
  3. Sklearn基础教程

    2024-06-15 11:50:01       9 阅读
  4. 机器学习Sklean基础教程

    2024-06-15 11:50:01       9 阅读
  5. 机器学习之sklearn基础教程

    2024-06-15 11:50:01       18 阅读
  6. 机器学习之sklearn基础教程

    2024-06-15 11:50:01       12 阅读
  7. 机器学习之sklearn基础教程

    2024-06-15 11:50:01       9 阅读
  8. 机器学习之sklearn基础教程

    2024-06-15 11:50:01       15 阅读
  9. 机器学习之sklearn基础教程

    2024-06-15 11:50:01       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 11:50:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 11:50:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 11:50:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 11:50:01       18 阅读

热门阅读

  1. 网络安全突发事件应急预案

    2024-06-15 11:50:01       11 阅读
  2. 智能合约中权限管理不当

    2024-06-15 11:50:01       8 阅读
  3. Git教程II

    2024-06-15 11:50:01       11 阅读
  4. const与static区别

    2024-06-15 11:50:01       8 阅读
  5. 【C++】开源项目收集

    2024-06-15 11:50:01       8 阅读
  6. Synchronized和ReentranLock区别

    2024-06-15 11:50:01       8 阅读