机器学习基本概念(附代码)

一、算法与模型的关系

在机器学习领域,算法和模型是两个核心概念。算法是一种偏抽象的概念,它定义了计算机解决问题的步骤和流程。而模型则是更加具体的概念,通过代码实现特定算法来完成任务。数学上,一个简单的模型可以表示为 y=f(x),其中 x 是样本特征,y 是样本标签,模型的目标就是将输入特征 x 映射到输出标签 y。

二、机器学习项目流程

在这里插入图片描述

  • Step1: 项目分析

    首先明确项目的外部特性,包括输入和输出是什么,并确定这是一个分类还是回归问题。例如,在鸢尾花识别项目中,输入是一朵花的特征(如花萼长度、宽度等),输出是该花所属的子品种。

  • Step2: 数据采集
    数据采集是构建数据集的过程,基于输入和输出的需求进行。本质上是数理统计问题,采集总体的一个样本集,通过样本集的统计量来估计总体的统计量,

    人工智能项目的本质,通过对样本的分析,来评估/估计 总体的情况

    数据采集之后的结果是结构化数据:成行成列,确保每行代表一个样本,各行之间保持独立同分布,每列代表一个特征,各个特征之间是独立的,每一个列也代表一个变量,变量分为离散型变量连续型变量

    离散型变量:有限个状态,不同的状态值,状态之间无大小、程度等概念,状态之间是严格对立的!!!,比如男或者女,高或者矮,天晴或者下雨,

    连续型变量:无限个数值,数值之间是大小、程度的差异,内涵是一致的,长度,深度等程度问题,比如长度10.5米。

    怎么理解独立同分布?
    这包含2个意思,独立性同分布
    独立性指的是样本之间没有直接的关系或影响。具体来说,如果两个样本X1和X2是独立的,那么知道X1的信息不会给你关于X2的任何额外信息。换句话说,每个样本点的生成过程不受其他样本点的影响。
    同分布意味着所有样本都来自于同一个概率分布。这意味着每一个样本都有相同的分布函数,包括均值、方差等统计特性都是相同的。如果一个样本集是同分布的,那么无论你选择哪一个样本,它都应该具有相似的概率分布特征。

  • Step3: 数据预处理
    包括数据清洗(去除重复值、缺失值、异常值、无效特征)、数据切分(训练集、验证集、测试集)以及数据预处理(中心化、归一化、标准化)等步骤。

    训练集:训练过程中,用来训练模型(模型的学习数据)

    验证集:在训练过程中,用来验证模型的效果(不参与学习过程)

    测试集:训练完成后,用来评估模型的效果(不参与学习过程)

    在实际工作中,经常把验证集和测试集合并,一起使用

  • Step4: 模型选择
    根据问题是分类还是回归来选择合适的模型,主要是根据标签来判断是分类还是回归。例如,对于分类问题可以选择逻辑回归KNN朴素贝叶斯支持向量机决策树集成学习等;对于回归问题,则可能选择线性回归KNN支持向量机决策树集成学习等。

  • Step5: 训练模型
    使用训练集的数据对模型进行训练,即让模型学习如何将输入特征映射到输出标签。把训练集的特征 X_train 和标签 y_train 给模型 fit 方法,进行训练,

    本质:模型学习的过程!学习如何把 X 映射为 y

  • Step6: 评估模型
    评估模型的效果,分类问题可以通过准确率accuracy召回率recall精准率precisionF1-score等指标;回归问题则常使用MAE:平均绝对误差MSE:平均平方误差等指标。

  • Step7: 保存和部署模型
    最后,保存训练好的模型以便后续加载和部署应用。

三、示例:鸢尾花识别项目

  1. 项目分析
    项目需求:鸢尾花有3个子品种,想通过机器学习算法来做分类预测!进一步思考:
- 任务:给定一朵花,让模型识别到底是哪个子品种!
- 输入:一朵花
	- 一朵花是不能直接输入计算机中
    - 特征工程:
		- 数字化转型
		- 抽取/构建跟这朵花的类别有关系的特征来代表这朵花!!!
			- 跟业务专家详细咨询:
				- 花萼长度 x1
				- 花萼宽度 x2
                - 花瓣长度 x3
                - 花瓣宽度 x4
- 输出:子品种:
	- 分类问题:
	- 对状态进行编码:
    	- N个状态:
        	- 0, ..., N-1
        - 3个类别:
        	- 0
            - 1
            - 2

