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

目录

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.mzph.cn/news/60198.shtml

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

相关文章

【软考】系统集成项目管理工程师(一)信息化基础知识【6分】

一、信息与信息系统 1、信息技术 为解决信息的采集、加工、存储、传输、处理、计算、转换、表现等问题而不断繁荣发展 核心-传输技术(通常指通信、网络等) 2、信息的质量属性 特点:客观性、普遍性 属性描述精确性对事物状态描述的精准程度…

图书馆项目Java阅览室管理系统jsp源代码MySQL

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 图书馆项目 系统有1权限:管理员 用所技术…

LeetCode 面试题 02.01. 移除重复节点

文章目录 一、题目二、C# 题解 一、题目 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 点击此处跳转题目。 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] 示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, …

Centos7 安装 docker

1、前提条件 目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS7 (64)上, 要求系统为64位、Linux系统内核版本为 3.8以上 查看自己系统的内核 cat /etc/redhat-release 或 uname -r 2、卸载旧版本 旧版本的 Docker 的名称为docker或doc…

【注册岩土】Python土力学与基础工程计算.PDF-摩尔-库伦强度理论

8.3 Python求解 Python求解代码如下: 1.import math 2. 3.sigma1 300 # 最大主应力,单位 kPa 4.sigma3 100 # 最小主应力,单位 kPa 5.alpha 30 # m-n面与最小主应力方向夹角,单位度 6. 7.rad_alph…

【MYSQL学习笔记】管理MYSQL和使用MYSQL语句

一、前言 MySQL提供了大量的SQL语句用于管理。很多时候,通过SSH远程连接时,只能使用SQL命令,所以,了解并掌握常用的SQL管理操作是必须的。 二、管理MYSQL 输入SQL后,记得加一个;,再回车执行该语句。虽然…

Matlab图像处理-图像旋转

基本概念 图像的旋转变换属于图像的位置变换,通常是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角度。旋转后,图像的大小一般会改变。图像的旋转变换是指以图像的中心为原点,将图像上的所有像素都旋转同一个角度的变…

MFA 与 ADSelfService Plus 的身份验证!

随着信息技术的不断进步,网络威胁也在不断演化。为了保护敏感数据和网络资源,企业和组织需要采取更多的安全措施。多重因素认证(MFA)已经成为了现代安全战略的核心组成部分之一。在这篇文章中,我们将深入探讨MFA&#…

AUTOSAR规范与ECU软件开发(实践篇)7.4 MCAL模块配置方法及常用接口函数介绍之Port的配置

目录 1、前言 2 、Port模块 (1) Port General配置 (2) PortConfigSet配置

Java-API简析_java.io.FilePermission类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/132594530 出自【进步*于辰的博客】 因为我发现目前,我对Java-API的学习意识比较薄弱…

ubuntu系统安装tensorRT-8.6.1版本(2023-8月最新版)

目录 前言pip安装可能出现的报错: tar.gz安装 前言 看了无数教程和b站视频,啊啊啊啊啊啊啊啊啊啊啊tensorRT要我狗命啊。我要写全网tensorRT最全的博客!!! 总体来说成功安装方式有两种,pip安装和tar.gz安装(其实官网安装方式居多…

腾讯云服务器镜像TencentOS Server有用过的吗?

腾讯云服务器镜像TencentOS Server操作系统有用过的吗?踩过坑吗?TencentOS性能和稳定性如何?TencentOS Server与CentOS保持兼容,在稳定性、性能、容器基础设施等核心能力方面做了全面的增强和优化,能为企业提供稳定高可…

Python基础算法——反转链表

视频详解:https://www.bilibili.com/video/BV1sd4y1x7KN/?spm_id_from333.788&vd_source11069f01f7471094186b646e3a184ca3 一、反转链表 LeetCode 206题:https://leetcode.cn/problems/reverse-linked-list/description/ 给你单链表的头节点 h…

NTP时钟同步服务器

目录 一、什么是NTP? 二、计算机时间分类 三、NTP如何工作? 四、NTP时钟同步方式(linux) 五、时间同步实现软件(既是客户端软件也是服务端软件) 六、chrony时钟同步软件介绍 七、/etc/chrony.conf配置文件介…

JAVA中,继承父类和重写父类方法有什么区别?

在Java中,继承和重写都是面向对象编程的重要概念,但它们有着完全不同的作用: 继承:继承是对象之间的一种关系,子类(派生类)会继承父类(基类)的属性(成员变量&…

C++11 std::transform函数使用说明

std::transform是C标准库中的一个算法,它用于对输入范围内的元素进行操作,并将结果存储在输出范围内。这个算法特别适合于将一种数据类型转换为另一种数据类型。 函数定义在头文件algorithm中 std::transform的基本语法如下: std::transfor…

26.仪表板侧边栏菜单

效果 源码 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sidebar Menu</title> <link rel="stylesheet" type="text/css"…

【Tkinter系列06/15】菜单小部件

15. 小部件Menu “下拉菜单”是一种流行的方式 为用户提供多种选择&#xff0c;但占用 应用程序表面的最小空间&#xff0c;当 用户没有做出选择。 菜单按钮是 始终显示在应用程序上。 菜单是选项列表 仅在用户单击 菜单按钮。 要选择一个选项&#xff0c;用户可以将鼠标从 菜…

go 协程

golang中的并发是函数相互独立运行的能力。Goroutines是并发运行的函数。Golang提供了 如何实现go协程 只需要在函数前面加上go即可 go task()package mainimport ("fmt""time" )func show(msg string) {for i : 0; i < 5; i {fmt.Printf("msg: …

微服务学习资料

文章目录 参考资料一. 微服务概述1. CAP理论2. BASE理论3. SpringBoot 与 SpringCloud对比 二. 服务注册&#xff1a;Zookeeper,Eureka,Nacos,Consul1. Nacos两种健康检查方式&#xff1f;2. nacos中负责负载均衡底层是如何实现的3. Nacos原理4. 临时实例和持久化(非临时)实例 …