【机器学习】模型的训练和评估(理论+图解)

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 【机器学习】模型的训练和评估(理论+图解)

简 介:下面是我在学习时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。

 

关键词:Python、机器学习

一、K折交叉验证

  有的时候我们将数据分为训练集和测试集,但是可能不太科学,会有很大的偶然性在里面,如果划分不同可能存在不同的结果,所以为了增强模型的泛化能力,我们将数据分成k份,其中的k-1份作为训练集,剩余的1份作为测试集,这样就会存在10组数据集,我们就可以得到10组结果,然后取10组的平均值作为我们的模型结果。

1.K-fold

  在sklearn的model_selection模块就集成了这个算法,它是随机不放回的进行切分数据集,不会产生重复的数据。

代码实现:

from sklearn.datasets import load_iris
from sklearn import metrics
from sklearn.model_selection import KFold
from sklearn.model_selection import StratifiedKFold
from sklearn.tree import DecisionTreeClassifier
import numpy as np
X,y=load_iris(return_X_y=True)
# 定义分割器
kf=KFold(n_splits=10) 
# 定义模型
model=DecisionTreeClassifier()
# 用于保存每折的分数
scores=[]
for i,(train_index,test_index) in enumerate(kf.split(X)):
    model.fit(X[train_index],y[train_index])
    y_pred=model.predict(X[test_index])
    # 评估模型分数
    accuracy=metrics.accuracy_score(y[test_index],y_pred)
    scores.append(accuracy)
    print("Fold:{} accuracy:{:.4f}".format(i+1,accuracy))
print("平均accuracy:{}".format(np.mean(scores)))
  • KFold(n_splits=10)的意思就是将数据集切分成10份
  • kf.split(X)就是将利用定义好的分割器进行切分数据集,返回的是对应训练集和测试集的索引,注意是索引不是数据,需要用该索引进行从原数据中进行提取数据

2.Stratified K-flod

  Stratified K-flod也是集成好的分割算法,但是它不同的地方就是它会按照标签中的类别进行按比例分割,保证训练集和测试集的样本比例相同。

代码实现:

skf=StratifiedKFold(n_splits=3)
model=DecisionTreeClassifier()
scores=[]
for i,(train_index,test_index) in enumerate(skf.split(X,y)):
    model.fit(X[train_index],y[train_index])
    y_pred=model.predict(X[test_index])
    accuracy=metrics.accuracy_score(y[test_index],y_pred)
    scores.append(accuracy)
    print("Fold:{} accuracy:{:.4f}".format(i+1,accuracy))
print("平均accuracy:{}".format(np.mean(scores)))

二、网格参数搜索

  你会发现有的算法参数很多,而且范围很大是连续型的,如果一个一个尝试的相当的费时间,所以很容易想到有没有那种循环性遍历尝试的,GridSerarchCV就是这样的,它会将我们传入的参数一个一个的进行尝试,然后用每组参数进行交叉验证,选择最优的参数组合,虽然可以帮助我们很容易的找到最优参数组合,但是也会产生一定负面影响,因为要不断遍历每个参数组合,所以耗时较长,还有一点就是很容易产生过拟合,所以针对大数据集这种方法还是没有用的,还是要依赖一定的经验进行调整参数,过度依赖它肯定是不行的,但是作为新手使用它可以很容易帮助我们找打最优的参数组合。

代码实现:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
  • Pipeline:管道,可以将我们一些通用步骤进行封装
  • StandardScaler:用于将数据进行标准化
  • KNeighborsClassifier:K近邻算法
  • GridSearchCV:网格搜索
# 定义待评估的模型,这是个管道
pipe_KNN=Pipeline([('scale',StandardScaler()),
                  ('KNN',KNeighborsClassifier())])
n_neighbors=np.arange(1,11)
# 需要遍历的网格参数
params={"scale__with_mean":[True,False],
       "KNN__n_neighbors":n_neighbors}
# 定义网格器
gsCV=GridSearchCV(pipe_KNN,
                  params,
                  cv=10)
# 开始搜索参数
gsCV.fit(X,y)

  我们将标准化和K近邻算法封装在一个管道内,Pipeline的参数就是一个列表,列表中包括多个流程,每个流程是一个键值对,键就是这个流程的名字,用于后面进行提取该步骤,值就是每个流程的操作对象。

  然后定义了需要搜索的网格参数,他是一个字典,键是参数的名字,值是每个参数可选的值,这里发现键就是Pipeline管道中的键加__再加上参数名字,这是Pipeline中提取参数的方法,用于指明哪个步骤的哪个参数。

  然后GridSearchCV的参数就是评估器,网格参数,以及交叉验证的折数,这里用Pipeline充当一个评估器。

