[机器学习-03] Scikit-Learn机器学习工具包学习指南:主要功能与用法解析

🎩 欢迎来到技术探索的奇幻世界👨‍💻

📜 个人主页:@一伦明悦-CSDN博客

✍🏻 作者简介: C++软件开发、Python机器学习爱好者

🗣️ 互动与支持:💬评论      👍🏻点赞      📂收藏     👀关注+

如果文章有所帮助,欢迎留下您宝贵的评论,点赞加收藏支持我,点击关注,一起进步!


目录

前言

正文

01-Scikit-Learn简介

 02-Sklearn实现有监督学习

 03-Sklearn实现无监督学习

 04-Sklearn实现模型选择与评估

05-Sklearn实现基于排列的特征重要性

 06-Sklearn实现带有可视化API的ROC曲线

 07-Sklearn实现数据集转换

总结


前言

        Scikit-Learn(也称为sklearn)是一个用于机器学习的Python库,提供了丰富的工具和算法,用于数据预处理、模型选择、评估和部署。Scikit-Learn是一个开源的机器学习库,它支持有监督和无监督的学习。它还提供了用于模型拟合,以及许多其他实用程序的各种工具。

        下面链接为scikit-learn工具包的中文社区,里面包含了该工具包可以实现的各种功能,并给出了实例进行分析使用过程,通过这里的学习可以更快的掌握工具包的使用方法,非常适用于机器学习初始学习者。

