[scikit-learn] 第二章 Model Section

系列文章目录

[scikit-learn] 第一章 初识scikit-learn及内置数据集介绍


[scikit-learn] 第二章 Model Section

菜鸡镇贴!!!

请添加图片描述

Model Section

sklearn.model_selection 模块是 Scikit-learn 库中用于模型选择和评估的核心工具集。该模块提供了用于分割数据集、交叉验证、参数调优和性能评估的功能。本贴主要从交叉验证:评估估计器性能、调整估计器的超参数和学习曲线部分进行介绍。

交叉验证:评估估计器性能

​ 在同一数据上学习预测函数的参数并在该数据上进行测试是一种方法上的错误:一个仅会重复其刚刚见过的样本标签的模型可能会获得完美的分数,但在尚未见过的数据上却无法预测任何有用的信息。这种情况称为过拟合。为了避免这种情况,在执行(监督)机器学习实验时,通常会将部分可用数据保留为测试集 X_test、y_test。请注意,“实验”一词并不仅用于学术用途,因为即使在商业环境中,机器学习通常也是从实验开始的。以下是模型训练中典型交叉验证工作流程的流程图。最佳参数可以通过网格搜索技术确定。
请添加图片描述

​ 在scikit中,可以使用train_test_split辅助函数快速计算随机划分为训练集和测试集。让我们加载鸢尾数据集,以在其上拟合线性支持向量机:

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn import svm

// return_X_y=True参数表示返回的数据是分开的。X包含特征数据,y包含对应的标签。
X, y = datasets.load_iris(return_X_y=True)

// test_size=0.4参数指定了测试集占总数据的比例为40%,random_state=0参数确保每次运行代码时得到的随机拆分结果相同。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)

// 创建支持向量机分类器对象(SVC),使用线性核(kernel='linear'),正则化参数(C=1)。然后使用训练集(X_train和y_train)对分类器进行训练。
clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)

// 使用测试集评估分类器的性能。score()方法返回分类器在测试集上的准确率。
print(clf.score(X_test, y_test))

​ 在评估不同的估算器设置(即“超参数”)时,比如对于 SVM 必须手动设置的 C 参数,仍然存在着在测试集上过度拟合的风险,因为参数可以调整直至估算器表现最佳。这样一来,关于测试集的信息可能会“泄露”到模型中,评估指标也就无法再报告出泛化性能。为了解决这个问题,数据集的另一部分可以被保留作为所谓的“验证集”:先在训练集上进行训练,然后在验证集上进行评估;当实验看起来成功时,最终评估可以在测试集上进行。

​ 然而,将可用数据分成三组会大幅减少可用于模型学习的样本数量,并且结果可能依赖于对(训练、验证)集的特定随机选择。

​ 解决这一问题的方法是一种称为交叉验证(CV)的程序。尽管最终评估仍需保留一个测试集,但在进行CV时不再需要验证集。在基本的k折交叉验证方法中,训练集被分成k个较小的子集(还有其他方法,但通常遵循相同的原则)。对于每一个k“折”,按照以下步骤进行:

  1. 使用 k - 1 个折叠的数据来训练模型;
  2. 将剩余的数据用作验证集(即,用作测试集来计算性能指标,如准确率)。

​ k折交叉验证报告的性能度量是在循环中计算的值的平均值。这种方法可能会消耗大量计算资源,但不会浪费太多数据(就像固定一个任意的验证集一样),这在样本数量非常小的逆推问题等情况下是一个重大优势。
请添加图片描述

调整估计器的超参数

​ 超参数是在估计器内部不直接学习的参数。在 scikit-learn 中,它们作为参数传递给估计器类的构造函数。典型的例子包括支持向量分类器的 C、kernel 和 gamma,以及 Lasso 的 alpha 等。

​ 推荐的做法是搜索超参数空间,以获得最佳的交叉验证分数。

​ 可以通过这种方式优化构造估计器时提供的任何参数。具体来说,要找到给定估计器的所有参数的名称和当前值,请使用:

estimator.get_params()

一次搜索包括:

  1. 一个估计器(回归器或分类器,例如sklearn.svm.SVC());
  2. 一个参数空间;
  3. 一种搜索或抽样候选项的方法;
  4. 一个交叉验证方案;以及
  5. 一个评分函数。

​ scikit-learn提供了两种通用的参数搜索方法:对于给定的值,GridSearchCV会详尽考虑所有参数组合,而RandomizedSearchCV则可以从指定分布的参数空间中抽取指定数量的候选项。这两种工具都有对应的连续减半版本,即HalvingGridSearchCV和HalvingRandomSearchCV,后者在寻找优秀参数组合时可能更快。