# 网格搜索后最优参数
>>>gsCV.best_params_
{'KNN__n_neighbors': 8, 'scale__with_mean': True}
# 搜索参数过程中的最优分数
>>>gsCV.best_score_
0.9666666666666668
# 返回最优参数下的模型
>>>model=gsCV.best_estimator_
>>>model
Pipeline(memory=None,
         steps=[('scale',
                 StandardScaler(copy=True, with_mean=True, with_std=True)),
                ('KNN',
                 KNeighborsClassifier(algorithm='auto', leaf_size=30,
                                      metric='minkowski', metric_params=None,
                                      n_jobs=None, n_neighbors=8, p=2,
                                      weights='uniform'))],
         verbose=False)
# 将最优模型用于预测
>>>y_pred=model.predict(X)
>>>print("accuracy:{}".format(metrics.accuracy_score(y,y_pred)))
accuracy:0.9666666666666667

  当我们进行完网格搜索后,可以用gsCV获得最优参数,以及对应的模型用于之后的使用。



目录
相关文章
|
19天前
|
人工智能 JSON 算法
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
阿里云的人工智能平台 PAI,作为一站式、 AI Native 的大模型与 AIGC 工程平台,为开发者和企业客户提供了 Qwen2.5-Coder 系列模型的全链路最佳实践。本文以Qwen2.5-Coder-32B为例,详细介绍在 PAI-QuickStart 完成 Qwen2.5-Coder 的训练、评测和快速部署。
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
|
3天前
|
编解码 机器人 测试技术
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
|
23天前
|
机器学习/深度学习 PyTorch API
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
Transformer架构自2017年被Vaswani等人提出以来,凭借其核心的注意力机制,已成为AI领域的重大突破。该机制允许模型根据任务需求灵活聚焦于输入的不同部分,极大地增强了对复杂语言和结构的理解能力。起初主要应用于自然语言处理,Transformer迅速扩展至语音识别、计算机视觉等多领域,展现出强大的跨学科应用潜力。然而,随着模型规模的增长,注意力层的高计算复杂度成为发展瓶颈。为此,本文探讨了在PyTorch生态系统中优化注意力层的各种技术,
49 6
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
|
12天前
|
机器学习/深度学习 人工智能 算法
人工智能浪潮下的编程实践:构建你的第一个机器学习模型
在人工智能的巨浪中,每个人都有机会成为弄潮儿。本文将带你一探究竟,从零基础开始,用最易懂的语言和步骤,教你如何构建属于自己的第一个机器学习模型。不需要复杂的数学公式,也不必担心编程难题,只需跟随我们的步伐,一起探索这个充满魔力的AI世界。
30 12
|
19天前
|
机器学习/深度学习 Python
机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况
本文介绍了机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况,而ROC曲线则通过假正率和真正率评估二分类模型性能。文章还提供了Python中的具体实现示例,展示了如何计算和使用这两种工具来评估模型。
38 8
|
19天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
25 6
|
19天前
|
机器学习/深度学习 Python
机器学习中模型选择和优化的关键技术——交叉验证与网格搜索
本文深入探讨了机器学习中模型选择和优化的关键技术——交叉验证与网格搜索。介绍了K折交叉验证、留一交叉验证等方法,以及网格搜索的原理和步骤,展示了如何结合两者在Python中实现模型参数的优化,并强调了使用时需注意的计算成本、过拟合风险等问题。
41 6
|
22天前
|
机器学习/深度学习 数据采集 算法
从零到一:构建高效机器学习模型的旅程####
在探索技术深度与广度的征途中,我深刻体会到技术创新既在于理论的飞跃,更在于实践的积累。本文将通过一个具体案例,分享我在构建高效机器学习模型过程中的实战经验,包括数据预处理、特征工程、模型选择与优化等关键环节,旨在为读者提供一个从零开始构建并优化机器学习模型的实用指南。 ####
|
26天前
|
人工智能 边缘计算 JSON
DistilQwen2 蒸馏小模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
本文详细介绍在 PAI 平台使用 DistilQwen2 蒸馏小模型的全链路最佳实践。
|
21天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
26 1

热门文章

最新文章

相关产品

  • 人工智能平台 PAI