scikit-learn中文社区icon-default.png?t=N7T8https://scikit-learn.org.cn/

         附上Scikit-Learn工具包的所有API链接:

  • sklearn.base:基类和实用程序函数icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.base%EF%BC%9A%E5%9F%BA%E7%B1%BB%E5%92%8C%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%87%BD%E6%95%B0
  • sklearn.calibration:概率校准icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.calibration%EF%BC%9A%E6%A6%82%E7%8E%87%E6%A0%A1%E5%87%86
  • sklearn.cluster:聚类icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.cluster%EF%BC%9A%E8%81%9A%E7%B1%BB
  • sklearn.compose:复合估计器icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.compose%EF%BC%9A%E5%A4%8D%E5%90%88%E4%BC%B0%E8%AE%A1%E5%99%A8
  • sklearn.covariance:协方差估计器icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.covariance%EF%BC%9A%E5%8D%8F%E6%96%B9%E5%B7%AE%E4%BC%B0%E8%AE%A1%E5%99%A8
  • sklearn.cross_decomposition:交叉分解icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.cross_decomposition%EF%BC%9A%E4%BA%A4%E5%8F%89%E5%88%86%E8%A7%A3
  • sklearn.datasets:数据集icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.datasets%EF%BC%9A%E6%95%B0%E6%8D%AE%E9%9B%86
  • sklearn.decomposition:矩阵分解icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.decomposition%EF%BC%9A%E7%9F%A9%E9%98%B5%E5%88%86%E8%A7%A3
  • sklearn.discriminant_analysis:判别分析icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.discriminant_analysis%EF%BC%9A%E5%88%A4%E5%88%AB%E5%88%86%E6%9E%90
  • sklearn.dummy:虚拟估计器icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.dummy%EF%BC%9A%E8%99%9A%E6%8B%9F%E4%BC%B0%E8%AE%A1%E5%99%A8
  • sklearn.ensemble:集成方法icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.ensemble%EF%BC%9A%E9%9B%86%E6%88%90%E6%96%B9%E6%B3%95
  • sklearn.exceptions:异常和警告icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.exceptions%EF%BC%9A%E5%BC%82%E5%B8%B8%E5%92%8C%E8%AD%A6%E5%91%8A
  • sklearn.experimental:实验icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.experimental%EF%BC%9A%E5%AE%9E%E9%AA%8C
  • sklearn.feature_extraction特征提取icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.feature_extraction%E7%89%B9%E5%BE%81%E6%8F%90%E5%8F%96
  • sklearn.feature_selection:特征选择icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.feature_selection%EF%BC%9A%E7%89%B9%E5%BE%81%E9%80%89%E6%8B%A9
  • sklearn.gaussian_process:高斯过程icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.gaussian_process%EF%BC%9A%E9%AB%98%E6%96%AF%E8%BF%87%E7%A8%8B
  • sklearn.impute:插补icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.impute%EF%BC%9A%E6%8F%92%E8%A1%A5
  • sklearn.inspection:检查icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.inspection%EF%BC%9A%E6%A3%80%E6%9F%A5
  • sklearn.isotonic:等渗回归icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.isotonic%EF%BC%9A%E7%AD%89%E6%B8%97%E5%9B%9E%E5%BD%92
  • sklearn.kernel_approximation内核近似icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.kernel_approximation%E5%86%85%E6%A0%B8%E8%BF%91%E4%BC%BC
  • sklearn.kernel_ridge内核岭回归icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.kernel_ridge%E5%86%85%E6%A0%B8%E5%B2%AD%E5%9B%9E%E5%BD%92
  • sklearn.linear_model:线性模型icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.linear_model%EF%BC%9A%E7%BA%BF%E6%80%A7%E6%A8%A1%E5%9E%8B
  • sklearn.manifold:流形学习icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.manifold%EF%BC%9A%E6%B5%81%E5%BD%A2%E5%AD%A6%E4%B9%A0
  • sklearn.metrics:指标icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.metrics%EF%BC%9A%E6%8C%87%E6%A0%87
  • sklearn.mixture:高斯混合模型icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.mixture%EF%BC%9A%E9%AB%98%E6%96%AF%E6%B7%B7%E5%90%88%E6%A8%A1%E5%9E%8B
  • sklearn.model_selection:模型选择icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.model_selection%EF%BC%9A%E6%A8%A1%E5%9E%8B%E9%80%89%E6%8B%A9
  • sklearn.multiclass:多类和多标签分类icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.multiclass%EF%BC%9A%E5%A4%9A%E7%B1%BB%E5%92%8C%E5%A4%9A%E6%A0%87%E7%AD%BE%E5%88%86%E7%B1%BB
  • sklearn.multioutput:多输出回归和分类icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.multioutput%EF%BC%9A%E5%A4%9A%E8%BE%93%E5%87%BA%E5%9B%9E%E5%BD%92%E5%92%8C%E5%88%86%E7%B1%BB
  • sklearn.naive_bayes:朴素贝叶斯icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.naive_bayes%EF%BC%9A%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF
  • sklearn.neighbors:最近邻icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.neighbors%EF%BC%9A%E6%9C%80%E8%BF%91%E9%82%BB
  • sklearn.neural_network:神经网络模型icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.neural_network%EF%BC%9A%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E6%A8%A1%E5%9E%8B
  • sklearn.pipeline:管道icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.pipeline%EF%BC%9A%E7%AE%A1%E9%81%93
  • sklearn.preprocessing:预处理和规范化icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.preprocessing%EF%BC%9A%E9%A2%84%E5%A4%84%E7%90%86%E5%92%8C%E8%A7%84%E8%8C%83%E5%8C%96
  • sklearn.random_projection:随机投影icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.random_projection%EF%BC%9A%E9%9A%8F%E6%9C%BA%E6%8A%95%E5%BD%B1
  • sklearn.semi_supervised半监督学习icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.semi_supervised%E5%8D%8A%E7%9B%91%E7%9D%A3%E5%AD%A6%E4%B9%A0
  • sklearn.svm:支持向量机icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.svm%EF%BC%9A%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA
  • sklearn.tree:决策树icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.tree%EF%BC%9A%E5%86%B3%E7%AD%96%E6%A0%91
  • sklearn.utils:实用工具icon-default.png?t=N7T8https://scikit-learn.org.cn/lists/3.html#sklearn.utils%EF%BC%9A%E5%AE%9E%E7%94%A8%E5%B7%A5%E5%85%B7

        注:由于Scikit-Learn工具包包含机器学习所需要的众多功能,一篇难以做出更加详细的分析,因此,在本篇中仅对Scikit-Learn中可以使用的功能进行简要分析,后续更新每种功能更加详细的使用过程。 

正文

