sklearn.model_selection模块介绍

这篇具有很好参考价值的文章主要介绍了sklearn.model_selection模块介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据集划分方法

train_test_split

train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)

参数包括:

  • test_size:可选参数,表示测试集的大小。可以是一个表示比例的浮点数(例如0.2表示20%的数据作为测试集),或者是一个表示样本数量的整数。默认为None。
  • train_size:可选参数,表示训练集的大小。可以是一个表示比例的浮点数(例如0.8表示80%的数据作为训练集),或者是一个表示样本数量的整数。默认为None,表示训练集的大小由测试集大小决定。
  • random_state:可选参数,表示随机数生成器的种子,用于随机划分数据集。设置一个整数值可以保证每次划分的结果一致。
  • shuffle:可选参数,表示是否在划分数据集之前对数据进行随机打乱。默认为True,即进行随机打乱。
  • stratify:可选参数,表示根据指定的标签数组进行分层划分。标签数组的长度必须与输入数据集的第一个维度相同。适用于分类问题中的类别不平衡情况。
from sklearn.model_selection import train_test_split

X, y = load_data()  # 加载特征数据 X 和标签数据 y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

交叉验证方法

K折交叉验证

K折交叉验证将数据集划分为K个互不重叠的子集,称为折(Fold)。模型会进行K次训练和验证,每次使用K-1个折作为训练集,剩下的1个折作为验证集。K次训练和验证的结果会进行平均,得到最终的性能评估。K折交叉验证可以通过KFold类实现,具体用法如下

from sklearn.model_selection import KFold

X = np.arange(10)
kf = KFold(n_splits=5, shuffle=True, random_state=42)
for train_index, test_index in kf.split(X):
    X_train, X_test = X[train_index], X[test_index]
    print(X_train, X_test)
    print("*"*20)

执行结果
sklearn.model_selection模块介绍

留一交叉验证LeaveOneOut

留一交叉验证是一种特殊的K折交叉验证,其中K等于数据集的样本数量。每个样本都作为单独的验证集,而其余样本作为训练集。这种方法适用于数据集较小的情况。留一交叉验证可以通过LeaveOneOut类实现,具体用法如下

from sklearn.model_selection import LeaveOneOut

loo = LeaveOneOut()
X = np.arange(10)
for train_index, test_index in loo.split(X):
    X_train, X_test = X[train_index], X[test_index]
    print(X_train, X_test)
    print("*"*20)
    # 在训练集上训练模型,使用测试集进行评估

sklearn.model_selection模块介绍

分组交叉验证GroupKFold

分组交叉验证是一种考虑数据集中样本之间分组关系的交叉验证方法。在某些任务中,样本可能彼此相关或存在依赖关系,例如在自然语言处理中的句子分类任务中,同一篇文章中的句子可能相互影响。为了确保模型在训练集和验证集中都包含相同分组的样本,可以使用GroupKFold类进行分组交叉验证。具体用法如下

from sklearn.model_selection import GroupKFold

gkf = GroupKFold(n_splits=3)
for train_index, test_index in gkf.split(X, y, groups):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    # 在训练集上训练模型,使用测试集进行评估

groups参数是一个表示样本分组的数组,长度与数据集的样本数相同。

随机重复K折交叉验证RepeatedKFold

随机重复K折交叉验证是K折交叉验证的扩展,通过多次重复执行K折交叉验证来更稳定地评估模型性能。可以使用RepeatedKFold类进行随机重复K折交叉验证。具体用法如下

from sklearn.model_selection import RepeatedKFold

rkf = RepeatedKFold(n_splits=5, n_repeats=10, random_state=42)

X = np.arange(10)
i  = 0
for train_index, test_index in rkf.split(X):
    X_train, X_test = X[train_index], X[test_index]
    print(X_train, X_test)
    print("*"*20)
    i +=1
print(i)

层次化交叉验证cross_val_score

层次化交叉验证是一种嵌套的交叉验证方法,用于在模型选择和性能评估中进行双重交叉验证。外层交叉验证用于评估不同的模型或模型参数,内层交叉验证用于在每个外层验证折上进行模型训练和验证。可以通过嵌套使用cross_val_score函数来实现层次化交叉验证。具体用法如下

from sklearn.model_selection import cross_val_score

