[机器学习]分类算法系列①:初识概念

news2024/11/30 5:38:02

目录

1、概念

2、数据集介绍与划分

2.1、数据集的划分

2.2、sklearn数据集介绍

2.2.1、API

2.2.2、分类和回归数据集

分类数据集

回归数据集

返回类型

3、sklearn转换器和估计器

3.1、转换器

三种方法的区别

3.2、估计器

3.2.1、简介

3.2.2、API

3.3、工作流程


1、概念

整个系列中总共需要掌握的内容:

知道数据集的分为训练集和测试集
知道sklearn的转换器和估计器流程
了解sklearn的分类、回归数据集
说明K-近邻算法的距离公式
说明K-近邻算法的超参数K值以及取值问题
说明K-近邻算法的优缺点
应用KNeighborsClassifier实现分类
了解分类算法的评估标准准确率
说明朴素贝叶斯算法的原理
说明朴素贝叶斯算法的优缺点
应用MultinomialNB实现文本分类
应用模型选择与调优
说明决策树算法的原理
说明决策树算法的优缺点
应用DecisionTreeClassifier实现分类
说明随机森林算法的原理
说明随机森林算法的优缺点
应用RandomForestClassifier实现分类

当谈到机器学习的分类算法时,我们通常可以将其分为以下几个主要类别:监督学习、无监督学习、半监督学习和强化学习。每个类别都有其独特的特点和适用场景。

1、监督学习(Supervised Learning): 在监督学习中,模型从有标签的训练数据中学习,目标是根据输入特征预测输出标签。最常见的监督学习算法包括:

  • 回归(Regression):用于预测连续值输出,例如线性回归、岭回归、Lasso回归等。
  • 分类(Classification):用于预测离散类别输出,例如逻辑回归、决策树、支持向量机、随机森林等。

2、无监督学习(Unsupervised Learning): 在无监督学习中,模型从无标签的数据中寻找模式和结构,帮助我们理解数据的内在关系。常见的无监督学习算法包括:

  • 聚类(Clustering):将数据分成组别,例如K均值聚类、层次聚类。
  • 降维(Dimensionality Reduction):将高维数据映射到低维空间,例如主成分分析(PCA)、独立成分分析(ICA)。

3、半监督学习(Semi-Supervised Learning): 半监督学习结合了监督学习和无监督学习,使用有标签和无标签数据来训练模型。这对于数据标注困难的情况下可能很有用。

4、强化学习(Reinforcement Learning): 强化学习是让模型通过与环境的互动来学习,以最大化累积奖励。它适用于需要做出一系列决策的问题。主要包括智能体、环境、行动和奖励信号。

2、数据集介绍与划分

学习目标

目标

知道数据集的分为训练集和测试集

知道sklearn的分类、回归数据集

拿到的数据是否全部都用来训练一个模型?

2.1、数据集的划分

机器学习一般的数据集会划分为两个部分:

  • 训练数据:用于训练,构建模型
  • 测试数据:在模型检验时使用,用于评估模型是否有效

划分比例:

  • 训练集:70% 80% 75%
  • 测试集:30% 20% 30%

API:

sklearn.model_selection.train_test_split(arrays, *options)

  1. x 数据集的特征值
  2. y 数据集的标签值
  3. test_size 测试集的大小,一般为float
  4. random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
  5. return ,测试集特征训练集特征值值,训练标签,测试标签(默认随机取)

结合后面的数据集作介绍

2.2、sklearn数据集介绍

2.2.1、API

sklearn.datasets:

  1. 加载获取流行数据集
  2. datasets.load_*()
    1. 获取小规模数据集,数据包含在datasets
  1. datasets.fetch_*(data_home=None)
    1. 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/

2.2.2、分类和回归数据集

分类数据集

sklearn.datasets.load_iris():加载并返回鸢尾花数据集

sklearn.datasets.load_digits():加载并返回数字数据集

sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)

subset: 'train'或者'test','all',可选,选择要加载的数据集。

训练集的“训练”,测试集的“测试”,两者的“全部”

回归数据集

sklearn.datasets.load_boston():加载并返回波士顿房价数据集

sklearn.datasets.load_diabetes():加载并返回糖尿病数据集

返回类型

load和fetch返回的数据类型datasets.base.Bunch(字典格式):

  1. data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
  2. target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
  3. DESCR:数据描述
  4. feature_names:特征名,新闻数据,手写数字、回归数据集没有
  5. target_names:标签名