01-Scikit-Learn简介

        Scikit-Learn是一个用于机器学习的Python库,它提供了各种用于数据预处理、模型选择、评估和部署的工具和算法。这个库的设计重点是简单、高效和可扩展性。

      (1)Scikit-Learn的简单易用性使得用户可以轻松地使用各种机器学习算法,无需深入了解算法的底层实现。其一致的API设计使得算法的调用和使用变得简单直观。这种设计思想使得Scikit-Learn成为许多数据科学从业者和研究人员的首选工具之一。

      (2)Scikit-Learn提供了广泛的算法支持,包括回归、分类、聚类、降维等各种机器学习任务的算法。无论您是处理结构化数据还是文本数据,Scikit-Learn都能提供适合的算法和工具。从传统的线性模型到现代的深度学习算法,Scikit-Learn都能涵盖您所需的范围。

      (3)Scikit-Learn还提供了丰富的功能,如特征选择、模型评估、交叉验证、管道等,帮助用户完成整个机器学习流程。这些功能使得用户可以更好地处理数据、选择模型、评估性能,并优化整个机器学习流程。

      (4)Scikit-Learn的性能优化也值得一提。其底层实现经过优化,训练和预测速度较快,能够处理大规模数据集。这使得Scikit-Learn成为处理大数据集和复杂模型的理想选择。

      (5)Scikit-Learn与其他Python科学计算库(如NumPy、SciPy和Matplotlib)以及数据处理库(如Pandas)无缝集成,使得用户可以方便地进行数据处理、可视化和模型评估。这种集成性使得用户可以更加高效地完成整个机器学习流程。

        下面是Scikit-Learn的一些主要特点和功能:

        a、简单易用: Scikit-Learn提供了简单且一致的API,使得用户可以轻松地使用各种机器学习算法,无需深入了解算法的底层实现。

        b、广泛的算法支持: Scikit-Learn包含了许多经典的机器学习算法,包括回归、分类、聚类、降维等。这些算法涵盖了从传统的线性模型到最新的深度学习算法的全面范围。

        c、丰富的功能: 除了基本的机器学习算法外,Scikit-Learn还提供了许多辅助功能,如特征选择、模型评估、交叉验证、管道等,帮助用户完成整个机器学习流程。

        d、性能优化: Scikit-Learn采用了优化的底层实现,使得训练和预测速度较快,可以处理大规模数据集。

        e、与其他Python库的集成: Scikit-Learn与其他Python科学计算库(如NumPy、SciPy和Matplotlib)以及数据处理库(如Pandas)无缝集成,使得用户可以方便地进行数据处理、可视化和模型评估。

        安装scikit-learn方法:两种方法安装最新版本

        操作系统:Windows

        包管理器:pip

        例如从https://www.python.org上安装Python 3的64位版本。

        然后运行如下代码:

pip install -U scikit-learn

        使用以下语句去检查:

python -m pip show scikit-learn # 查看scikit-learn安装的位置及安装的版本
python -m pip freeze # 查看所有在虚拟环境中已下载的包
python -c "import sklearn; sklearn.show_versions()"

        操作系统:Windows

        包管理器:conda

安装 conda        (不需要管理员权限)安装 conda

        然后运行:

conda install scikit-learn

        使用以下语句去检查:

conda list scikit-learn # 查看scikit-learn安装的位置及安装的版本
conda list # 查看所有在虚拟环境中已下载的包
python -c "import sklearn; sklearn.show_versions()"

        下面给出一个较为常见的例子进行分析该工具包的使用过程:在这个例子中,我们导入了NumPy库用于数据处理,以及Scikit-Learn的LinearRegression类用于线性回归模型。我们创建了一些示例数据X和y,然后使用fit方法训练模型,最后使用predict方法进行预测。

# 导入必要的库
import numpy as np
from sklearn.linear_model import LinearRegression# 创建一些示例数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])# 创建线性回归模型
model = LinearRegression()# 训练模型
model.fit(X, y)# 进行预测
y_pred = model.predict([[6], [7]])print(y_pred)

 02-Sklearn实现有监督学习

        Scikit-Learn提供了丰富的工具和算法用于有监督学习任务,包括回归和分类。下面我们将详细解释有监督学习的实现,并通过一个经典的线性回归例子进行分析,并可视化数据和模型预测结果。

        有监督学习的主要步骤包括数据准备、模型选择、训练和预测。我们以一个简单的线性回归为例,展示整个过程。

        数据准备: 首先,我们需要准备数据。在这个例子中,我们创建一个随机的线性数据集,并划分为训练集和测试集。

        模型选择: 接下来,我们选择一个回归模型来拟合数据。在这里,我们选择使用线性回归模型。

        训练模型: 我们使用训练集对模型进行训练,来拟合数据。

        预测: 最后,我们使用训练好的模型对测试集进行预测,并评估模型性能。

        具体代码如下:代码演示了一个典型的有监督学习过程,使用了Scikit-Learn进行线性回归任务的实现。

        a、数据准备:首先,使用NumPy生成了一个随机的线性数据集,其中X是一个在0到2之间均匀分布的随机数列,而y是对应的线性关系加上一些噪声。

        b、训练集和测试集划分:利用train_test_split函数将数据集划分为训练集和测试集,其中测试集占总数据集的20%。

        c、选择模型:这里选择了线性回归模型作为拟合数据的模型,使用Scikit-Learn的LinearRegression类。

        d、模型训练:使用训练集数据对线性回归模型进行训练,以找到最优的拟合参数。

        e、模型预测:利用训练好的模型对测试集进行预测,得到对应的预测结果y_pred

        f、可视化:最后,利用Matplotlib库将测试集的真实数据点以蓝色散点图的形式显示出来,并在同一图中用红色线条表示模型对测试集的预测结果。横轴为X值,纵轴为对应的y值,标题为"线性回归模型"。这样的可视化结果使我们能够直观地看到模型的拟合效果。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 创建随机线性数据集
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.rand(100, 1)# 划分训练集和测试集
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)# 预测
y_pred = model.predict(X_test)# 可视化
plt.scatter(X_test, y_test, color='blue')
plt.plot(X_test, y_pred, color='red')
plt.xlabel('X')
plt.ylabel('y')
plt.title('线性回归模型')
plt.savefig("../1.png", dpi=500)
plt.show()

        实例运行结果如下图所示:

 03-Sklearn实现无监督学习

        Sklearn提供了许多用于无监督学习任务的工具和算法,其中最常见的包括聚类和降维。我们将通过一个经典的聚类算法K均值(K-Means)来演示无监督学习的实现过程,并对结果进行可视化。

        无监督学习通常用于从数据中发现模式和结构,而不需要预先标记数据。K均值是一种常用的聚类算法,用于将数据点分成K个簇。

        数据准备: 首先,我们生成一些随机的数据来进行聚类。

        选择模型: 在这里,我们选择K均值算法作为聚类模型。

        模型训练: 使用K均值算法对数据进行聚类。

        可视化:最后,我们用不同颜色的散点图将聚类的结果进行可视化,以帮助理解聚类效果。

        具体代码如下:代码展示了如何使用Scikit-Learn实现无监督学习任务,以K均值算法为例进行了详细解释和演示。

        a、数据准备:首先,通过numpy生成了一个包含100个数据点的随机数据集X,每个数据点有两个特征。

        b、选择模型:选择了K均值算法作为聚类模型,使用Scikit-Learn的KMeans类来实现。

        c、模型训练:调用fit方法对数据进行聚类,K均值算法会将数据点分成指定数量的簇。

        d、可视化:最后,利用matplotlib库将聚类的结果可视化出来。每个数据点被归属到不同的簇,并用不同的颜色表示,这有助于直观地观察聚类效果。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 生成随机数据