scores = cross_val_score(estimator, X, y, cv=5)

分层K折交叉验证StratifiedKFold

分层K折交叉验证是K折交叉验证的一种变体,它在划分数据集时保持了每个类别的样本比例。这对于类别不平衡的分类问题非常重要。分层K折交叉验证可以通过StratifiedKFold类实现,具体用法与K折交叉验证类似。
StratifiedKFold的作用是确保每个折中的样本比例与原始数据集中的样本比例相同。这对于处理类别不平衡的分类问题非常重要,因为如果样本比例不平衡,模型在某些折上可能无法学习到少数类别的有效模式

from sklearn.model_selection import StratifiedKFold

skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)

for train_index, test_index in skf.split(X, y):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    # 在训练集上训练模型,使用测试集进行评估

参数搜索和模型选择方法

网格搜索

网格搜索通过遍历指定的参数组合来寻找最佳的模型参数配置。它通过穷举搜索所有参数组合,并在交叉验证中评估每个组合的性能。GridSearchCV类实现了网格搜索的功能。我们需要指定要搜索的参数和其取值范围,并指定评估指标和交叉验证的折数。示例代码如下

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris

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

# 定义模型和参数网格
model = SVC()
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}

# 执行网格搜索
grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(X, y)

# 输出最佳参数配置和得分
print("Best parameters: ", grid_search.best_params_)
print("Best score: ", grid_search.best_score_)

执行结果
sklearn.model_selection模块介绍

随机搜索

随机搜索通过随机抽样一组参数组合来寻找最佳的模型参数配置。与网格搜索不同,随机搜索不遍历所有参数组合,而是在指定的参数空间中进行随机抽样,并在交叉验证中评估每个参数组合的性能。RandomizedSearchCV类实现了随机搜索的功能。示例代码如下:

from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

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

# 定义模型和参数分布
model = RandomForestClassifier()
param_dist = {'n_estimators': [10, 50, 100], 'max_depth': [None, 5, 10]}

# 执行随机搜索
random_search = RandomizedSearchCV(model, param_distributions=param_dist, cv=5)
random_search.fit(X, y)

# 输出最佳参数配置和得分
print("Best parameters: ", random_search.best_params_)
print("Best score: ", random_search.best_score_)

执行结果
sklearn.model_selection模块介绍

交叉验证(Cross-Validation)

将数据集分成多个折(Fold),每次使用其中一部分作为验证集,剩余部分作为训练集进行模型训练和评估。使用cross_val_score函数进行交叉验证,并指定模型和评估指标。示例代码:

from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

# 定义模型和数据集
model = DecisionTreeClassifier()
X, y = load_iris(return_X_y=True)

# 执行交叉验证
scores = cross_val_score(model, X, y, cv=5)

# 输出每折的得分和平均得分
print("Cross-validation scores: ", scores)
print("Average score: ", scores.mean())

执行结果
sklearn.model_selection模块介绍

学习曲线

通过绘制不同训练集大小下模型的训练和验证得分曲线,评估模型的拟合能力和泛化能力。使用learning_curve函数生成学习曲线数据,并绘制曲线图。示例代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import learning_curve
from sklearn.linear_model import LogisticRegression

# 加载数据集
X, y = load_digits(return_X_y=True)

# 定义模型
model = LogisticRegression()

# 生成学习曲线数据
train_sizes, train_scores, test_scores = learning_curve(model, X, y, cv=5)

# 绘制学习曲线图
plt.plot(train_sizes, np.mean(train_scores, axis=1), label='Training score')
plt.plot(train_sizes, np.mean(test_scores, axis=1), label='Validation score')
plt.xlabel('Training Set Size')
plt.ylabel('Score')
plt.title('Learning Curve')
plt.legend(loc='best')
plt.show()

执行结果
sklearn.model_selection模块介绍文章来源地址https://www.toymoban.com/news/detail-514719.html