3、sklearn转换器和估计器

3.1、转换器

想一下之前做的特征工程的步骤?

  1. 实例化 (实例化的是一个转换器类(Transformer))
  2. 调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)

我们把特征工程的接口称之为转换器,其中转换器调用有这么几种形式

  1. fit_transform
  2. fit
  3. transform

这几个方法之间的区别是什么呢?

三种方法的区别

StandardScaler是scikit-learn库中用于数据标准化的类。它有三个主要方法:fittransformfit_transform。这些方法的区别如下:

1、fit方法

  • fit方法用于计算数据的均值(mean)和标准差(standard deviation)。
  • 当调用fit方法时,StandardScaler会分析数据,计算每个特征的均值和标准差,并将这些值存储在StandardScaler对象的内部状态中。
  • 这个方法通常在训练数据上调用一次,以计算出用于标准化的参数。
  • 示例:std_scaler.fit(X_train),其中X_train是训练数据。

2、transform方法

  1. transform方法用于应用先前计算得到的均值和标准差对数据进行标准化。
  2. 当调用transform方法时,StandardScaler将使用存储在对象内部的均值和标准差,对传入的数据进行标准化操作。
  3. 这个方法通常在训练数据和测试数据上分别调用,以保证数据集在相同的标准化范围内。
  4. 示例:X_train_scaled = std_scaler.transform(X_train)

3、fit_transform方法

  • fit_transform方法是一个组合方法,等效于先调用fit再调用transform
  • 它在数据上执行计算均值和标准差的操作,然后使用这些计算结果对数据进行标准化。
  • 这个方法通常在训练数据上调用一次,以获取均值和标准差,并将训练数据标准化后的结果返回。
  • 示例:X_train_scaled = std_scaler.fit_transform(X_train)

通常情况下,fit方法应该在训练数据上调用一次,然后使用transform方法对训练数据和测试数据进行标准化。fit_transform方法在训练数据上调用一次即可。这样可以确保使用相同的均值和标准差来对所有数据进行标准化,避免了数据泄露和不一致性。

fit_transform的作用相当于transform加上fit。但是为什么还要提供单独的fit呢

虽然fit_transform的作用在很多情况下与分别调用fittransform相同,但是提供独立的fit方法的原因在于灵活性和适用性。

以下是为什么提供单独的fit方法的一些原因:

  1. 分步骤操作:有时候你可能需要在进行标准化之前先检查计算得到的均值和标准差。独立的fit方法允许你在进行标准化之前查看这些参数,以便更好地理解数据。
  2. 跨数据集使用:在实际情况中,你可能会在多个不同的数据集上使用相同的标准化参数。例如,如果你训练了一个模型并将其保存下来,然后在生产环境中使用,你可能会希望使用与训练数据相同的标准化参数。单独的fit方法允许你将标准化参数存储下来,并在不同的数据集上重复使用。
  3. 控制标准化参数:有时候,你可能希望手动调整标准化的参数,例如通过添加一个偏移或缩放因子。使用独立的fit方法允许你在标准化之前对参数进行调整。
  4. 定制化处理:独立的fit方法为开发者提供了更大的自由度,可以根据具体需求进行定制化的处理。

虽然在大多数情况下,fit_transform会更方便,但是独立的fit方法确保了库的灵活性和适应性,使其能够应对更广泛的使用情况。这种设计哲学允许开发者根据需求选择适当的方法来达到最佳效果。

3.2、估计器

3.2.1、简介

"估计器"(Estimator)是scikit-learn中一个重要的概念,它是一种用于机器学习模型的通用接口。估计器的目标是封装模型的训练和预测过程,使其能够统一地使用相似的方法,无论是分类、回归还是其他类型的任务。

估计器在scikit-learn中有两个基本的角色:

  1. Transformer(转换器):转换器是一种估计器,它可以从输入数据中计算特征、过滤或转换数据。例如,StandardScaler就是一个转换器,可以将数据标准化。转换器通常有fit方法用于学习变换所需的参数,以及transform方法用于应用学习到的变换。
  2. Predictor(预测器):预测器是一种估计器,它可以根据输入数据进行预测。例如,线性回归模型就是一个预测器,它可以根据输入特征预测目标变量。预测器通常有fit方法用于训练模型,以及predict方法用于进行预测。