X = np.random.rand(100, 2)# 创建K均值模型
model = KMeans(n_clusters=3)# 训练模型
model.fit(X)# 预测簇标签
labels = model.labels_# 可视化
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.title('K-均值聚类')
plt.xlabel('X1')
plt.ylabel('X2')
plt.savefig("../2.png", dpi=500)
plt.show()

        实例运行结果如下图所示:

 04-Sklearn实现模型选择与评估

        Sklearn提供了许多模型选择和评估的工具,包括交叉验证、超参数调优等方法。在这里,我们将以经典的决策树模型为例进行详细解释和演示。

        模型选择与评估流程:

        数据准备:首先,我们加载一个经典的鸢尾花(Iris)数据集,这个数据集包含了三类不同的鸢尾花样本,每个样本有四个特征。

        选择模型:这里我们选择了决策树(Decision Tree)作为分类模型。

        交叉验证:使用交叉验证(Cross-Validation)方法来评估模型的性能。在这里我们使用K折交叉验证(K-Fold Cross Validation)来分割训练集。

        超参数调优:通过交叉验证,我们可以调整模型的超参数来提高性能。这里我们选择树的最大深度作为超参数进行调优。

        模型训练与评估:训练最优模型并评估性能。

        可视化:最后,我们用图形化的方式展示出决策树模型的结构,以便更好地理解该模型的决策过程。

        具体代码如下:代码展示了如何使用Scikit-Learn实现模型选择与评估的流程,以决策树分类器为例进行了详细解释和演示。

        a、数据准备:首先,通过load_iris()函数加载了鸢尾花数据集,其中包含了150个样本,每个样本有四个特征,对应着花萼和花瓣的长度和宽度。数据集中共有三种不同的鸢尾花,分别为Setosa、Versicolour和Virginica,对应着0、1、2三个类别。

        b、选择模型:在这个例子中,我们选择了决策树分类器作为模型,使用Scikit-Learn的DecisionTreeClassifier类来实现。

        c、交叉验证:我们使用了5折交叉验证(5-Fold Cross Validation)来评估模型的性能。cross_val_score函数返回了模型在每个交叉验证折叠上的得分,这里我们打印出了交叉验证的得分。

        d、超参数调优:为了提高模型性能,我们通过网格搜索(Grid Search)方法对决策树的最大深度进行调优。我们定义了一个参数网格param_grid,包含了最大深度从1到9的候选值。然后使用GridSearchCV类来进行网格搜索,找到最佳参数组合。打印出了找到的最佳参数值。

        e、模型训练与评估:使用交叉验证得到的最佳超参数,我们重新训练了一个最优的决策树模型,并将其存储在best_model变量中。

        f、可视化:最后,我们通过plot_tree函数将最优决策树模型的结构进行可视化。通过这个图,可以直观地看到每个节点的判断条件以及分支情况,有助于理解决策树模型的决策过程和逻辑。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
