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

目录

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.rhkb.cn/news/118329.html

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

相关文章

热门框架漏洞

文章目录 一、Thinkphp5.0.23 代码执行1.thinkphp5框架2.thinkphp5高危漏洞3.漏洞特征4.THinkphp5.0 远程代码执行--poc5.TP5实验一(Windows5.0.20)a.搭建实验环境b.测试phpinfoc.写入shelld.使用菜刀连接 6.TP5实验二(Linux5.0.23)a.搭建实验环境b.测试方法c.测试phpinfod.写入…

小程序快速备案助手代备案小程序开发

小程序快速备案助手代备案小程序开发 用户注册与登录:用户可以通过手机号或其他方式进行注册和登录,以便进行备案相关操作。备案信息填写:用户可以填写小程序的备案信息,包括小程序名称、小程序服务类目、域名等。备案材料上传&a…

ODC现已开源:与开发者共创企业级的数据库协同开发工具

OceanBase 开发者中心(OceanBase Developer Center,以下简称 ODC)是一款开源的数据库开发和数据库管理协同工具,从首个版本上线距今已经发展了三年有余,ODC 逐步由一款专为 OceanBase 打造的开发者工具演进成为支持多数…

香橙派Orangepi Zero2 刷机步骤

目录 1.香橙派Orangepi Zero2简介 2.刷机 2.1物料准备 2.2 格式化SD卡 2.3 烧录镜像到SD卡 2.4 安装SD卡到Orangepi 2.5 连接Pi电源 2.6 MobaXterm 串口登陆Orangepi 2.6.1 连线示意图 2.6.2 MobaXterm 使用 2.6.3修改登陆密码 2.6.4 网络配置 2.7 SSH登陆开发版…

14 mysql bit/json/enum/set 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 bit/json/enum/set 类类型的相关…

中心差分法-学习笔记《结构动力学-陈政清》

激励分段解析法仅仅对外载荷进行了离散,但对运动方程还是严格满足的,体系的运动在时间轴上依然是满足运动微分方程。然而,一般的时域逐步积分法进一步放松要求,不仅仅对外荷载进行离散化处理,也对体系的运动进行离散化…

c++入门一

参考:https://www.learncpp.com/cpp-tutorial/ When you finish, you will not only know how to program in C, you will know how NOT to program in C, which is arguably as important. Tired or unhappy programmers make mistakes, and debugging code tends…

Swift 如何从图片数据(Data)检测原图片类型?

功能需求 如果我们之前把图片对应的数据(Data)保持在内存或数据库中,那么怎么从 Data 对象检测出原来图片的类型呢? 如上图所示:我们将 11 张不同类型的图片转换为 Data 数据,然后从 Data 对象正确检测出了原图片类型。 目前,我们的代码可以检测出 jpeg(jpg), tiff,…

逻辑回归Logistic

回归 概念 假设现在有一些数据点,我们用一条直线对这些点进行拟合(这条直线称为最佳拟合直线),这个拟合的过程就叫做回归。进而可以得到对这些点的拟合直线方程。 最后结果用sigmoid函数输出 因此,为了实现 Logisti…

K8S自动化运维容器化(Docker)集群程序

K8S自动化运维容器化集群程序 一、K8S概述1.什么是K8S2.为什么要用K8S3.作用及功能 二、K8S的特性1.弹性伸缩2.自我修复3.服务发现和负载均衡4.自动发布和回滚5.集中化配置管理和秘钥管理6.存储编排7.任务批量处理运行 三、K8S的集群架构1.架构2.模式3.工作4.流程图 四、K8S的核…

如何解决vue3.0+typescript项目提示找不到模块“./App.vue

一、解决方案如下&#xff1a;需在项目目录下加上下面这段代码即可&#xff01;如果没有vite-env.d.ts目录需要继续往下看 declare module *.vue {import type { DefineComponent } from vueconst vueComponent: DefineComponent<{}, {}, any>export default vueCompon…

TBOX开发需求说明

TBOX功能需求&#xff1a; 支持4G上网功能&#xff0c;可获取外网IP&#xff0c;可和云端平台连通支持路由功能&#xff0c;支持计算平台、网关和云端平台建立网络连接支持USB转网口&#xff0c;智能座舱会通过USB连接AG35建立网络连接&#xff08;类似IVI通过USB口连接TBOX&a…

前端面试中Vue的有经典面试题二

7. Vue中给data中的对象属性添加一个新的属性时会发生什么&#xff0c;如何解决&#xff1f; 示例&#xff1a; 点击button会发现&#xff0c; obj.b 已经成功添加&#xff0c;但是视图并未刷新&#xff1a; 原因在于在Vue实例创建时&#xff0c; obj.b 并未声明&#xff0c;因…

SQL求解用户连续登录天数

数据分析面试过程中&#xff0c;一般都逃不掉对SQL的考察&#xff0c;可能是笔试的形式&#xff0c;也可能是面试过程中面试官当场提问&#xff0c;当场在纸上写出&#xff0c;或者简单说一下逻辑。 今天&#xff0c;就来分享一道面试中常常被问到的一类SQL问题&#xff1a;连…

推荐个一行代码的Python可视化神器

学过Python数据分析的朋友都知道&#xff0c;在可视化的工具中&#xff0c;有很多优秀的三方库&#xff0c;比如matplotlib&#xff0c;seaborn&#xff0c;plotly&#xff0c;Boken&#xff0c;pyecharts等等。这些可视化库都有自己的特点&#xff0c;在实际应用中也广为大家使…

在springboot中配置mybatis(mybatis-plus)mapper.xml扫描路径的问题

我曾经遇到过类似问题&#xff1a; mybatis-plus的mapper.xml在src/main/java路径下如何配置pom.xml和application.yml_idea 把mapper文件放到java下如何配置_梓沂的博客-CSDN博客 当时只是找到解决问题的办法&#xff0c;但对mybatis配置来龙去脉并未深入了解&#xff0c;所…

操作系统备考学习 day1 (1.1.1-1.3.1)

操作系统备考学习 day1 计算机系统概述操作系统的基本概念操作系统的概念、功能和目标操作系统的四个特征并发共享虚拟异步 操作系统的发展和分类操作系统的运行环境操作系统的运行机制 年初做了一个c的webserver 的项目&#xff0c;在学习过程中已经解除部分操作系统的知识&am…

解决Debian系统通过cifs挂载smb后,中文目录乱码问题

解决Debian系统通过cifs挂载smb后&#xff0c;中文目录乱码问题 //$smb_server/share /mnt/nas_share cifs credentials/root/.smbcredentials,iocharsetutf8 0 0默认通过以上命令挂载smb&#xff0c;但是在查看文件目录时&#xff0c;中文乱码 解决问题方式&#xff1a; de…

C语言——指针基本语法

概述 内存地址 在计算机内存中&#xff0c;每个存储单元都有一个唯一的地址(内存编号)。 通俗理解&#xff0c;内存就是房间&#xff0c;地址就是门牌号 指针和指针变量 指针&#xff08;Pointer&#xff09;是一种特殊的变量类型&#xff0c;它用于存储内存地址。 指针的实…

iOS脱壳之frida-ios-dump

frida-ios-dump介绍 该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件&#xff0c;适合现iOS11版本之后的越狱手机使用。 下载 https://github.com/AloneMonkey/frida-ios-dump环境安装 电脑环境安装 win和Mac 环境一样都是…