使用估计器的一般步骤包括:

  1. 创建估计器对象:通过实例化一个估计器类,例如LinearRegression()RandomForestClassifier()
  2. 使用fit方法:使用训练数据调用fit方法来训练模型(对于预测器)或计算变换参数(对于转换器)。
  3. 使用估计器对象:根据需要使用估计器的其他方法,例如predict(对于预测器)或transform(对于转换器)来进行预测或转换。
  4. 评估和优化:根据模型表现进行评估,可能需要调整模型参数以优化性能。

这种统一的接口使得在scikit-learn中可以轻松地切换不同的估计器,并将其组合在一起以构建复杂的机器学习流水线。同时,它也有助于保持代码的整洁和一致性,使得不同算法的比较和实验更加便捷。

3.2.2、API

在sklearn中,估计器(estimator)是一个重要的角色,是一类实现了算法的API

1、用于分类的估计器:

  • sklearn.neighbors k-近邻算法
  • sklearn.naive_bayes 贝叶斯
  • sklearn.linear_model.LogisticRegression 逻辑回归
  • sklearn.tree 决策树与随机森林

2、用于回归的估计器:

  • sklearn.linear_model.LinearRegression 线性回归
  • sklearn.linear_model.Ridge 岭回归

3、用于无监督学习的估计器

  • sklearn.cluster.KMeans 聚类

3.3、工作流程

估计器(Estimator)在scikit-learn中是一个统一的接口,用于训练模型和进行预测。以下是估计器的基本工作流程:

  1. 选择估计器类: 首先,根据你的任务选择合适的估计器类。估计器类的选择取决于你要解决的问题,例如分类、回归、聚类等。你可以从scikit-learn的估计器列表中选择一个适合的类,例如LinearRegressionRandomForestClassifier等。
  2. 实例化估计器对象: 通过实例化选定的估计器类,创建一个估计器对象。这个对象将包含模型的参数和方法。
  3. 拟合(训练)模型: 对于预测器类(Predictor),使用训练数据调用估计器对象的fit方法,将模型适应到训练数据。这个过程涉及学习模型的参数,以使其能够在输入特征上预测目标值。
  4. 进行预测: 对于已经训练好的预测器,你可以使用predict方法来进行预测。将输入特征传递给predict方法,它会返回模型对这些特征的预测值。
  5. 转换数据(对于转换器类): 对于转换器类(Transformer),使用训练数据调用估计器对象的fit方法,学习需要用于数据转换的参数。然后,使用transform方法对新的数据进行转换,以应用已学习的转换规则。
  6. 评估和调整: 通过评估模型在测试数据上的性能,来衡量模型的质量。你可以使用各种评估指标,如准确率、均方误差等。如果需要,你可以调整估计器的参数,以优化模型的性能。

总结起来,估计器的工作流程涉及选择合适的类、实例化估计器对象、拟合(训练)模型、进行预测或转换数据,以及根据评估结果进行调整。这种统一的接口使得在scikit-learn中可以方便地使用不同的估计器,构建复杂的机器学习流水线,并进行模型选择和性能优化。

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

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

相关文章

腾讯云服务器镜像TencentOS Server操作系统详细介绍

腾讯云TencentOS Server镜像是腾讯云推出的Linux操作系统,完全兼容CentOS生态和操作方式,TencentOS Server操作系统为云上运行的应用程序提供稳定、安全和高性能的执行环境,TencentOS可以运行在腾讯云CVM全规格实例上,包括黑石物理…

FTP文件传输服务器

目录 一、FTP协议两种工作模式 二、FTP数据两种传输模式 三、FTP用户分类 四、VSFTP配置案例 4.1匿名开放模式 4.2本地用户模式 4.3虚拟用户模式 五、实验总结 一、FTP协议两种工作模式 主动模式: 1、客户端主动向ftp服务器发送控制连接,三次握手控制连接…

Spark有两种常见的提交方式:client 模式和 cluster 模式对机器 CPU 的影响