from sklearn.tree import plot_tree# 加载数据
iris = load_iris()
X, y = iris.data, iris.target# 创建决策树模型
model = DecisionTreeClassifier()# 交叉验证评估模型性能
scores = cross_val_score(model, X, y, cv=5)
print("Cross-Validation Scores:", scores)# 超参数调优
param_grid = {'max_depth': np.arange(1, 10)}
grid = GridSearchCV(model, param_grid, cv=5)
grid.fit(X, y)
print("Best Parameters:", grid.best_params_)# 训练最优模型
best_model = grid.best_estimator_# 绘制决策树
plt.figure(figsize=(12, 8))
plot_tree(best_model, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.savefig("../3.png", dpi=500)
plt.show()# 输出结果为
Cross-Validation Scores: [0.96666667 0.96666667 0.9        0.96666667 1.        ]
Best Parameters: {'max_depth': 5}

        实例运行结果如下图所示: 该图展示了一棵深度为3的决策树,每个内部节点表示一个特征和一个阈值,根据这个条件将数据分配到不同的子节点,直到叶节点,叶节点表示了最终的分类结果。通过观察这个图,可以清晰地理解模型是如何根据特征来进行分类的。

05-Sklearn实现基于排列的特征重要性

        基于排列的特征重要性是一种模型检查技术,可用于表格型数据中任一个拟合的估计器 。 这对于非线性或不可解释的估计器特别有用 。基于排列的特征重要性定义为单个特征取值被随机打乱时模型得分的降低程度。此过程破坏了特征与目标之间的关系,因此模型得分的下降程度表示了模型对特征的依赖程度。这种技术的好处在于它不依赖于模型,并且可以通过特征的不同排列进行多次计算。

        Permutation_Importance函数可以计算给定数据集的估计器的特征重要性。n_repeats参数设置特征取值随机重排的次数,并返回样本的特征重要性。

        下面将以随机森林模型为例进行详细解释和演示。

        Permutation Importance方法流程:

        数据准备:首先,我们加载一个经典的波士顿房价数据集,这个数据集包含了房屋的各项特征(比如房间数量、犯罪率等)以及房价作为目标变量。

        选择模型:在这个例子中,我们选择了随机森林(Random Forest)回归模型作为模型。

        训练模型:使用波士顿房价数据集训练随机森林回归模型。

        计算特征重要性:利用Permutation Importance方法计算各个特征的重要性,方法是对每个特征进行随机排列,观察模型预测性能的变化,重要性高的特征对模型影响较大。

        可视化:最后,我们通过图表展示各个特征的重要性,以便更直观地理解模型特征对预测的影响。

         具体代码如下:代码展示了如何使用Sklearn的Permutation Importance方法来评估模型中特征的重要性。下面是代码的详细解释:

        a、数据准备:首先,我们通过load_boston()函数加载了波士顿房价数据集,其中包含了房屋的各项特征(比如房间数量、犯罪率等)以及房价作为目标变量。boston.data包含了特征数据,boston.target包含了目标变量。

        b、选择模型:在这个例子中,我们选择了随机森林回归模型作为模型,使用Scikit-Learn的RandomForestRegressor类来实现。

        c、训练模型:使用波士顿房价数据集训练了随机森林回归模型,通过model.fit(X, y)完成模型训练。

        d、计算特征重要性:利用permutation_importance()函数计算各个特征的重要性。这个函数会对每个特征进行随机排列,然后观察模型预测性能的变化,重要性高的特征对模型影响较大。n_repeats参数指定了重复计算次数,random_state参数用于设置随机种子以确保结果的稳定性。

        e、可视化:最后,通过条形图展示了各个特征的重要性。result.importances_mean包含了每个特征的平均重要性得分,sorted_idx对这些得分进行排序,然后通过plt.barh()函数绘制水平条形图展示各个特征的重要性排序。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import permutation_importance
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 加载数据
boston = load_boston()
X, y = boston.data, boston.target# 创建随机森林回归模型
model = RandomForestRegressor()# 训练模型
model.fit(X, y)# 计算特征重要性
result = permutation_importance(model, X, y, n_repeats=10, random_state=42)# 可视化特征重要性
sorted_idx = result.importances_mean.argsort()
plt.barh(boston.feature_names[sorted_idx], result.importances_mean[sorted_idx])
plt.xlabel("排列重要性")
plt.savefig("../4.png", dpi=500)
plt.show()

        实例运行结果如下图所示: 在生成的图中,我们可以看到各个特征的Permutation Importance值,即通过对每个特征进行随机排列后观察模型性能的变化,得出的重要性分数。条形图中的特征名称表示了对应的特征,条形的长度表示了特征的重要性得分,长度越长表示该特征对于模型的预测结果影响越大。

        通过观察图中的条形图,我们可以清晰地看到哪些特征对模型的预测有着较大的贡献,进而可以根据重要性排名来筛选最重要的特征进行模型训练或特征选择。这种可视化方式能够帮助我们了解模型中各个特征对预测结果的相对重要性,从而指导我们在特征选择和模型优化过程中做出更合理的决策。

 06-Sklearn实现带有可视化API的ROC曲线

        Sklearn提供了方便的API来生成带有可视化的ROC曲线,这有助于评估分类模型的性能,特别是在处理不平衡数据时非常有用。下面将以经典的二分类问题为例进行详细解释和演示。

        ROC曲线方法流程:

        数据准备:首先,我们加载一个经典的二分类数据集,比如手写数字识别数据集,其中包含了像素值作为特征和对应的标签(0或1)。

        选择模型:在这个例子中,我们选择了逻辑回归(Logistic Regression)分类器作为模型。

        训练模型:使用手写数字识别数据集训练逻辑回归分类器。

        生成ROC曲线:通过Sklearn的roc_curve函数计算ROC曲线的真阳性率(TPR)和假阳性率(FPR),并通过roc_auc_score计算AUC值(曲线下面积)来评估模型性能。

        可视化:最后,我们通过绘制ROC曲线图表展示模型的性能,以便更直观地了解模型在不同阈值下的整体表现。

        具体代码如下:在这个例子中,我们通过生成二分类数据集,并使用逻辑回归分类器构建了一个二分类模型。通过计算ROC曲线的真阳性率(TPR)和假阳性率(FPR),以及AUC值来评估模型性能。最后,通过绘制ROC曲线图表展示了模型的整体性能。

        下面是对代码的详细解释:

        导入必要的库:首先,导入了需要使用的Python库,包括NumPy用于数值计算,Matplotlib用于可视化,以及Scikit-learn中的相关模块用于生成数据集、构建模型和评估性能。

        生成二分类数据集:使用make_classification函数生成了一个具有1000个样本和20个特征的二分类数据集。这个函数是用于生成随机的二分类数据集,可以通过参数设置来控制数据集的各种属性,如样本数量、特征数量等。

        划分训练集和测试集:使用train_test_split函数将生成的数据集划分为训练集和测试集,其中测试集占总样本的30%。这一步是为了在模型训练和评估时能够独立地验证模型的性能。

        创建逻辑回归分类器:使用LogisticRegression类创建了一个逻辑回归分类器的实例。逻辑回归是一种用于解决二分类问题的线性模型,常用于预测概率值。

        训练模型:使用训练集数据对逻辑回归分类器进行训练,通过调用fit方法实现。模型将学习如何根据输入的特征对样本进行分类。

        预测概率:使用训练好的模型对测试集数据进行预测,并获取预测结果的概率值。这里使用predict_proba方法获取模型对每个样本属于正类的概率。

        计算ROC曲线的真阳性率、假阳性率和AUC值:通过调用roc_curve函数计算ROC曲线的真阳性率(TPR)、假阳性率(FPR)以及阈值,并使用roc_auc_score函数计算ROC曲线下的面积(AUC)来评估模型性能。

        可视化ROC曲线:最后,使用Matplotlib库绘制了ROC曲线图表。ROC曲线的横轴是FPR,纵轴是TPR,图中橙色曲线表示模型的ROC曲线,曲线下的面积(AUC)给出了模型性能的一个综合评价。虚线表示随机分类的ROC曲线,理想情况下,模型的ROC曲线应该尽量向左上方偏移,与随机分类的曲线相比越远越好。图例中显示了AUC值,提供了一个简洁的性能指标。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, roc_auc_score
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 生成二分类数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建逻辑回归分类器
model = LogisticRegression()# 训练模型
model.fit(X_train, y_train)# 预测概率
y_pred_prob = model.predict_proba(X_test)[:, 1]# 计算ROC曲线的真阳性率、假阳性率和AUC值
fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
auc = roc_auc_score(y_test, y_pred_prob)# 可视化ROC曲线
plt.figure()
plt.plot(fpr, tpr, color='orange', label='ROC curve (area = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], color='navy', linestyle='--')
plt.xlabel('误报率')
plt.ylabel('真阳性率')
plt.title('受试者工作特征(ROC)曲线')
plt.legend(loc="lower right")
plt.savefig("../5.png", dpi=500)
plt.show()

        实例运行结果如下图所示: 在生成的图中,我们可以看到各个特征的Permutation Importance值,即通过对每个特征进行随机排列后观察模型性能的变化,得出的重要性分数。条形图中的特征名称表示了对应的特征,条形的长度表示了特征的重要性得分,长度越长表示该特征对于模型的预测结果影响越大。        

 07-Sklearn实现数据集转换

        Sklearn中的数据集转换通常涉及数据预处理、特征工程和数据标准化等操作,这有助于提高模型的性能和准确性。常见的数据集转换方法包括标准化、归一化、编码分类变量等。下面以数据标准化为例进行详细解释,并提供一个经典的例子进行分析和可视化。

        数据标准化方法流程:

        数据准备:加载一个经典的数据集,比如鸢尾花数据集(Iris Dataset),该数据集包含了花的特征(如花萼长度、花萼宽度等)和对应的类别标签(鸢尾花的种类)。

        选择模型:在这个例子中,我们选择支持向量机分类器(Support Vector Machine, SVM)作为模型。

        数据标准化:使用Sklearn提供的数据标准化方法,如StandardScaler进行数据标准化处理。数据标准化可以将特征数据缩放到均值为0,方差为1的范围,以避免特征之间的差异对模型的影响。

        训练模型:使用数据标准化后的特征数据训练支持向量机分类器。

        评估模型:通过交叉验证等方法对模型性能进行评估,并可视化不同参数设置下的结果。

        具体代码如下:代码主要是一个完整的数据预处理和模型训练的流程,具体步骤如下:

        a、数据准备:加载了鸢尾花数据集,该数据集包含了花的特征和对应的类别标签。

        b、训练集和测试集划分:将加载的数据集划分为训练集和测试集,其中测试集占总样本的30%。

        c、数据标准化:使用StandardScaler对特征数据进行标准化处理,保证了特征的均值为0,方差为1。

        d、模型选择和训练:选择了支持向量机分类器(SVM)作为模型,并使用标准化后的训练数据对其进行训练。

        e、模型评估:使用测试集数据对训练好的模型进行评估,计算并输出了模型在测试集上的准确率。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 创建支持向量机分类器
model = SVC()# 训练模型
model.fit(X_train_scaled, y_train)# 预测
y_pred = model.predict(X_test_scaled)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
# 可视化标准化前后的特征分布
plt.figure(figsize=(12, 6))# 标准化前的特征分布
plt.subplot(1, 2, 1)
plt.hist(X_train[:, 0], bins=20, color='blue', alpha=0.5, label='Feature 1')
plt.hist(X_train[:, 1], bins=20, color='red', alpha=0.5, label='Feature 2')
plt.xlabel('功能价值')
plt.ylabel('频率')
plt.title('标准化前的特征分布')
plt.legend()# 标准化后的特征分布
plt.subplot(1, 2, 2)
plt.hist(X_train_scaled[:, 0], bins=20, color='blue', alpha=0.5, label='Feature 1')
plt.hist(X_train_scaled[:, 1], bins=20, color='red', alpha=0.5, label='Feature 2')
plt.xlabel('功能价值(标准化)')
plt.ylabel('频率')
plt.title('标准化后的特征分布')
plt.legend()plt.tight_layout()
plt.savefig("../6.png", dpi=500)
plt.show()

        实例运行结果如下图所示: 生成的图像进行分析:

        标准化前的特征分布(左图):在标准化之前,特征的分布情况展示了原始数据的特点。每个特征的取值范围和尺度可能不同,因此特征之间的分布情况差异较大。

        标准化后的特征分布(右图):经过标准化处理后,特征的分布情况呈现出均值为0,方差为1的正态分布。可以看到,经过标准化后,特征的尺度统一,各特征之间的差异性变小,有利于模型的训练和收敛。

总结

        综合上述分析:虽然仅仅列出了Scikit-Learn的部分功能,足可以证明它是一个功能强大、易于上手的机器学习工具包,适用于各种使用场景。对于机器学习初学者来说,通过深入了解Scikit-Learn的各种功能和用法,将能够更好地利用这个工具包,提升机器学习模型的效果和性能。对于机器学习的能力的提升至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芋道系统springcloud模块启动报错,枚举类不能为空

问题描述: Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2024-05-10 15:50:15.756 | ERROR 9120 | main [TID: N/A] o.s.b.d.LoggingFailureAnalysisReporter | ************************…

Vue创建todolist

电子书 第三章: https://www.dedao.cn/ebook/reader?idV5R16yPmaYOMqGRAv82jkX4KDe175w7xRQ0rbx6pNgznl9VZPLJQyEBodb89mqoO 没有使用VUE CLI创建项目。 创建步骤: 1, 用Vite 创建项目 2, npm run dev 运行程序 参照之前的文…

数据结构与算法学习笔记八-二叉树的顺序存储表示法和实现(C语言)

目录 前言 1.数组和结构体相关的一些知识 1.数组 2.结构体数组 3.递归遍历数组 2.二叉树的顺序存储表示法和实现 1.定义 2.初始化 3.先序遍历二叉树 4.中序遍历二叉树 5.后序遍历二叉树 6.完整代码 前言 二叉树的非递归的表示和实现。 1.数组和结构体相关的一些知…

搭建Harbor仓库

文章目录 Harbor仓库搭建Harbor仓库安装 docker 服务修改配置文件 Harbor仓库 搭建Harbor仓库 下载 Harbor 仓库 安装 docker 服务 # step 1: 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 yum-config-m…

QT--5

1> 将网络聊天室重新实现一遍 服务器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ser new QTcpServer(this); }Widget::~Widget() {delete ui; }vo…

Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)

