机器学习——模型评估与选择(拟合、)

【说明】文章内容来自《机器学习——基于sklearn》,用于学习记录。若有争议联系删除。

1、拟合

        拟合是指机器学习模型在训练的过程中,通过更新参数,使得模型不断契合可观测数据(训练集)的过程。欠拟合指的是模型在训练和预测表现都不好,往往由于模型过于简单,如图(a)所示。正常模型指的是模型在训练和预测表现都好,如图 (b)所示。过拟合是指由于模型过于复杂,模型在训练集上的表现很好,但在测试集上表现较差,如图 (c)所示。

1.1 欠拟合

         欠拟合往往是由于模型的数据特征过少或者模型复杂度较低所致。因此,可以通过如下办法解决欠拟合问题:
通过特征工程添加更多特征项。当特征不足或者现有特征与样本标签的相关性不强时,通过组合特征进行处理。
进行模型优化,提升模型复杂度。提升模型的复杂度能够增强模型的拟合能力。例如,在线性模型中可以通过添加高次项等提升模型的复杂度。
减小正则项权重。正则化的目的是防止过拟合,但是现在模型出现了欠拟合,因此需要减小正则项的权重
使用集成方法。融合几个有差异的弱模型,使其成为一个强模型

1.2 过拟合

        过拟合指的是模型在训练集上表现得很好,但是在交叉验证集合测试集上表现得一般,也就是说模型对未知样本的预测表现得一般,泛化(generalization)能力较差。过拟合产生的原因往往有以下几个:

  1. 训练数据不足,数据太少,导致无法描述问题的真实分布。根据统计学的大数定律,在试验不变的条件下,重复试验多次,随机事件的频率将趋近其概率。模型在求解最小值的过程中需要兼顾真实数据拟合和随机误差拟合。
  2. 数据有噪声。噪声数据使得更复杂的模型会尽量覆盖噪声点,即对数据过拟合。
  3. 对模型训练过度,导致模型非常复杂。

针对过拟合产生的原因,抑制过拟合的几种方法如下:

  1. 获取更多的训练样本。通过获取更多的训练样本,可以衰减噪声数据的权重。
  2. 增加正则项权重,减少高次项的影响。例如,通过L1或 L2正则化提高模型的泛
  3. 数据处理。
  • 进行数据清洗,纠正错误的标签,删除错误数据。
  • 进行特征共性检查,利用皮尔逊相关系数计算变量之间的线性相关性,进行特征选择。
  • 重要特征筛选,例如,对决策树模型进行求最大深度、剪枝等操作。
  • 数据降维,通过主成分分析等保留重要特征。

1.3 正则化

        正则化(regularization)目的在于提高模型在未知测试数据上的泛化能力,避免参数过拟合。常用方法是在原模型优化目标的基础上增加针对参数的惩罚(penalty)项,一般有L1正则化与L2正则化两种方法。
L1正则化是基于L1范数实现的,也就是 LASSO 回归,即在目标函数后面加上参数的绝对值之和与参数的积项。

C = C_{o}+\frac{\lambda }{n}\sum_{w}^{}|w|
L2正则化是基于L2范数实现的,也就是岭回归,即在目标函数后面加上参数的平方之和与参数的积项:

C = C_{o}+\frac{\lambda }{2n}\sum_{w}^{}|w^{2}|

L1范数: 指向量中各个元素绝对值之和

\left | \left | x \right | \right | _{1}= |x_{1}|+|x_{2}|+|x_{3}|+\cdots +|x_{n}|

L2范数: 指向量各元素的平方和然后求平方根

\left | \left | x \right | \right | _{2}=\sqrt{x_{1}^{2}+{x_{1}^{2}}+{x_{3}^{2}}+\cdots +{x_{n}^{2}}}

2、模型调参

        模型调参是指从数据特征入手,通过调整模型中的超参数来解决欠拟合和过拟合问题。
Sklearn 提供了网格搜索和随机搜索两种参数调优方法。