Spark有两种常见的提交方式:client 模式和 cluster 模式。这两种方式对机器 CPU 的影响略有不同 ,请参考以下说明 Client 模式: 在 Client 模式下,Spark Driver 运行在提交任务的客户端节点上(即运行 spark-submit 命…

全新纠错码将量子计算提效10倍!

上周,来自两个研究小组的最新模拟报告称,一类新兴的量子纠错码的效率比目前的“黄金标准”(即表面码)高出一个数量级。 量子纠错码的工作原理都是将大量容易出错的量子比特转换成更小的“受保护”量子比特,这些量子比特…

软件测试/测试开发丨Selenium 高级定位 CSS

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27022 一、CSS选择器概念 CSS拥有自己的语法规则和表达式 CSS通常分为相对定位和绝对定位 CSS常和XPATH一起用于UI自动化测试 二、CSS相对定位使用场景 支…

亚马逊云科技生成式AI技术辅助教学领域,近实时智能应答2D数字人搭建

早在大语言模型如GPT-3.5等的兴起和被日渐广泛的采用之前,教育行业已经在AI辅助教学领域有过各种各样的尝试。在教育行业,人工智能技术的采用帮助教育行业更好地实现教学目标,提高教学质量、学习效率、学习体验、学习成果。例如,人…

电子邮件服务器

目录 一、相关知识 二、邮件服务器种类 三、邮件传输协议 四、DNS中的MX记录 五、电子邮件系统工作原理 六、配置文件相关参数 七、邮件服务器配置案例 7.1设置用户别名邮箱 7.2空壳邮件服务器 一、相关知识 1、电子邮箱系统三个组成部分 MUA(telnet):邮…

【git】【IDEA】在idea中使用git

目录 一、 在IDEA中配置git 二、 获取git仓库 2.1 本次初始化仓库 2.2 从远程仓库克隆 三、 本地仓库操作 3.1 将文件加入暂存区 3.2 将暂存区的文件提交到版本库 3.3 快捷键 使用快捷键 实现加入到暂存区与提交到版本库 3.4 查看日志 Show History 四、 远程仓库操…

Liquid UI和Fiori的区别

主要围绕以下几个方面就Liquid UI和Firor来进行比较: 开发周期开发成本稳定性和支援性平台架构 影响Firor决策的因素: 复杂的编程过程,Fiori对开发人员要求高,开发难度大,而Liquid UI让开发人员不需要懂SAP后端&…

eureka迁移到nacos--双服务中心注册

服务注册中心的迁移有多种方式,官网使用nacos sync,还有民间开发的双注册中心组件eureka-nacos-proxy,但是我用了不太顺利,所以用的是阿里巴巴的双注册中心组件edas-sc-migration-starter spring boot:2.5.3 引入依赖 …

JVM内存管理、内存分区:堆、方法区、虚拟机栈、本地方法栈、程序计数器

内存管理 内存分区 线程共享 堆 存放实例,字符串常量(直接引用),静态变量,线程分配缓冲区(TLAB线程私有)。垃圾收集器管理的区域 方法区 非堆,和堆相对的概念。存储已被虚拟机加载的…

Python大数据处理利器之Pyspark详解

摘要: 在现代信息时代,数据是最宝贵的财富之一,如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架,为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark…

使用 BERT 进行文本分类 (03/3)

一、说明 在使用BERT(2)进行文本分类时,我们讨论了什么是PyTorch以及如何预处理我们的数据,以便可以使用BERT模型对其进行分析。在这篇文章中,我将向您展示如何训练分类器并对其进行评估。 二、准备数据的又一个步骤 …

深度剖析java类和对象

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 在Java中,一切皆对象。 目录 一、类的定义和使用1.1类的定义格式1.2定义学生类 二、类的实例化三、this引…

MariaDB数据库服务器

目录 一、什么是数据库? 二、什么是关系型数据库? 三、数据库字符集和排序规则是什么? 四、常用数据类型 五、Mariadb数据库相关配置案例 一、什么是数据库? 数据库(DB)是以一定方式长期存储在计算机硬盘内…

【Terraform学习】使用 Terraform创建DynamoDB添加项目(Terraform-AWS最佳实战学习)

本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

Android JNI系列详解之ndk-build工具的使用

一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用,今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式: 如上图所示,第一种方式是Android.mkApplication.mkgradle的方式生成…

leetcode15. 三数之和(java)

三数之和 题目描述双指针法代码演示 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xf…

机器视觉工程师们,学习是工作以外的事情

面试时,领导问你,很多技术问题,你永远的回答是,我可以学。 公司以为你来公司的目标就是学习,学完就跑。 那你进公司的目标到底是什么? 我认为你,你最好想好再回答。 对于每一家公司来说&#xf…