1 漏洞描述 CVE-2020-1938 是 Apache Tomcat 中的一个严重安全漏洞,该漏洞涉及到 Tomcat 的 AJP(Apache JServ Protocol)连接器。由于 AJP 协议在处理请求时存在缺陷,攻击者可以利用此漏洞读取服务器上的任意文件,甚至…

【Linux】Linux——Centos7安装Nginx

不需要安装包 1.安装依赖 #查看 C 环境是否安装gcc -v #查看 zlib 是否安装cat /usr/lib64/pkgconfig/zlib.pc #查看 pcre 是否安装pcre-config --version 2.安装C #安装C yum install gcc-c 3.安装pcre yum install -y pcre pcre-devel 4.安装zlib #安装 yum install -y zlib…

该问题未得到解决(仅记录)

https://releases.ubuntu.com/bionic/进入网页下载ubuntu 选择烧录软件将下载的Ubuntu烧录到U盘中 之前用这个U盘烧录过一次,成功了,后来应该是U盘受损或者是什么其他原因使得用这个U盘总是烧录失败

ChatGLM大模型简介

ChatGLM系列是国产大语言模型中性能最好、回答准确率最高的大模型。如果有毕业论文、课题研究的需要,可以关注一下这个大模型。 清华大学和智谱AI的第一代ChatGLM-6B在2023年3月份推出,开源模型推出之后不久就获得了很多的关注和使用。3个月后的2023年6…