目标是对鸢尾花的3个子品种进行分类预测。输入为花朵的四个特征(花萼长度、宽度,花瓣长度、宽度),输出为目标子品种编码。

  1. 加载数据
    使用sklearn.datasets.load_iris()加载鸢尾花数据集,并检查其基本信息。
from sklearn.datasets import load_iris
result = load_iris()
dir(result)
print(result.DESCR)
X, y = load_iris(return_X_y=True)
# X.shape
# (150, 4)
# y.shape
# (150,)
['DESCR',
 'data',
 'data_module',
 'feature_names',
 'filename',
 'frame',
 'target',
 'target_names']

在这里插入图片描述

  1. 切分数据
    利用train_test_split函数按比例分割数据集。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
  1. 套用模型
    采用K近邻算法作为模型,并对其进行训练。
from sklearn.neighbors import KNeighborsClassifier
# 实例化对象
knn = KNeighborsClassifier()
# 训练模型
knn.fit(X=X_train, y=y_train)
# 模型预测
y_pred = knn.predict(X=X_test)
# 预测结果
y_pred
# 真实结果
y_test
  1. 模型评估
    计算预测结果的准确性。
acc = (y_pred == y_test).mean()
# 0.9666666666666667
  1. 模型的保存和加载
    使用joblib库保存和加载模型。
import joblib
# 模型的保存
joblib.dump(value=knn, filename="knn.model")
# 模型的加载
model = joblib.load(filename="knn.model")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV:特征检测总结

目录 一、什么是特征检测? 二、OpenCV 中的常见特征检测方法 1. Harris 角点检测 2. Shi-Tomasi 角点检测 3. Canny 边缘检测 4. SIFT(尺度不变特征变换) 5. ORB 三、特征检测的应用场景 1. 图像匹配 2. 运动检测 3. 自动驾驶 4.…

深度学习系列--01.入门

一.深度学习概念 深度学习(Deep Learning)是机器学习的分支,是指使用多层的神经网络进行机器学习的一种手法抖音百科。它学习样本数据的内在规律和表示层次,最终目标是让机器能够像人一样具有分析学习能力,能够识别文字…

Vue3.5常用特性整理

Vue3.5 发布已近半年&#xff0c;抽空整理下常用的新增/改动特性 响应式 Props 解构 Vue3.5 中 Props 正式支持解构了&#xff0c;并添加了响应式跟踪 设置默认值 使用 JavaScript 原生的默认值语法声明 props 默认值 以前 const props withDefaults(defineProps<{ co…

Windows程序设计10:文件指针及目录的创建与删除

文章目录 前言一、文件指针是什么&#xff1f;二、设置文件指针的位置&#xff1a;随机读写&#xff0c;SetFilePointer函数1.函数说明2.函数实例 三、 目录的创建CreateDirectory四、目录的删除RemoveDirectory总结 前言 Windows程序设计10&#xff1a;文件指针及目录的创建与…

【Linux系统编程】进程间通信(管道:匿名管道、命名管道、实战练习)

知其然&#xff0c;知其所以然 什么是进程间通信&#xff1a; 进程间通信是不同进程间交换信息的一种机制。进程可能在同一台计算机上&#xff0c;也可能在网络中的不同计算机上。那我们为什么要有这种机制&#xff1a; 为什么进程间要通信&#xff1a; ①数据共享&#xff…

K8S ReplicaSet 控制器

一、理论介绍 今天我们来实验 ReplicaSet 控制器&#xff08;也叫工作负载&#xff09;。官网描述如下&#xff1a; 1、是什么&#xff1f; ReplicaSet 副本集&#xff0c; 维护一组稳定的副本 Pod 集合。 2、为什么需要&#xff1f; 解决 pod 被删除了&#xff0c;不能自我恢…

【C语言】自定义类型讲解

文章目录 一、前言二、结构体2.1 概念2.2 定义2.2.1 通常情况下的定义2.2.2 匿名结构体 2.3 结构体的自引用和嵌套2.4 结构体变量的定义与初始化2.5 结构体的内存对齐2.6 结构体传参2.7 结构体实现位段 三、枚举3.1 概念3.2 定义3.3 枚举的优点3.3.1 提高代码的可读性3.3.2 防止…

VUE2双向绑定的原理