demo:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score, GridSearchCV, KFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 创建一个SVM分类器的Pipeline
pipe = Pipeline([('scaler', StandardScaler()), ('svc', SVC())]
帮我画个流程表图小程序冬枣的产地识别 1.简介:冬枣产地识别小程序是通过Python语言构造而成,通过调用QT库,从而生成可视化界面,冬枣的光谱和质构数据是以页面点击文件导入。通过调用相关库函数,对冬枣的光谱和质构数据做相关的处理,将高精度光谱仪器的光谱数据,通过学习参数优化模型,将便携式光谱数据作为测试集评价性能,最终用迁移模型预测冬枣的类别。 2.相关库介绍:1.基础库:(1)sys: 提供与 Python 解释器相关的功能,比如可以用来获取当前 Python 解释器的路径、退出程序等。(2)os: 用于与操作系统进行交互,例如获取文件路径、文件名、目录操作等,方便进行文件的读写和路径管理。(3)random: 用于生成随机数,包括随机整数、随机浮点数、随机选择元素等,常用于数据的随机采样和模拟。(4)warnings: 用于显示警告信息,帮助开发者发现潜在的问题,比如代码中可能存在的问题或者过时的用法等。2.数据处理和科学计算库:(1)numpy: 一个强大的科学计算库,提供了高性能的多维数组对象和工具,用于进行各种数学运算,比如矩阵运算、数组操作等,是数据分析和科学计算的基础库。(2)Pandas: 提供了高性能、易用的数据结构和数据分析工具,主要用于数据的清洗、处理和分析,比如数据的读取、筛选、排序、合并等操作。(3)Matplotlib: 用于数据可视化,可以创建各种静态、动态、交互式的图表,帮助用户直观地展示数据的分布、趋势等信息。(4)sklearn: 全称 scikit-learn,是一个强大的机器学习库,提供了多种机器学习算法和工具,包括分类、回归、聚类等算法,以及数据预处理、模型评估等功能。3.图形界面库:(1)pyQt5: 是一个用于创建图形用户界面(GUI)的库,提供了丰富的控件和布局管理工具,可以方便地创建窗口、按钮、表格、图表等界面元素,用于构建交互式的应用程序。(2)QApplication: 应用程序类,用于管理应用程序的控制流和主要设(3)Qwidget: 窗口组件,是所有用户界面对象的基类。(4)QTableView: 表格视图组件,用于显示表格数据。4.调用深度学习库函数,构造模型和对数据进行一系列处理。 3.流程介绍:以下是将代码转换为流程文字介绍的内容: 1.1初始化界面 1.创建一个名为 WineClassify 的类,继承自 QWidget,用于构建整个应用程序的主窗口。 2.在 __init__ 方法中,初始化窗口的基本属性,包括按钮、表格、图表等组件。 3.调用 init_ui 方法,完成界面的初始化和布局设置。 2. 界面初始化(init_ui 方法) 1.设置警告信息忽略,避免不必要的干扰。 2.初始化多个 DataFrame 对象,用于存储不同类型的数据。 3.定义各种数据导入、显示、特征选择和模型训练相关的参数和方法。 4.创建按钮、下拉框等控件,并为它们设置提示信息和点击事件的回调函数。 5.将按钮、下拉框等控件添加到水平布局中,并设置布局参数。 6.创建表格视图、图表画布和设置控件,用于显示数据和图表。 7.将这些控件添加到主布局中,并设置窗口的标题、图标和大小。 8.显示主窗口。 3. 数据导入(import_data 方法) 1.当用户点击“导入近红外文件”按钮时,触发该方法。 2.弹出文件选择对话框,让用户选择要导入的数据文件。 3.检查文件格式,确保是 Excel 或 CSV 文件。 4.使用 pandas 读取文件内容,填充到 input_data 中。 5.根据选择的导入方式(如“导入大型近红外设备训练数据”),将数据存储到相应的 DataFrame 中,并显示提示信息。 6.如果数据不符合要求(如文件为空或缺少标签列),显示错误提示。 4. 数据显示(show_data_slot 方法) 1.当用户点击“显示数据”按钮时,触发该方法。 2.根据当前选择的显示方式(如“显示大型近红外设备训练数据”),检查对应的数据是否存在。 3.如果数据存在,则调用 show_data 方法,将数据展示在表格视图中。 4.如果数据不存在,显示提示信息,要求用户先导入数据。 5. 图表绘制(plot_data_slot 方法) 1.当用户点击“绘制图表”按钮时,触发该方法。 2.根据当前选择的显示方式,检查对应的数据是否存在。 3.如果数据存在,则调用 plot_data 方法,绘制数据图表。 4.如果数据不存在,显示提示信息,要求用户先导入数据。 6. 绘制数据图表(plot_data 方法) 1.清除之前的图表内容。 2.设置图表大小和标题。 3.提取数据中的标签和特征。 4.如果有特征选择后的数据,则使用特征选择后的数据绘制图表。 5.遍历每一行数据,绘制光谱图。
03-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值