快速上手文心一言指令

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

【NPM】Nginx Proxy Manager 一键申请 SSL 证书,自动续期,解决阿里云SSL免费证书每3个月失效问题

文章目录 1、NPM 简介2、实战Step 1:环境搭建 也可以看作者安装笔记 Step 2:创建容器 2.1 在系统任意位置创建一个文件夹,此文档以~/nginx-proxy-manager为例。2.2 创建docker-compose.yaml2.3 启动NPM服务 Step 3:配置反向代理3…

搭建知识库必备:12个开源 Wiki 软件工具盘点

在任何成功的公司中,部门间的知识共享是至关重要的。如果没有一个简单的信息交流方法,团队怎样才能有效合作呢?Wiki软件提供了一种创建、组织及在全公司范围内分享知识的直接方法。但是,哪一种Wiki软件是最佳的选择呢?…

给网络镜像模式下的 WSL2 使用 127.0.0.1代理的方法

网络镜像模式下的WSL2虽然复制了宿主机windows的ip,但是仍然无法访问127.0.0.1的代理。经过调查,发现因为WSL2从应用商店下载而来,所以可能是UWP应用,所以需要用工具解除环回代理限制。

Java入门基础学习笔记13——数据类型

数据类型的分类: 基本数据类型 引用数据类型 基本数据类型:4大类8种类型: 定义整形用int,再大的数用long。 package cn.ensource.variable;public class VariableDemo2 {public static void main(String[] args) {//目标&#x…

Android11 InputDispatcher 分发事件流程分析

在 Android11 InputReader分析 一文中分析到,InputReader将数据放入iq队列后,唤醒InputDispatcher线程,执行InputDispatcher的dispatchOnce方法 //frameworks\native\services\inputflinger\dispatcher\InputDispatcher.cpp void InputDispa…

【js】将一维数组处理成树形数据并且实现模糊查询

项目中由于数据量不大,后台并未做处理,因此前端拿到返回的Table数据需要处理成树形数据再渲染到表格中 原始数据 const dataList[{"id": 44,"seedlingName": "测试2","seedlingType": "测试2",&quo…

一文读懂开源大数据OLAP

企业需要从海量数据中提取有价值的信息,以支持决策制定和提高运营效率,数据已成为企业最宝贵的资产之一。OLAP(在线分析处理)技术,作为数据仓库解决方案的核心组成部分,提供了一种强大的工具,帮…

java-springboot项目添加swagger2/Knife4j,附注解

文章目录 添加依赖config工作包中新增SwaggerConfig报错注解 环境&#xff1a; jdk1.8 java8 springboot2.6.13 swagger2.9.2 添加依赖 pom.xml <!-- 添加swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfo…

【C++】list的使用与模拟实现

&#x1f525;个人主页&#xff1a;北辰水墨 &#x1f525;专栏&#xff1a;C学习仓 本节内容我们来讲解list的使用和模拟实现。 本节难点&#xff1a;list迭代器的模拟实现。 一、list的介绍&#xff1a; 列表 列表是一种序列容器&#xff0c;允许在序列的任何位置进行时间复…

基于springboot+mybatis+vue的项目实战之页面参数传递

如图所示&#xff0c;删除操作可以用按钮实现&#xff0c;也可以用超链接来实现。 1、第一种情况&#xff0c;用按钮实现。 html页面相关&#xff1a; <button type"button" click"deleteId(peot.id)">删除</button> <script>new Vue(…