文章目录 VUE2双向绑定的原理1. 什么是双向绑定2. 双向绑定的原理2.1 ViewModel的重要作用2.2 双向绑定的流程 3. 双向绑定的实现3.1 data响应化处理3.2 Compile编译3.3 依赖收集 VUE2双向绑定的原理 1. 什么是双向绑定 讲双向绑定先讲单项绑定&#xff0c;啥叫单项绑定&…

入行FPGA设计工程师需要提前学习哪些内容?

FPGA作为一种灵活可编程的硬件平台&#xff0c;广泛应用于嵌入式系统、通信、数据处理等领域。很多人选择转行FPGA设计工程师&#xff0c;但对于新手来说&#xff0c;可能在学习过程中会遇到一些迷茫和困惑。为了帮助大家更好地准备&#xff0c;本文将详细介绍入行FPGA设计工程…

Mac M1 ComfyUI 中 AnyText插件安装问题汇总?

Q1&#xff1a;NameError: name ‘PreTrainedTokenizer’ is not defined ? 该项目最近更新日期为2024年12月&#xff0c;该时间段的transformers 版本由PyPI 上的 transformers 页面 可知为4.47.1. A1: transformers 版本不满足要求&#xff0c;必须降级transformors &#…

深度学习 Pytorch 神经网络的学习

本节将从梯度下降法向外拓展&#xff0c;介绍更常用的优化算法&#xff0c;实现神经网络的学习和迭代。在本节课结束将完整实现一个神经网络训练的全流程。 对于像神经网络这样的复杂模型&#xff0c;可能会有数百个 w w w的存在&#xff0c;同时如果我们使用的是像交叉熵这样…

Java 大视界 -- 深度洞察 Java 大数据安全多方计算的前沿趋势与应用革新(52)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Docker使用指南(二)——容器相关操作详解(实战案例教学,创建/使用/停止/删除)

目录 1.容器操作相关命令​编辑 案例一&#xff1a; 案例二&#xff1a; 容器常用命令总结&#xff1a; 1.查看容器状态&#xff1a; 2.删除容器&#xff1a; 3.进入容器&#xff1a; 二、Docker基本操作——容器篇 1.容器操作相关命令 下面我们用两个案例来具体实操一…

【C++】STL——list的使用

目录 &#x1f495;1.带头双向链表List &#x1f495;2.list用法介绍 &#x1f495;3.list的初始化 &#x1f495;4.size函数与resize函数 &#x1f495;5.empty函数 &#x1f495;6.front函数与back函数 &#x1f495;7.push_front,push_back,pop_front,pop_back函数…

Java面试题集合篇5:10道基础面试题

文章目录 前言41、多线程使用 ArrayList42、List 和 Set 区别43、HashSet 实现原理44、HashSet检查重复和保证数据不可重复45、BlockingQueue46、Map接口46.1、HashMap实现原理46.2、HashMap在JDK1.7和JDK1.8中不同点46.3、JDK1.7 VS JDK1.8 比较 47、HashMap的put方法流程48、…

控件【QT】

文章目录 控件QWidgetenabledgeometrysetGeometry qrcwindowOpacityQPixmapfonttoolTipfocusPolicystyleSheetQPushButtonRadio ButtionCheck Box显示类控件QProgressBarcalendarWidget 控件 Qt中已经提供了很多内置的控件了(按钮,文本框,单选按钮,复选按钮&#xff0c;下拉框…

docker pull Error response from daemon问题

里面填写 里面解决方案就是挂代理。 以虚拟机为例&#xff0c;将宿主机配置端口设置&#xff0c;https/http端口设为7899 配置虚拟机的http代理&#xff1a; vim /etc/systemd/system/docker.service.d/http-proxy.conf里面填写&#xff0c;wq保存 [Service] Environment…

linux 进程补充

环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪 里&#xff0c;但是照样可以链接成功&#…

一文解释pytorch 中的 squeeze() 和 unsqueeze()函数(全网最详细版)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;零基础入门PyTorch框架_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 …

QT:对象树

1.概念 Qt 中的对象树是一种以树形结构组织 Qt 对象的方式。当创建一个QObject&#xff08;Qt 中大多数类的基类&#xff09;或其派生类的对象时&#xff0c;可以为其指定一个父对象&#xff08;parent&#xff09;。这个对象就会被添加到其父对象的子对象列表中&#xff0c;形…