2.1 网格搜索

        GridSearchCV可以自动进行超参数组合,通过交叉验证评估模型的优劣。GridSearchCV拆分为GridSearch 和 CV两部分,即网格搜索和交叉验证。网格搜索是指在指定的参数范围内,通过循环和比较调整参数,训练预估器。假设模型有两个参数a,b,参数a有3个取值,参数b有4个取值,共有3X4=12个取值,则依次搜索这12个网格。交叉验证将训练数据集划分为K份(默认为10),依次取其中一份作为测试集,其余为训练集。model_selection 模块提供了GridSearchCV函数用于网格搜索,格式如下:

GridSearchCV(eatimator,param_grid)

【参数说明】

  • estimator:选择使用的分类器,并且传人除需要优化的参数之外的其他参数。每一个分类器都需要一个 scoring参数或者 score方法。
  • param_grid:需要优化的参数的取值,值的类型为字典或者列表。

示例:

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
#加载鸢尾花数据
iris = datasets.load_iris()
#划分数据集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state = 3)
#标准化
transfer = StandardScaler()
X_train = transfer.fit_transform(X_train)
X_test = transfer.transform(X_test)
#KNN算法预估器
estimator = KNeighborsClassifier()
#多个超参数,引入网格搜索
param_dict = {'n_neighbors':[1,3,5,7,9,11]}
estimator = GridSearchCV(estimator, param_grid = param_dict, cv =10)
estimator.fit(X_train, y_train)
#模型评估
#最佳参数
print('最佳参数:\n',estimator.best_params_)
#最佳结果
print('最佳结果:\n',estimator.best_score_)
#最佳评估器
print('最佳评估器:\n',estimator.best_estimator_)
#交叉验证结果
print('交叉验证结果:\n',estimator.cv_results_)

【运行结果】

2.2 随机搜索

        在处理较少的超参数组合时,GridSearchCV方法比较适用。GridSearchCV可以保证在指定的参数范围内找到精度最高的参数,但是这也是网格搜索的缺陷所在,要求遍历所有可能参数的合,在面对大数据集和多参数的情况下,非常耗时。RandomizedSearchCV随机参数搜索的方法相对于网格搜索方法,找到模型的最优参数的可能性比较大,并且也比较省时。

Sklearn的model_selection模块RandomizedSearchCV方法用于随机搜索,代码如下:

meta_clf = RandomForestClassifier(n_estimators = 20)
给定参数搜索范围:list or distribution
param_dist = {"max_depth": [3, None], #给定list树的最大深度,如果None,节点扩展直到所有叶子"max_features": sp_randint(1, 11),  #给定distribution寻找最佳分裂点时考虑的特征数目。可选值,int(具体的数目),float(数目的百分比"min_samples_split": sp_randint(2, 11), #分裂内部节点需要的最少样例数。int(具体数目),float(数目的百分比) "bootstrap": [True, False],   #构建数是不是采用有放回样本的方式"criterion": ["gini", "entropy"]}  #度量分裂的标准。可选值:“mse”,均方差(mean squared error)
# 用RandomiSearch+CV选取超参数
n_iter_search = 20
random_search = RandomizedSearchCV(clf, param_distributions=param_dist,n_iter=n_iter_search, cv=5, iid=False)
random_search.fit(X, y)

示例:

from sklearn import datasets 
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV
iris = datasets.load_iris()
iris_feature = iris['data']
iris_target = iris['target']
#建模分析
forest_clf = RandomForestClassifier(random_state = 42)
param_distribs = {'n_estimators': range(10, 100), 'max_depth': range(5, 20)}
random_search = RandomizedSearchCV(forest_clf, param_distribs, n_iter = 50, cv = 3)
random_search.fit(iris_feature, iris_target)
print(random_search.best_params_)
best_model = random_search.best_estimator_

【运行结果】

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

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

相关文章

全新揭秘:Java WebSocket全双工通信的实践与运用

全新揭秘:Java WebSocket全双工通信的实践与运用 一、简介何为全双工通信全双工?WebSocket的使用场景 二、如何使用Java实现WebSocket1,引用websocket相关starter2,启用websocket3,服务端代码开发4,群发测试…

GitHub打不开或者访问慢解决方法

一、获取IP地址 首先进入下面的网站 IP/DNS Detect 获取到当前github.com对应的IP地址 可以多search几次, github.com对应的IP地址不止一个,都记录下来 二、修改hosts文件内容 找到文件夹路径:C:\Windows\System32\drivers\etc\ 打开hosts文件,将刚才…

VLOOKUP中的#N/A错误很常见,这里有详细排除步骤

你的VLOOKUP是否提取了错误的数据,或者你根本无法使其工作?本教程展示了如何快速修复常见的VLOOKUP中的#N/A错误并克服其主要限制。 ​在VLOOKUP公式中,当Excel找不到查找值时,会显示#N/A错误消息(意思是“不可用”&a…

@vue/cli脚手架

0_vue/cli 脚手架介绍 目标: webpack自己配置环境很麻烦, 下载vue/cli包,用vue命令创建脚手架项目 vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目 脚手架是为了保证各施工过程顺利进行而搭设的工作平 vue/cli的好处 开箱即用 0配置webpack babe…

全自动双轴晶圆划片机:半导体制造的关键利器

随着科技的飞速发展,半导体行业正以前所未有的速度向前迈进。在这个过程中,全自动双轴晶圆划片机作为一种重要的设备,在半导体晶圆、集成电路、QFN、发光二极管、miniLED、太阳能电池、电子基片等材料的划切过程中发挥着举足轻重的作用。 全自…

selenium 报错

selenium 报错 开始学自动化测试,,环境配了一天TAT 安装好selenium之后 运行python脚本 # codingutf-8 from selenium import webdriver import timedriver webdriver.Chrome() driver.get("https://www.baidu.com") time.sleep(3) driver.…

Unity 物体高亮插件 Highlighting System 使用

效果图 下载链接 链接:https://pan.baidu.com/s/1ojCibjIt6FpBej6KRw3mtw 提取码:nngq 使用简介 导入插件 HighlightingSystemEditor.cs:脚本用来控制高亮插件的渲染。 HighlightableObject.cs:挂载到需要高亮的物体 Highlighti…

目标检测入门体验,技术选型,加载数据集、构建机器学习模型、训练并评估

Hi, I’m Shendi 1、目标检测入门体验,技术选型,加载数据集、构建机器学习模型、训练并评估 在最近有了个物体识别的需求,于是开始学习 在一番比较与询问后,最终选择 TensorFlow。 对于编程语言,我比较偏向Java或nod…

C#上位机与欧姆龙PLC的通信04---- 欧姆龙plc的存储区

1、存储区概念 欧姆龙PLC将整个数据存储器分为10个区:输入继电器区、输出继电器区、内部辅助继电器区、特殊继电器区、保持继电器区、暂存继电器区、定时/计数器区、数据存储区、辅助存储继电器区、链接继电器区。 输入输出继电器区 CP1E系列PLC输入继电器区有16…

Docker 文件和卷 权限拒绝

一 创作背景 再复制Docker影像文件或访问Docker容器内已安装卷上的文件时我们常常会遇到:“权限被拒绝”的错误,在此,您将了解到为什么会出现“权限被拒绝”的错误以及如何解决这个问题。 二 目的 在深入探讨 Docker 容器中的 Permission De…

SpringCloudGateway网关处拦截并修改请求

SpringCloudGateway网关处拦截并修改请求 需求背景 老系统没有引入Token的概念,之前的租户Id拼接在请求上,有的是以Get,Param传参形式;有的是以Post,Body传参的。需要在网关层拦截请求并进行请求修改后转发到对应服务。…

​ SK Ecoplant借助亚马逊云科技,海外服务器为环保事业注入新活力

在当今全球面临着资源紧缺和环境挑战的大背景下,数字技术所依赖的海外服务器正成为加速循环经济转型的关键利器。然而,很多企业在整合数字技术到运营中仍然面临着一系列挑战,依然存在低效流程导致的不必要浪费。针对这一问题,SK E…