到了这里,关于sklearn.model_selection模块介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT Model/View 设计模式中 selection 模型

    Qt的selection模型用于管理TableView中的选择操作。它允许用户选择和操作特定的数据。 当使用Qt的TableView时,可以使用selection模型来实现以下用途: 数据操作 :通过选择模型,可以方便地对所选的单元格或行执行数据操作,例如复制、剪切、粘贴、删除等。 数据筛选 :可以使

    2024年01月20日
    浏览(36)
  • 解决Python中的“模块未找到错误:没有名为’sklearn’的模块”的问题

    解决Python中的“模块未找到错误:没有名为’sklearn’的模块”的问题 在使用Python时可能会遇到ModuleNotFoundError: No module named ‘sklearn‘这样的错误,这意味着Python无法找到所需的模块。在这种情况下,通常是因为安装的模块不正确或者没有安装该模块。有几种方法可以解决这个

    2024年02月15日
    浏览(46)
  • 【论文笔记】Mamba: Linear-Time Sequence Modeling with Selective State Spaces

    原文链接:https://arxiv.org/abs/2312.00752 基石模型(FM)的主干网络通常是序列模型,处理任意的输入序列。但现代FM主要基于Transformer这一序列模型,及其核心的注意力。但是,自注意力仅能在上下文窗口中密集地传递信息,而无法建模窗口外部的数据;此外,其尺度与窗口长度

    2024年04月26日
    浏览(42)
  • python:使用sklearn库的KFold模块进行随机森林十折交叉验证

    作者:CSDN @ _养乐多_ 本文记录了使用sklearn库的KFold模块进行随机森林十折交叉验证的代码。 一、代码 二、代码解释 在上述代码中 首先,导入了RandomForestClassifier(随机森林分类器)、cross_val_score(交叉验证函数)、KFold(交叉验证生成器)和load_iris(加载鸢尾花数据集)等

    2024年01月16日
    浏览(36)
  • 【前端】Element-ui el-select 绑定 v-model 不生效问题汇总

    1、 v-model 绑定的值与下拉选项的值类型不一致。 2、绑定的值未声明。 如上所示,需要具体声明。 3、value 前 需要加 冒号  : 

    2024年02月03日
    浏览(44)
  • sklearn中决策树模块的剪枝参数ccp_alpha如何可视化调整

    决策树作为树模型中最经典的算法,根据训练数据生长并分裂叶子结点,容易过拟合。所以一般来说会考虑生长停止后进行剪枝,把一些不必要的叶子结点去掉(让其父结点作为叶子结点),这样或许对其泛化能力有积极作用。 在scikit-learn的决策树模块里,默认是不剪枝的,

    2024年02月21日
    浏览(43)
  • SolidUI AI生成可视化,0.1.0版本模块划分以及源码讲解

    随着文本生成图像的语言模型兴起,SolidUI想帮人们快速构建可视化工具,可视化内容包括2D,3D,3D场景,从而快速构三维数据演示场景。SolidUI 是一个创新的项目,旨在将自然语言处理(NLP)与计算机图形学相结合,实现文生图功能。通过构建自研的文生图语言模型,SolidUI 利用

    2024年02月16日
    浏览(30)
  • sklearn【Accuracy】准确度介绍和案例学习!

    在机器学习和数据科学中,准确度(Accuracy)是衡量分类模型性能的一个基本且重要的指标。准确度表示模型正确分类的样本数占总样本数的比例。Python的sklearn库提供了简单而强大的工具来训练和评估分类模型,包括计算准确度。 准确度的计算方式相对直接且简单,下面将详

    2024年04月23日
    浏览(40)
  • sklearn【MAPE】平均相对误差介绍,以及案例学习!

    在预测任务中,评估模型的预测性能至关重要。除了常见的均方误差(MSE)和决定系数(R²)等指标外,平均百分比误差(MAPE,Mean Absolute Percentage Error)也是一个常用的评估指标。MAPE衡量了模型预测值与实际值之间的百分比误差的平均值,有助于我们了解预测的相对准确性

    2024年04月23日
    浏览(35)
  • 思科2950交换机VLAN划分介绍

    首先配置一下交换机 SC-2950 SC-2950en SC-2950#conf t Enter configuration commands, one per line. End with CNTL/Z. SC-2950(config)#config-register 0x2102 SC-2950(config)#end 添加三个VLAN SC-2950#vlan data SC-2950(vlan)#vlan 10 name v1 VLAN 10 added: Name: v1 SC-2950(vlan)#vlan 20 name v2 VLAN 20 added: Name: v2 SC-2950(vlan)#vlan 30 name v3 VLAN 3

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包