【人工智能】人工智能学习基础知识汇总
第1章初识人工智能
本章着重阐述人工智能的概念、起源与发展历程。具体阐述了人工智能概念的萌芽及其相关重要人物,并详细探讨了人工智能发展的几个关键阶段:包括诞生期、两次技术革命时期(即所谓寒冬)、稳步发展阶段以及新时代。
本章的主要知识点如下:
人工智能概念
人工智能被称为"Artificial Intelligence" ,其缩写为 Al 。它通过人工设计的方法在计算机系统上完成对数据的自动学习与理解
机)上实现的智能;或者说是人们使机器具有类似于人的智能。
2. 人工智能学科涉及研究制造智能设备(如智能计算机)或构建智能系统,使其能够模仿和复制现有的功能与行为,并延伸其应用范围。
伸、扩展人类智能的学科。
3. 图灵测试是现在人工智能来判断一个机器是不是有智能的依据。
重要人物
约翰·冯·诺依曼(John von Neumann, 1903年12月28日-1957年2月8日),一位美籍匈牙利的学者,在数学、计算机科学以及物理学领域都是杰出的专家。他在二十世纪对科学界做出了卓越贡献,并被后人尊称为"现代计算机先驱"和"博弈论奠基人"。
A.M.T., 英国著名数学家、逻辑学家 Alan Turing, 出生于 1912 年 6 月 23 日, 去世于 1954 年 6 月 7 日。被誉为计算机科学奠基人的同时也是人工智能先驱。其于 1950 发表的经典论文《计算机器与智能》首次提出"机器思维"(Machine Thought)以及"图灵测试"(Turing Test)的概念,在其论文中深入探讨了"机器是否具备人类-like 思维能力?"这一至今仍具争议性的问题。
"人工智能"的诞生 1. 达特茅斯会议最初明确提出了"人工智能"这一术语,Artificial Intelligence,Al, 并持续使用至今
所以此次会议也就被认为是人工智能正式诞生的元年
- 达特茅斯会议(1956 年 ) :
1956年,在美国汉诺思小镇一处安静的达特茅斯学院(位于罗德岛州),一群研究人员决定举办一次为期两个月的封闭式研讨会与研究活动
3. 达特茅斯会议主要参会者:
特伦查德摩尔,数学家和计算机科学家,曾在IBM的沃森研究中心工作;
约翰麦卡锡,达特茅斯会议的发起人,1971年图灵奖得主, Lisp语言创始人。
马文闵斯基(Minsky),著名认知科学家,在上世纪五十年代初开创性地设计出首个人工神经网络模型,并成功实现了对40个虚拟仿生神经元的建模
奥利弗·塞弗里奇以其在机器感知领域的开创性贡献而闻名。 雷·索罗门·诺夫夫因其对经验概率理论的深入研究而成为该领域的先驱。
人工智能的第一次浪潮(1956-1974)
计算机在使用“推理和探索”时取得较大发展,主要事件:
1. 聊天程序ELIZA 的诞生、机器学习之父亚瑟塞缪尔(Arthur Lee Samuel,1901-1990),
1959年开发的西洋跳棋程序打败了当时的西洋棋大师。
2. 1958年麦卡锡开发了LISP 语音。
斯坦福研究院 (SRI) 的人工智能中心在1966年至1972年间研发了世界上第一台真正意义上的移动机器人Shakey。
4. 多层神经网络、反向传播算法开始出现。
5. 专家系统开始起步。
人工智能的第一次寒冬(1974-1980)
在当时,人工智能面临的技术瓶颈主要是三个方面:
令科学家们感到最为棘手的是尽管看似理论上可解的问题中包含着大量简化的规则集合与极简的棋子布局,在实际操作中所造成的计算负担却呈指数级放大,并非易事
计算机的能力不足以满足需求。与其说飞机需要足够的动力才能起飞,不如说它必须具备强大的推动力才能安全升空。人工智能同样面临着能力与需求之间的挑战
的计算力才能真正发挥作用。
3. 数据资源极度匮乏。人工智能系统通常需要依赖大量的人类经验和真实世界的反馈数据才能实现有效的学习与适应。即便是一个刚满3岁的婴儿,在经过接触和学习超过十亿张图像后才能形成这种能力
人工智能的第二次浪潮(1980-1987)
- 专家系统 (Expert System)
1980年卡内基梅隆大学(CMU)成功研发出XCON系统并投入使用, 这标志着这一时期的重要转折, 专家系统开始在特定领域展现潜力, 推动人工智能技术迈向发展新纪元.
在1982年, 美国数十家大型企业共同创立了微电子与计算机技术公司(MCC), 该机构于1984年启动了人工智能领域的规模最大的、充满争议性的项目Cyc。该计划至今仍在运行
2. 日本的实现并行计算第五代计算机系统
1982年,日本通过大量多核心处理器的并行计算来探索应对人工智能领域的计算需求.该国的这一举措推动了人工智能技术的发展.
第五代计算机体系结构(Fifth Generation Computer Systems, FGCS)负责开发支持多处理器并行计算功能的专用硬件架构。
3.VaMoRs:
1986年在德国
人工智能的第二次寒冬(1987-1993)
1987年时,在台式机领域中,苹果与IBM公司的制造水平显著优于当时使用的普通计算机。人工智能领域再次陷入停滞发展时期。
现有知识描述与知识管理系统暴露出诸多缺陷,在人工智能技术快速发展背景下单纯依赖传统专家系统的做法已显不足。传统专家系统缺乏自主学习能力、动态更新机制以及算法优化能力,在日常维护工作中日益繁重且成本持续攀升。长期下来这使得大量企业最终放弃了传统专家系统的应用并转向更为先进的信息处理方案
人工智能的稳健时代(1993-2011)
1. 1997年世纪之战, IBM 深 蓝****VS******** 卡斯帕罗夫计算机战胜人类世界象棋冠军。
2.2009年, 谷歌开始小范围地进行无人驾驶汽车技术的小范围测试;直至2014年, 谷歌成为第一个在美国各州开展无人驾驶汽车测试的公司。
3. 华裔研究人员吴恩达及其团队自2009年起开始运用图形处理器技术进行大规模应用。
监督式的人工智能学习任务旨在让人工智能程序自主完成对图形中内容的识别。
人工智能的********ABC 新时代(2012~)
2012年, 吴恩达获得了令人瞩目的成就, 向世人展示了 一项超强的神经网络, 该系统在经过自行学习训练后能够识别出大量含有猫图像的内容. 这一壮举标志着人工智能领域实现了无监督学习的新突破.
- 人 工 智 能 (Al)、 大 数 据 (Big Data)、云 计 算 (Cloud) 的 融 合 。
第2章行业应用案例 第3章算力和大数据 人工智能技术架构
人工智能技术架构
基于机器学习和深度学习的人工智能技术架构主要依赖于计算机技术和体系来完成多种实现方式。
自底向上依次为基础层、技术层和应用层。
2. 人工智能的三项基础包括算法演算规则、海量数据处理方法以及运算力量。机器学习算法是支撑人工智能在实际应用中落地的关键工具。
在众多领域中
计算能力所依赖的基础硬件是运行Algorithm算法所需的芯片以及相关的计算平台。芯片则是硬件体系中不可或缺的核心组件。
重要组成部分。包括两个计算过程: 1、训练;2、执行
算力简介
1. 通用AI 芯片的特点: > 可编程性
架构动态可变性 > 高计算效率
低成本低功耗 > 体积小
应用开发简便
2.GPU/FPGA/AI 专用芯片快速发展,GPU比 CPU 拥有更多的并行计算单元
- 任何高性能计算和超级计算都离不开使用并行技术。
并行处理技术即通过多资源协同处理来完成的问题解决过程,并用于加速处理系统的运行速度
作为一种提高处理效率的有效手段。
并行计算的主要特性包括:
将任务划分为独立的部分,
从而能够实现同时处理;
随时并及时地执行多个程序指令;
多计算资源下解决问题的耗时要少于单个计算资源下的耗时。
- 大数据(Big Data):
大数据通常被定义为规模超过了现有技术手段难以有效处理的数据集合。
大数据成为目前无法满足现有数据集规模下存储技术和处理能力以及计算技术和处理能力所导致产生的相对概念
大数据可视化技术旨在借助于图形化手段,清晰有效地创达与沟通信息。
第 4 章 算 法
无监督学习算法:
无监督学习 (Unsupervised learning) 定义:通过分析未标注的数据集识别模式和结构。其主要特征是输入数据(训练数据)缺乏明确的标签信息,并且不包含分类信息。
无监督学习的算法主要有聚类和降维算法。
1. 聚类算法:
聚类算法主要通过识别潜在的结构来发现数据中的关系,并将这些数据划分为不同的类别。它主要基于输入的数据样本。
“自动”学习,给定数据,寻找隐藏的结构或模式。
聚类算法主要用于将事物进行分类。
常见的聚类方法包括K-means聚合法与层次聚合法等。
2. 降维算法
特征降维度数:对于输入的一个由多个字段构成的矩阵数据源,在进行特征降维时其目的是通过识别和提取这些关键字段以降低整个数据空间的复杂度。
② 主要任务:
● 确保变量间的相互独立性;
● 减少计算量; ● 去噪。
③ 降维的常用方法:主成分分析 (PCA) 和线性判断分析 (LDA)
监督学习算法
监督学习 (Supervised learning)基于一组已知类别标签的数据集训练生成模型,并使其具备良好的性能水平。
监督学习常用算法有分类、回归和神经网络算法等。
分类算法:该算法基于对已知类别训练集进行深入研究,并在此过程中归纳出分类规则以判断新数据所属类别。
① 分类算法任务:根据历史数据形成的类标识,预测新数据的归类情况。
② 分类算法应用:用于用户画像
③ 常用的分类算法有: > 决策树
支持向量机
贝叶斯
KNN(K最近邻) > 随机森林
④ 分类算法常用评估指标有:
精确率:预测结果与实际结果的比例
召回率:预测结果中某类结果的正确覆盖率
F1-Score: 统计量,综合评估分类模型,取值在0-1之间。
线性回归算法旨在建立一个线性模型以最大限度地精确地预测连续型输出变量。基于样本数量
通过建立一个线性模型来分析未来的气温和股市变化趋势。
神经网络
神经网络体系:由计算架构构成。构建运算模型的是大量节点(或称神经元)之间的相互连接。
理非结构化的数据,比如图像、文本、语音。
神经网络的工作机制主要基于对人类思维模式的数学模拟;从信息处理的角度分析人类神经系统结构
络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络。
3. 神经元:神经网络的基本单位。
模型是一个包含输入,输出与计算功能的模型。
信息流可以类比于神经元的树状结构;信号传输通道对应于神经元的轴突部分;数据处理中心相当于细胞核。
- 所有的神经网络都由一个输入层、一个输出层和任意数量的隐藏层组成。
5. 基于神经网络技术的声图文处理领域的核心算法:
图像识别:任务的主要内容包括图像分类和目标识别两种类型。主流算法包括Convolutional Neural Networks(CNN)和You Only Look Once(YOLO)。
文本处理:文本处理主要涉及自然语言的处理工作,并涵盖对话系统和翻译系统两大模块。采用的主要算法包括 LSTM 和 Seq2Seq 模型。
语音处理:在语音领域中主要的应用包括语音识别技术以及音频信号处理等多种技术,在算法层面常用的算法包括LSTM网络和序列到序列模型(Seq2Seq)。
第5章智能语音技术 语音识别系统架构
特征提取即是从语音波形中获取包含语音特征的关键信息,并去除了非关键细节如背景噪音。通过将这些关键信息转化为一组离散的参数向量来完成这一过程。
声学分析模型:是语音识别系统的基础层次模型,在此过程中需要生成语音信号的时间序列特征向量,并为每个样本分配相应的属性信息
发音模板之间的距离的方法。
语言模型 LM: 其核心任务在于生成通顺、有意义的句子结构的同时准确地识别并解析出正确的语义信息
歧义的单词。
编码检索:其主要功能是整合训练好的模型按照预设规则进行工作,并识别新输入的语音信号。
语音识别技术
该智能语音识别技术涵盖多种核心技术包括但不仅限于语音合成生成自然音质的声音实现精确的语音识别通过先进的算法进行声音分析支持多语言的实时翻译提供声音增强技术以提升弱声音信号的质量以及基于声纹特征的生物ometric身份验证系统等
2. 语音识别主要技术问题: > 语音的模糊性。
对自然语言的识别和理解。
单个字母或词、字受到其所在上下文的影响而改变其语音特性——包括重音位置、声调高低以及声音大小和说话速度。
由于具有显著的信息量,在分析时会考虑每种声音信号的特征值及其对应的语义意义。 > 在实际应用中发现该算法在处理高斯混合模型时效率较低的原因在于其复杂的计算过程导致收敛速度较慢.
3. 智能语音的核心技术:
语音识别 (ASR)
自然语言处理(NLP) > 语音合成技术(TTS)
第 6 章 NLP****技术 自然语言处理
自然语言处理技术(缩写:NLP),主要依靠计算机作为工具来理解和生成人类所使用的书面语和口语中的自然语言信息,并通过多种处理与加工手段的技术实现对这些信息的分析与转换。
自然语言理解
自然语言理解(NLU)旨在解析并赋予机器对文本内容的理解能力;其目标是使机器人能够像人类一样进行自然语言交流与处理。
自然语言理解(NLU) 难点:
- 语言的多样性
自然语言具有多样化的组合方式,在从单个字到复杂的段落之间展现出无穷的变化潜力。通过不同的组合能够传达丰富多样的信息。
- 语言的歧义性
虽然没有结合具体情境去阐述问题, 也未能对所处环境进行必要的限定, 因此导致了表述上的较大模糊性和不确定性; 在词法层面上存在多种可能的理解, 在句法层面上也存在多种不同的解析方式; 同时在语义层面上也会产生多重解读; 最终还可能因为指代引发的不同理解而导致严重的歧义现象出现
- 语言的鲁棒性
自然语言在输入时,在尤其通过语音识别获取的文本中会面临多字 缺字 误字以及噪声等挑战
4. 语言的知识依赖
语言是对世界的符号化描述,语言天然连接着世界知识。
- 语言的上下文
从概念上来看,涵盖多种类别:对话情境涵盖各种场景;设备环境涉及不同硬件配置;应用生态覆盖广泛的功能模块;用户特征则基于典型行为模式。
自然语言生成(NLG)
NLG 表示为计算机非语言数据与人类可理解自然语言之间的转换机制,在处理复杂性方面属于自然语言生成技术(NLG)的独特范畴
言生成的主要问题。
2. 自然语言生成3个级别(Level):
简单的数据合并 > 模板化的NLG
高 级NLG
3.NLG 生成方式:
文本到语言的生成 > 数据到语言的生成
- 自然语言生成 (NLG) 的6个步骤
① 内容确定:NLG 系统决定哪些信息包含在正在构建的文本中
② 文本结构:NLG 系统合理的组织文本的顺序
③ 句子聚合:将多个信息合并到一个句子里表达
④ 语法化:在各种信息之间加连接词,组成完整的句子
⑤ 参考表达式生成:识别出内容的领域,使用该领域的词汇构成完整的句子
⑥ 语言实现:所有的单词和短语确定后,组合起来形成结构良好的完整句子。
NLP********技术架构
- 自然语言处理技术框架
自 然 语 言 处 理 技 术 基 本 内 涵 : 词 法 分 析 、 句 法 分 析 、 语 义 分 析 。 2.NLP 基础技术
词法分析:包括词形和词汇两个方面。
句 法 分 析 : 对 用 户 输 入 的 自 然 语 言 就 词 性 词 汇 短 语 的 分 析 。
语义解析:依据自然语言的语义信息进行的一种语义解析手段;它不仅涉及词法层面和句法层面的详细研究,并且涵盖这种语法层次上的深入剖析。
语用分析:相对于语义分析又增加了对上下文、语言背景、环境等的分析。
在语境分析方面:通过深入研究多个关键区域(即'空白区域'),有助于准确理解目标语言的技术。
3. NLP 核心技术
关键信息提取: 根据给定文本提取出关键的信息包括时间点定位(例如确定具体事件发生的时间)、地点识别(例如识别出场所名称)、人物分析(例如识别出人物身份及其相关属性)、事件描述(例如总结事件的主要过程)、原因分析(例如揭示事件发生的潜在原因)、结果预测(例如推断出可能的结果)以及数值分析(例如识别出相关统计数据或计量单位)。这些技术涵盖关键技术领域中的实体识别技术
文本挖掘(即涉及文本数据挖掘):涵盖从文本聚类到分类任务的多个子领域,并包含信息提取与总结生成两大核心内容。此外还包括对发现的信息及其知识进行**展示(可视化)**及其相应的交互设计工作。现有主流的方法主要依赖于基于统计机器学习的技术。
机器翻译技术:它是一种将输入源语言文本通过自动翻译技术获得目标语言文本的技术。基于输入进行处理,并根据输入生成相应的输出内容。
传播手段各有差异,具体可分为文字转换、声音转换、手语转换以及图像转换等多种形式。 > 信息检索: 从文档集合中提取所需信息的行为。
◆ “存”:对信息进行收集、标引、描述、组织,进行有序的存放。
◆ “取”:按照某种查询机制从有序存放的信息集合(数据库)中找出用户所需
信息或获取其线索。
检索结果生成:将用户的搜索关键词与数据库中的索引词进行比对运算,在两者达到匹配条件时完成搜索任务。系统会根据提问词的相关程度对检索结果进行排序输出,并将这些信息展示给用户供其筛选查看;用户可以通过"关键词搜索配合逐步拓展"的方式获取所需信息
问答系统针对自然语言表达的问题提供精确的回答。该过程涉及对自然语言查询语句进行语义分析,并通过构建逻辑表达式将问题抽象化以便于后续处理。具体而言这包括以下几个步骤首先进行实体识别与关系推断随后构建相应的逻辑模型最后从知识库中检索潜在的答案候选项并通过排序机制确定最优的答案。
对话系统: 采用多个互动过程与用户展开交流,并提供相应的服务。该系统主要包含以下几大核心模块:用户意图识别模块以及相关的技术支持。除了基础功能外还需要确保信息传递的一致性,并支持多轮交互机制以提升用户体验
4. 自然语言处理难点:词义消歧是瓶颈,中文相对英文更难。
NLP 典型应用
- 搜索引擎
涉及技术:词义消歧、句法分析、指代消解等。
功能:不仅仅是协助获取所需信息,还能够引导用户定位目标,并连接人与实体世界的服务项目。
基础架构:通过自动化的手段收集并整合大量数据,在用户提交搜索请求时能够快速检索相关数据并返回相应的结果;对收集到的数据进行解析处理与归类,在需要时能够快速检索相关数据并返回相应的结果;通过自动化的手段收集并整合大量数据,并在用户提交搜索请求时能够快速检索相关数据并返回相应的结果
2. 文本分类
概念定义:基于文档内容与属性特征,并不仅限于划分至至少一个类别集合中的一种分类机制
关键问题:如何建立一个分类函数或分类模型,并应用这一分类模型将未知文档映射至预设类别中
射到给定的类别空间。 > 常见应用比如:
① 垃圾电子邮件检测
② 门户网站每天产生的信息分繁杂多,文本分类技术尤为重要。
3. 文本创作与生成
4. 机器翻译
5. 情感分析
6. 舆情监控
7. 语音识别系统
- 聊天机器人
第7章知识图谱
知识图谱技术的基础是一种语义网络通过将客观的经验沉淀在巨大的网络中;其核心组成部分包括实体、属性以及关系。
第8章机器学习
基于机器学习的所有应用,都是基于一定的算法实现的。
机器学习分类
supervised learning (Supervised Learning):基于一组标注过的数据集进行训练以达到一定的性能指标的目标过程;从现有的标注数据中提取特征并获得最佳表现的模型;通过将新输入映射至预期的结果空间中使得该系统能够有效地处理未知的数据输入并生成相应的输出结果;主要采用分类算法与回归算法这两种核心方法实现系统的建模与推理功能
2. 无监督学习 (Unsupervised Learning): 基于未标注的训练数据集进行分析以归纳出规律或模式。无监督学习
2. 无监督学习 (Unsupervised Learning): 基于未标注的训练数据集进行分析以归纳出规律或模式。无监督学习
(Unsupervised Learning): 从无监督的数据中提取有用信息。 主要使用的算法包括聚类算法和降维算法。
3. 半监督学习 (Semi-Supervised learning):它是有指导的学习方法与无指导的学习方法相结合的技术。具体来说,在训练集中有一部分样本具有明确的类别标注信息(即有标签数据),而另一部分样本缺乏类别标注信息(即无标签数据)。这种方法主要应用于数据量庞大但同时面临类别标注资源不足或获取成本较高的情况。
常用算法:直推和归纳算法
4. 强化学习 (Reinforcement Learning): 当计算机采用某项行为策略时,在环境中会产生积极反馈的结果
在引入奖励机制的情况下,从强化信号中获得的利益将导致趋势的增强.核心在于,通过积极奖励(强化信号)来进一步强化最佳行为或行动的概念.
第9章深度学习
深度学习的发展历程
1943年, 心理学者麦卡洛克与其所属的数学领域中的学者共同创设了MP 模型. 该模型被视为人工神经网络体系的开端, 并为其奠定了理论基础.
2.1958年感知机的发现引起了科学界的广泛关注与深入研究,在人工神经网络领域开创了重要里程碑,在神经网络的发展历程中具有开拓性地位
于1969年, 马文·明斯基与西蒙·派珀特共同撰写了《感知器》一书,书中证实了单层感知器无法解决线性不可分问题(XOR问题)这一局限性.由于这一本质缺陷以及未能及时推广单层感知器到多层神经网络领域,人工智能领域的神经网络研究经历了第一个寒冬期,长达近20年时光中对该领域的发展几乎没有任何突破.
于1986年时, 深度学习之父杰弗里·辛顿发明了一种用于多层感知器的反向传播训练方法——BP算法。该算法完美地解决了非线性分类问题, 进一步激发了人们的广泛关注。
5. 因八十年代计算机硬件水平较为落后,例如:计算能力未能跟上,从而导致随着神经网络规模的扩大,再采用BP算法时会遇到'梯度消失'的问题。这不仅限制了BP算法的发展前景,再加上90年代中期,以SVM为代表的其他浅层机器学习算法被提出,并在分类与回归等问题上表现出色,然而这些方法又明显不同于神经网络模型的根本原理,因而使得人工神经网络的发展再次陷入瓶颈期。
6.2006年, 杰弗里 · 辛顿系统性地提出并阐述了深度学习理论框架, 针对'梯度消失'问题提出了有效的解决方案
7. 十二 年,在著名的 ImageNet 图像识别大赛中, DNN 技术在图像识别领域展现了卓越的能力
成绩。
2014年,Facebook利用深度学习技术的DeepFace系统,在人脸识别领域表现出色,并且其准确率已经超过97%。
于2016年9月,在谷歌公司运用了深度学习技术开发出来的AlphaGo凭借4:1的比分击败了国际顶尖围棋高手李世石后
在2017年10月,在利用强化学习算法的情况下,AlphaGo Zero以显著的优势击败了之前的AlphaGo。
深度学习的特点
以人工神经网络为基础,在机器学习领域作为一个重要分支。其中包含多个隐藏层的多层模型被认为是深度学习的核心模型。
架构。
2. 对数据进行分层计算,从底层到高层进行特征抽象。
3. 覆盖视觉、语音及行为等多个领域,在处理具有复杂特性的数据展现出显著优势。
势。
深度学习
深度学习技术是一种综合性的模式分析方法的集合;从具体的研究方向来看,则主要涵盖以下三种类型:
1. 基于卷积运算的神经网络系统,即卷积神经网络(CNN)。
基于多层次神经单元的自编码神经网络体系中包含Auto encoder这一技术及其近年来发展迅速的关注点
注的稀疏编码两类(Sparse Coding)。
通过多层自编码器架构实现预训练阶段,并结合鉴别特征持续精炼神经网络权重参数以构建深度置信网络(DBN)
循环神经网络 (Recurrent Neura********l Network,RNN)
循环神经网络是一种类型基于序列(sequence)数据输入,并通过递归机制在序列演进方向上工作且其所有节点(循环单元)通过链式结构连接构成的递归神经网络(recursive neural network)。
循环神经网络具备记忆功能,并且实现参数共享的同时也具有图灵完整性(Turing completeness)。由此可见,在学习序列数据的复杂特性时具有显著能力。循环神经网络广泛应用于自然语言处理(NLP)领域中,并常用于各种时间序列预测任务中;具体而言,在语音识别、语言建模与机器翻译等方面展现出显著的应用价值。
卷积神经网络 (ConvolutionalNeural****Networks,****CNN)
卷积神经网络是一类基于卷积计算并且拥有深度结构的设计的前馈神经网络(Feedforward Neural Networks),属于深度学习(deep learning)领域中的一种重要方法。
生物视知觉系统的类脑结构模拟构建了一种新型的人工感知系统架构,在该架构中支持监督式和无监督式学习方案。该系统通过各层次间的参数共享机制与局部连接拓扑结构显著降低了计算复杂度,在格点化拓扑特征(如像素点与音频采样点)的学习任务上展现出良好的泛化性能,并未引入额外的数据预处理需求。
BP 算 法
1986年,深度学习之父杰弗里·辛顿创造了一种新型的训练多层感知器的方法—BP算法.... BP算法在传统神经网络正向传播的过程中,引入了系统性地传递误差的过程
BP算法完美的解决了非线性分类问题。
运算能力不足导致BP 算法会出现“梯度消失”。
第10章计算机视觉技术
1. 计算机视觉(Computer Vision):
基于仿生技术的视觉信息捕捉科学体系中, 采用计算机模拟人眼对目标物体进行识别、跟踪以及精确测量的过程, 并随后通过计算机处理生成更适合于人眼观察或者直接传送给仪器设备用于检测的图像数据
2. 计算机视觉的起源:
Lary Roberts, 一位现代计算机视觉领域的先驱,在1963年发表的博士论文名为《方块世界》,其中提出了一种算法可以在不同光照角度和拍摄条件下通过形状分析识别照片中的方形物体为同一实体。这一发现表明:视觉处理流程通常始于简单的几何形状。
计算机视觉的应用领域:
图文识别:提取图片中的文字;
人脸识别:基于面部特征数据识别个体;
医学影像:通过无创伤手段获取内部组织图像;
辅助驾驶:利用传感器预先让驾驶者察觉到可能发生的危险;
视频监控:通过视频技术监测被监控区域,并实现实时显示和记录现场图像的电子系统或网络;
工业视觉:工业视觉系统旨在通过自动检验、工件加工与装配自动化以及生产过程监控来进行图像识别设备的应用。
3. 计算机视觉的五大任务:是识别、描述、推理、检测、分割。
4. 光学字符识别 ( OCR)。
光学字符识别(OCR) 是具体而言 指电子设备(如扫描仪或数码相机)检测纸上打印的字符中暗、亮模式以确定其形状 并用字符识别方法将其转换为计算机文字的过程
评估一个 OCR 系统性能优劣的主要指标主要涉及:错误拒绝率(False Reject Rate, FRR)、错误识别率(False Accept Rate, FAR)、识别速度(Throughput)、界面友好度(User-Friendly Degree)以及系统稳定性和可用性等关键要素。
OCR**** 识别应用场景有:
handwriting input method: the hardware-based input recognition integrated with a touchboard. Due to the limited hardware application scenarios, it requires extensive collaboration and refinement through in-depth synergic磨合 process with the product.
教育场景下的手写图像处理:智能化阅卷系统(含拍照作业批改功能)及错题本的自动汇总功能 > 文档识别技术:涵盖法院、城管及金融等多个行业的应用场景
通用拍照文档识别和翻译:研究起步阶段
《人工智能编程语言基础》
第1章语法基础
本章将详细阐述Python语言的主要特性,并系统地讲解了Python的基本语法结构及其相关的数值型、字符串型、布尔值及其相互间的运算规律。同时深入介绍了条件判断与循环控制结构的应用方法,并掌握了这些核心知识点的具体实现技巧。
本章的主要知识点如下:
Python****概述
关于该编程语言的发展历程来说,在历史上首次出现的是由Guido van Rossum所开发。
2.python 语言的特点: > 简单优雅
编写高效,开发效率高 > 面向对象
支持函数式编程 > 解释型语言
兼具通用语言和脚本语言优势 > 可移植性强
Python广泛应用于科学计算、数据处理以及机器学习等领域,并且具备丰富的能力。3号Python语言的一个不足之处在于运行效率不高。
4.Python 扩展库的安装命令:pip
5. 环境变量:环境变量的作用是告诉操作系统从哪里找可执行命令
获取操作系统中所有环境变量:os.environ > 获取操作系统类型:os.name
标识符
在Python语言中,在遵循规定的情况下,在标识符的构造上是由包含字母字符、下划线以及数字构成的,并且第一个字符必须以字母开头。
下划线 _ 。
2. 保留字:即关键字,不能把它们用作任何标识符名称,关键字都是小写字母。
Python的标准库中包含一个keyword模块,在最新版本中可以列举出全部关键字。
import keyword > keyword.kwlist
注释
1.Python 单行注释
在Python中,默认情况下井号符号#被用作单行注释标记。这种标记方式既可以在代码前一行放置 也可以位于代码右侧 举例而言 在函数定义或语句结束处添加#可以帮助提高代码可读性
#这是一行简单的注释
print("Hello World!")# 这是一行简单的注释 2.Python 多行注释有三种方法
第一种:
#多行注释第一行 #多行注释第二行
#多行注释第三行 第二种:
,,
要注释的文字
,,
第三种:
M
要注释的文字
n
3.Python 中注释的作用
通常用来为 Python 文件、模块、类或者函数等添加版权描述信息。
用于说明代码的作用,在编程中注释不宜过多到某种程度反而没有必要。对于已经非常清晰易懂的代码而言,则无需添加注释
屏蔽掉暂时不需要的代码。
注释掉一些代码,用于调试程序。
缩进
Python 代码严格遵循缩进规范:通过缩进标识代码块结构,并允许根据需求灵活设置每行之间的空格数量;同时要求同一代码块内的所有语句均采用统一的缩进空格宽度以保证逻辑连贯性
换行
在Python 中一条语句太长需要换行时,在行尾加反斜杠()来实现多行语句。
变量命名
在变量命名时应遵循标识符命名规范其规则包括:由字母、下划线及数字构成其中第一个字符应为字母或下划线_不可使用诸如*#!@&$等特殊字符。
2. 保留字(from,import,for,while 等)不能用作变量名。
3. 经典命名法(补充)
匈牙利命名法的基本原则指出:标识符由字段、数据类型和对象名称三部分构成。例如,在编程中使用i来表示整数类型时,默认情况下所有以i开头的标识符都被视为整数类型的变量;而s用于标识String类型的变量,则默认情况下所有以s开头的标识符都被视为字符串类型的变量。
骆驼命名法:即一种通过合理安排大小写字母来区分变量和函数名称的方法。其中第一个字母通常采用小写形式,并以如userName这样的实例体现。
帕斯卡命名法:首字母大写,如UserName, 常用在类的变量命名中。
简单数据类型
Python 是一种弱类型的编程语言,在Python语言中对变量进行赋值时无需事先声明变量的数据类型。Python的6种标准数据类型中包含3种不可变类型与3种可变类型。其中Numeric(数字)、String(字符串)、Tuple(元组)属于不可变数据类型;而List(列表)、Dictionary(字典)则属于可变数据类型。
(字典)、 Set (集合)为可变数据类型。
在Python中仅包含一种整数类型int没有任何长整型long类型存在根据理论分析整数类型不具备存储无限精度或极大数值的能力
范围的限制。
在Python语言中,在浮点运算中存在有限制的小数值范围和小数精度问题;可以通过调用sys模块中的float_info函数来获取相关参数;通常精确到15位有效数字。
5. 整型和浮点型混合运算的结果是浮点型。
布尔类型
1.Python中的布尔型数据由特定的数值常量True和False表示。
2.bool属于int类的一个子类类型,并且其对应值分别为True等于1和False等于0。
-
None, 空字符串, 空列表、空字典, 空元组和空集合,在布尔运算中都会被视为False。
-
函 数bool()
bool()函数用于将给定参数转换为布尔类型,如果没有参数,返回 False
bool()返回False的情况:当参数为整数0时会触发此情况;当参数为None时也会出现;对于可变容器如列表、元组等为空时同样会触发;对于字符串和字典等类型若为空也会导致此结果;举例来说,则包括像bool(0)、bool(None)以及像bool([])、bool("")等情形
当 bool() 返回 True时(即参数满足以下条件),数值型变量不等于零;而数据结构如列表、字符串等只要至少包含一个元素即可;例如 5 或 "abc" 这样的输入值。
5.issubclass(class,classinfo)这一功能用于判断参数 class 是否为类型参数 classinfo 的子类。当 class 是 classinfo 的子类时将返回 True 否则返回 False。
- 比如 issubclass(bool,int)的值为True。
字符串
1. 字符串是 Python 中最常用的数据类型。可以使用引号(' 或 " ) 来 创 建 字 符 串 。
Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
2. 字符串常用函数
通过调用islower方法来判断给定字符串中的所有字符是否为小写字母。 字符串'how are you'调用islower方法后返回True
"How are you".islower()返回 False
isupper() 用于判断字符串是否由全大写字母组成。比如: 'HOW ARE YOU'.isupper() 返回True
'HOW ARE YOu'.isupper() 返回 False
③ lower(): 转换字符串中所有大写字符为小写.
④ upper()
转换字符串中的小写字母为大写
⑤ swapcase()
将字符串中大写转换为小写,小写转换为大写
⑥ title()
将字符串转换为'标题化'形式的具体方式是:每个单词的首字母会被转换为大写,并且其余字母保持小写。例如,在Python语言中使用'.title()'方法即可实现这一功能。
'How Are You'
join() 功能负责将序列中的各个元素按照特定的分隔符进行连接,并返回一个由这些元素组成的新的字符串。 str参数设置为'-'。
seq=["a","b","c"] str.join(seq)
'a-b-c'
⑧ count() 方法返回子字符串在字符串中出现的次数。
str="good morning"
str.count("o")返 回 3 ⑨ startswith()
startswith(substr,beg=0,end=len(string))
判断字符串是否以指定子字符串 substr 开头;如果是,则返回 True;否则返回 False
如果beg 和 end 指定值,则在指定范围内检查。 ⑩ replace()
语法:str.replace(old,new[,max])
把字符串中的 old ( 旧 字 符 串 ) 替 换 成 new (新字符串),如果指定第三个参数
max, 则替换不超过 max 次 ⑪ split()
split(str="",num=string.count(str))
以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符 串
"aa bb \ncc".split( ['aa','bb','cc']
⑫ splitlines()
遵循('\r','\r\n',\n')指定的分隔符对每一行进行处理,并生成一个包含每一行为元素的一份列表;若keepends设为False则不会包含末尾的换行符;若设为True则会保留原有的换行符。
⑬ zfill(width): 返回长度为 width 的字符串,原字符串右对齐,前面填充0。
"hello".zfill(10) “00000hello”
3. 转义字符
在需要在字符中使用特殊字符时, python 用反斜杠\转义字符
| 转义字符 | 描述 |
|---|---|
| \(在行尾时) | 续行符 |
| 反斜杠符号 | |
| 单引号 | |
| " | 双引号 |
| \a | 响铃 |
| \b | 退格(Backspace) |
| \e | 转义 |
| \000 | 空 |
| \n | 换行 |
| \v | 纵向制表符 |
| \t | 横向制表符 |
| \r | 回车 |
| \f | 换页 |
| \oyy | 八进制数,y代表0~7的字符,例如:\012代表换行。 |
| \xyy | 十六进制数,以\x开头,yy代表的字符,例如:\x0a代表换 行 |
| \other | 其它的字符以普通格式输出 |
- 访问字符串
s[i]i 为索引值,正向索引值以0为开始值,逆向索引从-1开始。
str=“python”
str[0]的值为”p” str[-1]的值为“n”
- 截取字符串
可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下:
变量[头下标:尾下标] str=“python”
str[0:3] “pyt” str[-4:-1] “tho”
运算
1. 整数类型的四种进制表示:
● 十进制:数字0-9
● 二进制:0b或 OB,0-1
● 八进制:0o 或 00,0-7
● 十六进制:0x 或 0X,0-9到 A 一F
2. 数字类型转换:
| 函数 | 作用 | 实例 |
|---|---|---|
| int(x,base=10) | x--字符串或数字,base--进制 数,默认十进制。 将x转换成整数类型 | int(‘10',2)的值是2,即2进制10 换算成10进制的值 int(‘11',8)的值是9,即8进制1 换算成10进制的值 |
| bin(x) | 返回一个整数int或者长整数 long int的二进制表示 | bin(3)返回'Ob11' |
| float(x) | 将x转换成浮点数类型 | foat(3)返回3.0 |
| complex(real [,imag]) | 创建一个复数 | complex(2.0,3.0)返回2+3j |
| eval(str) | 计算在字符串中的有效Python 表达式,并返回一个对象 | eval("2+5")返回7 |
| hex(x) | 将一个整数x转换为一个十六 进制字符串 | hex(12)返回'0xc' |
| oct(x) | 将一个整数x转换为一个八进 制的字符串 | oct(10)返回'0o12' |
- 算术运算:
| 运算符 | 描述 | 实例 |
|---|---|---|
| + | 加-两个对象相加 | a+b输出结果31 |
| - | 减一得到负数或是一个数减去另一个数 | a-b 输出结果-11 |
| * | 乘一两个数相乘或是返回一个被重复若干次的字符串 | ab* 输出结果210 |
| / | 除 - x 除 以 y | b/a 输出结果2.1 |
| % | 取模一返回除法的余数 | b%a 输 出 结 果 1 |
| ** | 幂一返回x的y次幂 | a**b 为10的21 次方 |
| // | 取整除-向下取接近商的整数 | 9//2的结果是4 -9//2的结果是-5 |
以下假设变量a=10,变 量b=21, 实例:
“abc”**3的返回值为:"abcabcabc" “abc"+"456" 返回值为:" abc456”
- 比较运算符
以下假设变量a 为10,变量b 为20:
| 运算符 | 描述 | 实例 |
|---|---|---|
| == | 等于-比较对象是否相等 | (a ==b)返回False。 |
| != | 不等于-比较两个对象是否不相等 | (a!=b)返回True。 |
| > | 大于-返回x是否大于y | (a>b)返回False。 |
| < | 小于-返回x是否小于y。所有比较运算符返回1表示 真,返回0表示假。这分别与特殊的变量True和False 等价。注意,这些变量名的大写。 | ****(a <b)****返回True。 |
| >= | 大于等于一返回x是否大于等于y。 | (a >=b)返回False。 |
| <= | 小于等于-返回x是否小于等于y。 | (a<=b)返回True。 |
- 成员运算
| 运算符 | 描述 | 实例 |
|---|---|---|
| in | 如果在指定的序列中找到值返回True, 否则返回False。 | x 在 y 序 列 中 , 如 果 x 在 y 序 列 中 返回True。例如'h'in 'hello'返回True |
| not in | 如果在指定的序列中没有找到值返回 True,否则返回False。 | x 不 在 y 序 列 中 , 如 果 x 不 在 y 序 列中返回True。例如'h'not in 'hello' 返回False |
条件判断
1.Python 中 用if-else 语句做条件判断,不提供switch 分支语句。
2. 条件推导式:实际上 就是把多行代码合并为一行代码的操作。
例如:
a=2 b=3
C=a if a>belseb 则c 的 值 为 3
3. is可以用来做条件语句的条件判定。
例如:
10 is 10 的值为:True
10 is'10'的值为:False
循环语句
1.Python 中的循环语句有 for 和 while。
- break 关键字能够跳出 for 和 while 循环体。当从这些循环中退出时,其对应的 else 块也将不会执行。
continue 语句用于指示 Python 跳过该循环体内的其余语句后转至下一轮循环处理。
循环。
4.pass 语句:空指令旨在确保程序结构完整。该指令无操作内容,并通常用于占位作用。
位语句。
例如:
if True:
pass #do nothing else:
代码块
第2章数据结构
本章将详细介绍Python语言中的四个核心数据结构:元组、列表、集合和字典。内容将涵盖它们各自的特性、赋值方式以及相关的操作功能。
本章主知识点如下:
元组
在结构上类似于列表的主要区别在于它们是不可变的数据结构,在这种情况下其元素无法被修改
2. 元组创建使用小括号(),在括号中添加元素,并使用逗号隔开即可,如x=(1,2,3)。
3. 元组创建时小括号也可以省略。例如 x=1,2,3 则 x 是一个元组。
4. 可以利用元组给多个变量同时赋值,例如: a,b=3,4 则 a=3 b=4。
5. 元组中只包含一个元素时,需要在元素后面添加逗号,,例如: x=(1,)。
6. 为了删除元组:由于元组中的元素值无法被修改,因此无法直接通过修改单个元素来实现删除操作。可以通过del语句实现对整个元组的删除操作。举例来说,在Python中创建一个变量x并赋值为(1,2,3),然后执行del x操作是可以实现的
7. 元组中的元素不可以添加、修改和删除。
例如:x=(1,2,3)x[0]=10 会报错,不能执行。
8. 可以利用元组来同步交换变量的值。
例如:a,b="cat","dog"a,b=(b,a) 则 a,b的值交换。
9. 元组可以使用下标索引来访问元组中的值。
例如:tup1=('Google',‘baidu',1997,2000)tup1[0]的值为'Google'
tuple(iterable) 操作:将输入序列转换为元组形式;当输入为字典时,则生成其键构成的元组。
例如:tuple({1:2,3:4}) 会返回(1,3
列表
1. 列表是一个数据容器,属于可变数据类型。
列表中的数据项允许重复出现,并且能够被修改;此外,在同一个列表中,元素的数据类型可以不同。
- 列表赋值
例如: s1=[1,2,3,4,5]
li = [1, "abc", [1, 2, 3]]# 一份列表可存储不同类型的数据类型。通过将字符串"abc"赋值给变量list,则list的值即为:['a', 'b', 'c']
list(range(10)) 则 list的值为:[0,1,2,3,4,5,6,7,8,9] li=list() 生成一个空的列表
- 列表访问:列表中的元素按顺序排列,并可通过指定位置进行获取。在编程中,默认情况下使用零基索引来定位元素;下一个元素的位置即为一;允许使用负数进行逆序查找。
例如: li=list("abc") 则:li[0] 的值为'a',li[-3] 的值也为'a'
li[1]的值为'b' li[-1]的值为'c'
la=["ab",1,2,[2,3,4]], 则 la[3]的值为[2,3,4]
- 列表切片操作:li[start:end:step] start表示起始位置的索引值, end指定终止位置的索引值, 但步长 step 控制着每次取样的数量
结果不包含终点索引的位置,在Python中与索引相关的数据结构均遵循左闭右开的原则。 step表示步长,默认值为1
例如:li=["A","B","C","D"]
li[0:3] li[2:]
li[1:3] li[0:4:2]
["A","B","C"]
["C","D"]
["B","C"] ["A","C"]
#起点的0索引可以省略,可写为li[:3] #省略end, 则切到末尾
#左闭右开原则
#从 li[0]到li[3], 设定步长为2。
- 删除列表的值用del。
例如: li=list("abc") 则 :
del li[1]
li的值变为:['a','c']
7. 列表相加:用+可以合并两个列表的元素
例如: Li1=[1,2] li2=[1,2]
li+li2 的值为:[1,2,1,2]
但是如果用append 方法追加 li.append(li2)
则li 的值为[1,2,[1,2]]
8.list.reverse(): 反向列表中元素。注意是反向,不是降序。
例如:x=[1,5,3]x.reverse() 则 x 的值变为[3,5,1]
再执行 一 次x.reverse()再 一 次反向, x 的值又变回[1,5,3]
- list.sort(key=None,reverse=False)对原列表进行排序。
reverse-- 排序规则, reverse=True 降 序 , reverse=False 升 序 ( 默 认 )
例如: x=[1,2,3] x.sort(reverse=True) 则 x 的值为[3,2,1] 10.min(list) 返回 列表元素最小值。
11.max(list)返回列表元素最大值。
12.list.append(obj): 用于在列表末尾添加新的对象。 例如: list=list("abc")
list.append("efg")
则 list 的 值 为 : ['a','b','c,'efg']
13.list.insert(index,obj) 用于将指定对象插入列表的指定位置。
例如:list1=['Google','Runoob','Taobao'] list1.insert(1,'Baidu')
列表插入元素后为:['Google','Baidu','Runoob','Taobao']
14.list.pop([index=-1]) 从列表中删除一个指定的元素(默认为最后一个),并返回该被删除的元素。
值 。
例如: list1=['Google','Runoob','Taobao'] list1.pop()
运 行 后 列 表 为 : ['Google','Runoob']
列表生成器是一种高效且简洁地构建数据结构的方法;它通过将循环结构与条件判断巧妙结合的方式,在一定程度上能够减少代码的冗长部分,并最终提升代码的整体运行效率。
例如: list1=[x*10 for xin range(0,11)ifx%2==0] 则 list1的值为:[0,20,40,60,80,100]
集合
1. 集合类型是包含0个或多个数据项的无序组合,元素不重复,可用来去重。
集合中的元素的类型仅限于固定的数据类型,并非可变数据。具体来说,这些固定的数据类型的例子包括整数(integer)、浮点数(floating-point number)、字符串(string)以及元组(tuple)等。而可变数据则指的是动态数组或列表(dynamic array/list),在Markdown中通常表示为[]形式的结构体。
类型(列表、字典和集合)不能作为集合的元素。
3. 集合是无序组合,不能进行索引和分片。
-
集合中的元素可以动态增加或删除。
-
集合用{}表示。
-
可以用=直接给集合赋值。
7. 可以用 set(x) 生成集合,x 为序列类型 (str,list 或 tuple)。
- 通过大括号花括号{}或者 built-in set()函数能够生成集合对象,特别提示:无需借助任何内置类型即可创建一个空集合。
不是{},因为{}是用来创建一个空字典。
9. 集合的输出效果跟定义顺序可以不一致。
10.update(x) 也可以添加元素,且参数可以是列表,元组,字典等。
例如:
myset={"apple","orange","banana"} myset.update([4,5])
结果为:
{'apple',4,5,'orange','banana'}
请注意:集合中的元素属于不可变数据类型,在本例中采用列表作为参数,并将单一的数字加入到集合中。
11.Python 中的集合可以执行标准的数学运算。 > 并集(a|b)
交集(a&b)
差 集(a-b)
对称差(a^b) 例如:
s1={"a","b","c"} 12.s2={"b","c","d"}
s1&s2 交 集 {c','b'}
s1^s2 对 称 差 {a','d'}
s1|s2 并 集 {c','d','b','a'}
s1-s2 差 集 {'a'}
字典
字典的键必须唯一;而对应的值无需唯一。允许存储任何形式的数据类型;且键只能为不可变类型
字符串,数字。
2. 字典的生成:d={key1:value1,key2:value2,key3:value3}
例 如 : car={
"brand":"Ford",
"model":"Mustang", "year":1964
}
3. 在 Python 语言中,{}创建空字典。
4. 字典 items() 方法以列表返回视图对象,是一个可遍历的****key********/****value 对。
示 例 :
In [2]:car ={
"brand":"Ford",
"model":"Mustang",
"year":1964
for key,value in car.items(): print (key,value)
brand Ford
model Mustang year 1964
type(caritems()) 返回:dict_items
5.popitem() 随机返回并删除字典中的一对键和值
例 如 :
stuinfo={"stu1":91,"stu2":84,"stu3":92}
stu=stuinfo.popitem() 执 行 以 后 :
stu 的 值 为 : ('stu3',92)
stuinfo的值为:{'stu1':91,'stu2':84} 6.clear() 方法用于清空字典。
例如:
stuinfo={"stu1":91,"stu2":84,"stu3":92} stuinfo.clear()
则stuinfo的值为:{}
第3章语法进阶
本章内容涉及Python语法高级阶段的学习,并系统性地探讨了函数定义与调用机制;深入讲解了模块化程序设计方法;全面剖析了文件读取与数据存储技巧;详细研究了异常处理机制及其应用。同时系统阐述了面向对象编程的基本概念,并深入分析其在Python语言中的实现。此外进一步掌握了利用MySQL数据库进行数据访问的技术;能够熟练进行数据库的基本操作:增删查改以及数据管理。
本章主要知识点如下:
内置函数
1.type(object): 返回参数的对象类型 例如:
type(10)返回<class'int'>
type(10.0)返回<class'float'>
type(False)返回<class 'bool'>
type("abc".encode())返 回<class'bytes'>
isinstance(): 验证一个对象是否属于已知的类别;类似于 type() 函数。该方法考虑到继承关系,并将子类视为其父类的一种类型。
type()不会认为子类是一种父类类型,不考虑继承关系。
例如:
a =2
isinstance(a,int) 的值为True
该表达式的布尔值是否为True?
归因于 bool 类继承自 int 类型。
第3步输入数据并返回字符串类型。
4.eval() 函数用来执行一个字符串表达式,并返回表达式的值。
例如:x=1
eval('x+1') 结 果 为 2
eval('x==1') 结果为 true
5.min() 函数返回给定参数的最小值,参数可以为序列。 例如:
min(['xyz','abc','zara'])返 回'abc'
6. sum() 方法对序列进行求和计算。
例如:
sum((2,3),1)# 元组计算总和后再加1,结果为6
sum([0,1,2,3,4],2)# 列表计算总和后再加2结果为12
7.complex()函数负责生成一个值表示为 real + imag*j 的复数,并将一个字符串或数值转换为此复数值。
复数。 例如:
complex(5.0,4.0) (5+4j)
8.enumerate() 函数用于生成可迭代对象的索引配对序列
列,同时列出数据和数据下标, 一般用在 for 循环当中。 例如:
seasons=['Spring','Summer','Fall','Winter'] for element in enumerate(seasons):
print(element) 输出结果:
(0,'Spring')
(1,'Summer') (2,'Fall')
(3,'Winter')
函数
1. 函数的定义:定义函数使用 def 关键字, 一般格式如下:
def 函数名(参数列表): 函数体
- 函数的返回值
该函数被 return 语句终止;该函数在有表达式的情况下被 return 语句有条件地返回;没有表达式时的 return 语句等价于返回 None。
模块
1. 模块是扩展名为.py 的独立的程序代码文件,实现了特定的功能。
- 导入模块:
import module1[,module2[,….moduleN]
- 导入包里的特定模块:
from sound.effects import echo
-
导入包中所有的模块: From sound import*
-
导入模块中的函数: from math import cos from math import*
6. 调用模块中的函数:模块名.函数名
例 如 :
import math#导入标准库中的数学模块
math.cos(30)#调用math 模块中的函数 cos求余弦值
包的概念
1. 使用包可以避免不同类库架构模块之间的命名冲突。
2. 在物理上相当于一个文件夹,在该文件夹下包含了__ nit.py 文件,并支持多种操作
用于包含多个模块源文件。
文件读写
1.Python 中,可以读取文件内容的方法有:
read()
readline() > readlines()
2. 正确的打开文件的语句是:
file=open(file_name,mode), 返回一个stream 对象 file open 函数有两个参数:
◇ file_name: 需要打开的文件路径
◇ mode (可选):打开文件的模式,如只读、追加、写入等 mode 常用的模式:
● r: 表示文件只能读取
● w:**** 表示文件只能写入
● a: 表示打开文件,在原有内容的基础上追加内容,在末尾写入
● w+: 表示可以对文件进行读写双重操作
通过 with 关键字打开文件:采用 open 操作符其优势在于即使发生异常也不会导致数据丢失,在子句体结束后自动关闭
例如:with open("my1.txt")asf:
如果文件处于只读状态,则无法通过 write 方法进行写入操作;在进行读取和写入操作时,请采用带有追加功能的模式。
3. 写文件的语句:write(string)。
4.seek() 方法用于移动文件读取指针到指定位置。
异常
语义错误或解析错误是指程序在运行过程中无法理解或解释的内容,在编程过程中能够被识别出的问题。这些常见问题包括缩进不当、关键字误写以及括号和标点符号使用全角的情况等。具体表现为:1. 缩进不当导致代码结构混乱;2. 关键字书写错误影响程序逻辑;3. 括号使用不当导致语法混乱;4. 标点符号使用全角形式与编程规范冲突;5. 遗漏了必要的冒号或其他关键符号;6. 忽略了必要的括号而导致逻辑混乱等情况。通过完善代码规范和加强调试能力可以有效避免这类问题的发生
2. 异常:运行期检测到的错误被称为异常。
3.try/except 语句:处理异常时必须使用try/except 语句。
finally 块:并非所有情况下都需要使用的块;无论是否发生异常情况都会被调用。
else 语句:虽然不是必须要用到的语句,在 try 子 clause未发生 any异常时
执行。
面向对象
1. 面向对象的三大特征是:封装、继承、多态
封装是一种信息隐藏技术,在软件开发中被用来将对象的信息与其外部实现细节隔离开来;为了保证系统的开放性与安全性,在设计时通常会遵循这一原则;具体来说就是将数据存储在对象中,并通过指针或引用的方式进行访问,并且通过继承、多态等方式实现信息管理
继承是一种机制,在其中Subclass通过继承ParentClass的Attributes和Methods来获取功能。通过这种方式,Subclass实例能够获得ParentClass的所有Attributes以及Methods。
多态现象表现为同一类实例(对象)中同一种方法在不同情境下呈现不同的功能形式。基于多态机制的设计使得具有各异内部结构的对象能够共用统一的外部接口。这表明尽管各个对象的具体行为实现细节各异,但通过使用一个统一的公共类模板,则可以让这些类型(它们)的行为实现细节得以通过相似的方式进行定义与调用。
- 类:用来描述具有相同的属性和方法的对象的集合。 类的定义
class ClassName:
-
对象:通过类定义的数据结构实例。
-
实例化:创建一个类的实例,类的具体对象。
-
类的公有属性和类的私有属性:
该类中以两个下划线开头的属性属于私有属性,在这种情况下同样地,在该类中使用两个连续下划线标记的方法被视为私有方法。这些私有属性和私有方法无法在外部类或方法中被调用,并且只能通过内部引用机制来访问它们。具体来说,在内部可以通过self..private_attrs来访问这些私有属性,并使用self..private_methods来访问这些私有方法。
- 构造方法:
在创建对象的过程中,在为一个类定义其实例对象时(即当该类被实例化的时候),Python 解释器都会自动地执行该构造方法以完成初始化操作。对于Python 类来说,在手动定义构造方法的具体语法形式如下:
def_init__(self,..):
代码块
该初始化函数(init)可以接收多个参数,并且它必须至少包含一个名为self的参数,并且这个参数必须是第一个接受的位置。
7. 类的方法和Self 参数
在类体内通过关键字def来声明一个方法,在这种情况下与其他普通函数定义有所不同的是,在类方法中应包含参数self,并且它通常是第一个参数。自动生成实例标识符自动生成实例标识符自动生成实例标识符自动生成实例标识符自动生成实例标识符自动生成实例标识符自动生成实例标识符
8. 类的继承
采用继承机制通常会创建与现有类功能相似的新类;此外,在现有类别基础上新增少量成员(属性与方法),而无需将现有代码块直接复制到新类别中。由此可见,利用继承机制能够方便地实现对 类 的重复利用。
Python 支持多继承,即一个类可以有多个父类。
- 方法的重写
基于类的成员变量和方法都会遵循继承机制进行传递,在子代类型实现过程中会遇到特殊情况时,则需为该功能提供专门的实现方案
当调用一个对象的方法时:首先会检查当前对象是否拥有该方法。若发现该方法存在于当前对象中,则会直接执行;若无,则会转向其父类进行查找;若在其父类中有对应的方法,则会立即调用该方法;若未在当前层级找到,则继续转向其上一级别进行查找;最终将遍历整个继承链直到遇到Object类为止;如果在Object类中也未找到所需的方法,则会导致编译错误。
数据库
1.PyMySQL 是 在 Python3.x 版本中用于连接 MySQL 服务器的一个库,需要安装。
python-m pip install PyMySQL 连接数据库:
db=pymysql.connect("localhost","testuser","test123","TESTDB")
2.mysql-connector 是 MySQL 官方提供的驱动器。
python-m pip install mysql-connector 连接数据库:
该代码段旨在通过初始化连接库实例向本地主机上的MySQL数据库建立连接。
- cursor对象:通过cursor()方法创建一个cursor实例,并通过该实例调用execute()方法来执行SQL语句
cursor cursor =db.cursor( cursor.execute(sql)
在进行数据库的增删修改时必须提交给数据库执行操作;而仅用于查询的数据操作则无需提交
db.commit()
发生错误时回滚 db.rollback()
MySQL数据库可以通过调用fetchone()方法可获得单条数据记录;而fetchall()则用于一次性获取多条数据记录。具体而言,在调用fetchone()时会返回一个单独的结果行;而fetchall()则会将所有结果一次性加载到内存中并返回作为一个完整的结果集合。需要注意的是,在MySQL中,默认情况下resultset是一种行优先的数据结构;因此每次调用fetchone()都会生成一个新的行对象来表示当前的结果行信息。
fetchall(): 接收全部的返回结果行.
rowcount: 这是一个只读属性,并返回执行 execute()方法后影响的行数。
- 关闭数据库
关闭数据库连接 db.close()
- SQLite 是 Python 预装的一个数据库系统,在无需任何设置或配置步骤的情况下即可运行。Python 内置了 sqlite3 模块,在无需安装的情况下可以直接导入并使用该模块进行开发操作。
《机器学习算法基础应用》
第1章机器学习概述
本章主要概述了机器学习相关知识的基础介绍。具体涵盖以下六方面内容:一是认识机器学习的概念;二是熟悉scikit-learn库的基本应用;三是安装Anaconda Python发行版并配置环境;四是掌握Jupyter Notebook的操作流程;五是掌握Python基本库的应用技巧;六是建立基础机器学习模型——以鸢尾花分类为例。共分为六个主要内容
本章的主要知识点如下:
机器学习
专家系统是早期的人工智能系统的代表,在问题解决过程中主要依靠If-Else条件判断结构来完成任务。
理数据。
◇ 专家系统使用人为制定规则的方法。
◇ 专家系统擅长解决规则明确的问题,诸如国际象棋等。
专家系统仅限于单一领域内,并且仅适用于单个任务。对于较为复杂的任务而言,专家系统不具备普适性。通常情况下,则需要结合其他技术或方法来解决。
要重写系统。
专家系统采用基于人为制定规则的方法,在图像识别任务中难以达到预期效果。其主要问题是:计算机将像素视为构建图像的基本单位的方式与人类处理面部特征存在显著差异。正是由于这种表征差异的原因,在数字图像中准确地描绘出人类脸部特征所依赖的规律性模式是十分困难的。
2. 机器学习( machine learning )是人工智能领域的核心技术,它是指计算机在大量数据中自主完成各种任务的能力
数据中找出规律、建立模型,并对新的数据做出判断和预测。
在机器学习技术领域中, 计算机能够自动从大量数据里提炼出规律, 而这并非传统方法依赖的固定模式
理数据。
◇ 机器学习做的是特征提取,输出的是算法模型。
◇ 机器学习的效果依赖于数据,数据决定着模型的上限。
相较于传统的专家系统而言,在处理那些人类无法预先定义明确规则的任务时, 机器学习展现出更强的能力, 它能够更出色地承担起此类任务的工作职责
景 。
监督学习和无监督学习
监督学习 (supervised learning) 的显著特征是使用的数据都是标注过的。
2. 无监督学习是根据数据的内在特点和规律对数据进行处理。
3. 监督学习与无监督学习的主要差别在于所使用的训练数据是否经过标注。
4. 监督学习的“监督”主要体现在数据的标签上。
◇ “监督”是通过标签来监督学习效果。
◇ “监督”不需要人为监督算法的学习效果。
- 监督学习的目的是:建立数据的特征与标签的对应规则。
6. 相比于无监督学习,监督学习的效果更容易评价。
样本与特征
在机器学习领域中, 数据的每一行被视为每个样本(sample), 每一列(样本的特征)则被视为一组(feature)。
称为特征 (feature)。
◇ 行的数量即样本的个数。
◇ 列的数量即特征的个数。
2. 机器学习中,特征是指数据的属性。
◇ 比如鸢尾花(Iris)数据集中,样本的特征数是4,分别是花瓣的长度、宽度,花萼
的长度、宽度。
标签
1. 数据的标签一般是指样本数据所属的类别或对应的某个值。
◇ 标签并不能唯一标识该条样本数据。
2. 机器学习所需的数据,有的有标签,有的无标签。
Python 优势
Python 语言在机器学习中的主要优势:
Python 已被广泛认定为数据分析与科学计算的核心工具之一;它不仅具备强大的通用编程语言功能,并也被用于解决复杂的科学计算问题。
有脚本语言的易用性。Python 编程简单灵活,开发效率高。
Python包含多种功能模块用于数据读取、呈现形式以及相关的分析工作,并支持文本分析和视觉分析等多种操作
该库为数据分析、数据挖掘以及机器学习(尤其是深度学习)等类型的应用场景提供了强大的支持。
3. 基于通用编程技术的Python语言不仅能够创建复杂的图形界面(GUI)以及Web服务,并且能够无缝集成到现有的应用体系中(广为人称为'胶水语言'的Python提供了一种便捷的方式去整合各种编程工具)。
使用 Python 进行数据分析与机器学习时, 可以采用终端或其他类型的 Jypyter 笔记本工具, 以更便捷地完成代码操作。机器学习和数据分析本质上都是数据驱动的迭代过程, 这些数据驱动的迭代过程需要具备快速迭代和易于操作的特点。
Anaconda
Anaconda被视为一个免费的Python发行版本,并集成了一系列如conda、Python以及其他180多个科学工具包。
及其依赖项。
2.conda 是一个开源的包和环境管理器。
3.Anaconda 集成了大量的第三方库,主要包括:
◇ 通用机器学习库scikit-learn
◇ 科学计算库numpy、scipy、pandas
◇ 可视化库Matplotlib、seaborn等
Anaconda整合了开发平台—Jupyter Notebook,并被广泛用于Python的数据分析与机器学习领域中。
5.Anaconda 在windows 平台和 Linux平台上安装时,都会询问是否初始化。
◇ 这里的初始化:是指是否将Anaconda 加入操作系统的环境变量中。
Jupyter
Jupyter Notebook(此前称为Python-based interactive environment)是一种交互式笔记本工具,在超过40种不同的编程语言中都能运行良好。它广泛应用于数据清理工作、数据分析以及挖掘活动;同时在统计建模和机器学习方面也表现出色。
Jupyter 未集成软件包管理和版本控制功能;Python 的 Anaconda 发行版中的开源软件为用户提供了一个完整的环境配置解决方案,并配备了用于管理和分发环境所需的工具如 Anaconda 环境管理器(conda)。
3.Jupyter Notebook 具备便捷的导出功能。可以导出为多种格式,包括:
个 HTML
◇ Markdown
◇ Python (.py)
◇ LaTeX
◇ PDF 等
4.Jupyter 的 Markdown 模式中,可以方便地设置标题。
◇ 16级标题用16个“#”表示
个 注意#和标题文本之间用空格隔开
5.Markdown 的列表有无序列表和有序列表两种:
◇ 无序列表用“*”、“+”或“-”来定义(注意和文本之间用空格隔开);
采用数字编号并以‘.’开头的形式进行有序列表标记,在与文本相邻的位置使用空格分隔,并特别指出此处需注意间距设置
空格隔开)。
6. 在撰写科研论文时, LaTeX 是一个必不可少的工具有效工具, 在 Markdown 单元格中也可以使用 LaTeX 来插入数学公式
◇ 行内公式:在文本行中插入数学公式,则在公式前后分别加上一个“$”符号
◇ 独行公式:单行、居中显示公式,则在公式前后分别加上两个“SS” 符号
Scikit-learn
Scikit-learn 是一种在Python语言基础上广泛应用于机器学习领域的核心工具包,在其功能设计上集成了多个经典的机器学习算法,并且提供了丰富的接口供开发者灵活调用;作为开放源代码项目其社区驱动特性使其持续更新完善并获得了广泛的认可与应用
2.Scikit-learn 提供了方便的数据处理、挖掘和建模功能,具有以下特点:
① 建立在NumPy、SciPy、Matplotlib之上
该系统能够支持多种机器学习算法,并且涵盖分类任务、回归分析、聚类分析以及降维技术等多方面的应用范围
③ 为所有算法提供了简洁统一的使用接口(API****)****
④ 免费、开源(商业使用须遵守 BSD许可协议)
⑤ 活跃的技术社区和文档支持
⑥ 丰富的开发文档 3.Scikit-learn 安装建议:
① 如果尚未安装python, 建议直接安装Anaconda。
② 如果已经安装了python, 也可以使用pip 安装。 pip installscikit-learn
Numpy
1.Numpy 库的主要功能是:进行多维数组的运算。
2.Numpy 是 python 数据分析、机器学习的重要基础。
3.Numpy 核心的数据结构是:多维数组 ndarray。
4.Numpy 提供了强大的多维数组操作方法。
5.ndarray 处理大数组时,效率比list 高得多。
Pandas
Pandas 库的核心功能是支持对结构化数据进行处理与分析,并作为Python语言中用于数据分析的核心库
库。
2.Pandas 的两种主要的数据结构是:
◇ Series(系列)
◇ DataFrame( 数据框)
3.Pandas 对结构化数据的预处理主要包括:
◇ 数据清洗
◇ 数据合并
◇ 数据标准化与转换。
4. Pandas 支持对数据进行增删改查等基本操作。
Matplotlib
1.Matplotlib 库的主要功能是对数据分析的结果进行可视化。
- 可以绘制的图像包括:
◇ 折线图
个 直方图
◇ 散点图
◇ 箱线图
◇ 雷达图等
3. 可以设置的各种图形元素,包括:
◇ 标题
个 坐标轴名称
◇ 线条颜色与样式 ◇ 图例等
Scipy
Scipy 是一种专门用于科学计算的工具库。它包含着八个功能各异的模块,在每个模块中都承担着各自特定的功能
◇ 插值 ◇ 积分 ◇ 优化
◇ 图像处理和特殊函数等。
机器学习步骤
- 机器学习的一般步骤包括:
① 数据采集
② 数据预处理
③ 建模、训练
④ 模型评估
⑤ 预测数据
在Scikit-learn中, 拆分函数train_test_split()能够根据指定的比率将数据集划分为训练子集和测试子集。例如, 在实际应用中可以通过设置test_size=0.2来确保测试集占总数据量的20%
首先将数据集划分为训练集和测试集;然后分别赋值给X_train、X_test、y_train和y_test;接着使用随机状态为0的方法,并设置测试大小为25%来进行分割操作
◇ 根据经验,通常会用75%的数据及其标签作为训练集,剩下25%的数据及其标
签作为测试集。
个 test_size参数:测试集比例(默认为0.25)。
一个 random_state参数:随机数种子(该参数用于指定生成器的种子值以确保结果的一致性与可重复性;若未指定,则会导致每次拆分结果不同)
拟合函数 fit() 负责处理训练集中的特征信息与对应的目标值。例如,在训练阶段, 我们会调用 model.fit(X_train, y_train) 进行学习操作。
y_train)。
4. 评估模型采用score()函数进行计算,例如 score=model.score(X_test, y_test). 需要注意的是,在测试集上进行模型评估.对于分类型模型而言,评估结果反映了其分类预测的准确性.准确率越高,则表明该模型具有更强的可信度.
5. 预测数据使用函数predict(), 可以对新数据做出预测。
Scikit-Learn 为机器学习算法提供了一致的方法体系,在不同任务案例中实现了统一的学习机制。
可以反复练习 Scikit-Learn构建分类/回归模型的过程。
第2章监督学习
本章内容重点介绍机器学习领域的监督学习技术及其应用。核心内容涵盖以下几大模块:首先阐述监督学习的核心概念;其次详细探讨基于K-NN(K-近邻)算法的葡萄酒分类预测问题;接着深入分析利用线性回归模型进行波士顿地区住宅价格评估;随后系统讲解逻辑回归方法在乳腺癌诊断中的应用;再后详细研究决策树与随机森林组合技术用于解决鲍鱼年龄预测问题;此外重点介绍了支持向量机(SVM)方法在手写数字识别方面的先进应用;最后深入探讨了基于朴素贝叶斯分类器的方法用于钞票真假鉴别分析。
本章的主要知识点如下:
监督学习
监督学习 (supervised learning)的主要显著特征是其所使用的数据都是经过标注过的。
◇ 监督学习的目的是:建立数据的特征与标签的对应规则。
◇ 相比于无监督学习,监督学习的效果更容易评价。
2. 监督学习的“监督”主要体现在数据的标签上。
◇ “监督”是通过标签来监督学习效果。
◇ “监督”不需要人为监督算法的学习效果。
3. 分类问题与回归问题是典型的监督学习应用。
◇ 分类问题的目标是预测数据的类别标签(class label)。
◇ 回归任务的目标是预测一个连续值。
一种简便的方法是通过考察其输出结果是否连续来区分分类任务和回归任务。
之间具有连续性,那么它就是一个回归问题。
分类问题
1. 分类问题的目标是预测数据的类别标签(class label)。
个 分类问题中,数据的标签是类别
◇ 分类算法输出的是样本的类别(标签)
分类问题主要包括二类分类 (Binary Classification, 包含两个类别) 和多类分类 (Multi-class classification)
Classification,2个以上类别)。
◇ 鸢尾花分类属于典型的多分类问题(3个类别),
◇ 手写数字识别(识别一张图片是09之间的哪个数)也属于多分类问题(09共10
个类别)
- 在二分类问题中,
◇ 正类:通常将其中一个类别称为正类 (positive class)
◇ 负类:另一个类别称为负类 (negative class)
◇ 将哪个类别作为“正类”,与具体的任务有关。
常见用于分类任务的算法包括k-NN、逻辑回归、朴素贝叶斯分类器以及随机森林
- 能够处理分类任务的常见算法有:K-NN、逻辑回归、决策树、xgboos 等。
回归问题
- 回归任务的目标是预测一个连续值。
◇ 回归的输出是连续的,分类的输出是离散的。
◇ 回归算法输出的样本对应的一个连续值。
例如基于历史统计数据、气候状况以及农场劳动力数量等因素进行分析研究。
就是一个回归问题。预测值产量,可以在给定范围内任意取值。
2. 回归的概念源于生物学领域,是指生物个体现象对整体规律的逼近。
3. 回归算法的任务是寻找恰当的回归方程来拟合输入数据与输出标签。
泛化
广义化的(Generalized)或其他形式的能力(abilities)通常被用作评估机器学习算法性能的关键方面。
十分重要的指标。
- 泛化或概括能力是指一个算法模型对陌生样本数据表现出的应变性和适应力(即一般化能力和普适性)。
模型的准确度并非越高越好,在训练数据上高的准确度未必能保证对新数据的有效预测能力。
过拟合、欠拟合
过拟合(Over Fitting): 被称为构建一个高度复杂且严格的数据驱动型模型的过程。
◇ “过拟合”现象中,模型在训练数据上的表现一般要好于在新数据上的表现
◇ 过拟合现象出现的原因是相对于训练数据来说模型的复杂度过高
2. 欠拟合(Under Fitting): 是指构建一个对现有数据来说过于简单的模型。
◇ 这类模型也许存在训练集上效果欠佳的情况,在这种情况下其精度不高。然而
在测试集上误差也大。
◇ 欠拟合现象出现的原因是模型的复杂度过低。
模型的复杂程度受数据影响,在训练数据规模较大且结构较为复杂的场景下,则可以选择较为合适的模型架构。
复杂的模型。但模型复杂度过高,容易发生过拟合现象。
- 过拟合与欠拟合是两个相对的概念,它们都对模型的泛化能力产生影响。在构建模型的过程中,我们需要充分认识到这一问题并采取相应的措施
要在二者之间找到一个最佳平衡,从而得到最好的泛化能力。
****K-****最近邻算法
1.K- 最近邻算法 (K-Nearest Neighbors, 简称K-NN) 是最简单的机器学习算法。
◇ 构建模型只需要保存训练数据集即可。
该系统旨在对新输入的数据点进行预测结果。通过 K-NN 算法,在训练数据集中搜索并获取与新输入数据点最邻近的 K 个样本。
数据点,也就是它的 “K 个最近邻”。
2.K- 最近邻算法的核心思想是:
◇ 近朱者赤、近墨者黑,
◇ 物以类聚、人以群分,
基于最近的几个邻居(用K表示)来推断新数据的结果。该方法不仅适用于分类任务(识别不同类别),同时也可用于回归分析(预测连续数值)。
◇ K-最近邻算法用于处理分类问题:对于K>1的情况,通过多数投票由K个邻居决定新数据点的类型
种类型的邻居多,就判断新数据点是那种类型。
K-近邻算法用于回归分析中使用的方法是:选择与目标样本距离最短的K个训练样本作为参考集,并通过这些参考样本的标签值来预测目标样本的结果值。
点,取平均值即为新数据点的输出值。
4.Scikit-learn 中 ,K-NN 算法默认使用欧式距离,也就是直线距离。
◇ 曼哈顿距离是另一种常使用的距离。曼哈顿距离又称“街区距离”。
曼哈顿距离被定义为:两点间的南北向距离与东西向距离之和,即为总曼哈顿距离。
d(i,j)=|xi-xjl+|yi-yjl。
◇ 例如:坐标轴中两点A(3,-1)和 B(-2,2), 则这两点的曼哈顿距离 (L1 距 离 ) :
L1=|3-(-2)|+|(-1)-2|=8。
线性回归算法
1. 线性模型中的“线性”是指:变量之间具有一次方函数关系。
- 线性模型既可以处理分类问题也可以做回归问题。
回归算法的本质是通过建立方程模型来估计参数值,从而有效地捕捉到输入数据与输出标签之间的联系
特征。它们之间的主要差异体现在采用不同的方法来估计参数以及模型结构的复杂程度存在差异。
- 线性模型解决回归问题的原理:是确定最佳线性函数以揭示输入变量与目标变量之间的关系(例如基于房屋特征预测房价),从而实现对新数据进行准确预测。对于波士顿地区的房价预测而言,则属于典型的回归分析范畴。常见的线性回归技术包括普通最小二乘法等方法。
◇ 标准线性回归(LinearRegression)
◇ 岭回归 ( Ridge)
◇ Lasso回归 ( Lasso)
Standard Linear Regression(标准线性回归)是一种基础且经典的分析工具,在回归模型中占据核心地位
◇ 模型通过最小二乘法(OLS) 来寻找一次线性方程y=wx+b 中的参数w 和 b, 使得
在训练集上的预测值与实际值之间的均方误差 ( MSE) 最小。
◇ 最小二乘法可以通过多个测量值来求解最接近实际值的值。
Mean Squared Error (often abbreviated as MSE) refers to the sum of squared differences between predicted and actual values divided by the number of samples.
在标准线性回归模型中引入了正则化项从而得到岭回归与Lasso回归
◇ 正则化(regularization)的功能:主要是通过调整模型参数*w以降低其复杂度
杂度,以达到避免过拟合的效果。
6. 线性模型解决分类问题的原理:是确定一个最佳的判别边界(即一个线性函数),使其能够
将训练集的数据最有效地分开,从而实现对新的数据进行分类。
◇ 逻辑回归 (LogisticsRegression) 个 线性支持向量机 (LinearSVC)
逻辑回归算法
逻辑回归(Logistic Regression, 简称为LR)尽管其名称包含"回归"这一术语,在分类任务中却展现了卓越的表现
◇ 能处理二分类问题
◇ 也能处理多分类问题
逻辑回归算法的本质是在线性回归预测函数的基础上引入了Sigmoid()作为输出函数以处理分类任务
◇ Sigmoid 函数,又叫 Logistic函数,逻辑回归即由此得名。
◇ 分类输出函数 Sigmoid()输出[0,1]之间的概率值,概率>0.5则预测值为1,反之预测
值为0,从而解决二分类问题。
3. 逻辑回归 (LR) 解决多分类问题的原理是:将问题转化为多个二分类问题。
第4节 逻辑回归模型基于 sklearn.linear_model.LogisticRegression 开发。它分别代表了两种不同的正则化方法
似,逻辑回归同样引入了正则化项来防止过拟合。
◇ 正则化参数C (默认为1.0): C 过大,容易出现过拟合,C 过小容易出现欠拟合。
◇ 正则化项类型 penalty(取值为“I1”或"12”,默认为"12")。
决策树算法
决策树和随机森林(一种基于多棵决策树的集成学习技术)是机器学习领域中应用广泛的重要模型。它们不仅能够有效解决分类问题和回归问题,在处理复杂的非线性关系时也展现出卓越的能力。
类问题、也可以解决回归问题。
决策树中的各个点包括根点(代表最先被考虑的因素)、中间点(代表其他相关因素)以及叶子点(表示最终决策的结果)。
由于在构建决策树时采用不同的标准来挑选特征,则发展出了三种主要的信息论算法
个 ID3 (使用信息增益),其中C4.5和 CART 都是由ID3 衍生而来。
◇ C4.5 (使用信息增益率)
个 CART (使用Gini 基尼指数)
- 决策树算法的关键在于如何生成最优的决策树(即每一层如何选择特征)。
决策树的剪枝:即为对决策树算法施加限定以控制模型复杂度的过程。如果未做限定,则该算法会生成一棵所有叶子节点均为纯节点且深度极大之树。这样模型会变得极为复杂,并容易发生过拟合。
-
决策树剪枝的目的是为了控制模型的复杂度、防止过拟合。
-
剪枝的条件包括:
① 限制决策树的最大深度
② 限制叶节点的最大数量
③ 规定一个节点中数据点的最小数目来防止决策树继续划分
- 剪枝通过创建模型时指定参数来实现,主要参数如下:
① max_depth: 限制决策树的最大深度。
② min_samples_leaf: 限制每个叶子节点包含的最少样本数
min_samples_split: 规定每个内部节点所需的最小样本数量为某个阈值;若样本数量低于该阈值,则不再进行分割。
④ max_leaf_nodes: 限制最大叶子节点数。
- 可以降低决策树过拟合现象的机制或方法归纳起来有以下几种:
① 剪枝
② 限制决策树层数
③ 使用集成算法
随机森林算法
常见集成方法包括套袋模型与提升模型(Bagging 和 Boosting),其基本思路在于将多个弱学习器组合以增强整体性能
◇ Bagging: 多个学习器同时独立运行,在分类任务中采用多数投票机制,在回归任务中采用平均策略以获得最终预测结果。
Boosting: 一系列模型依次运行,在线学习中后续的模型必须依赖前驱模型的输出结果,并对上一轮分错的样本进行重点优化。
样本权重提高,重新进行训练。
- 决策树集成算法主要有:
① Bagging(套袋模型):随机森林
② Boosting (提升模型):AdaBoost 和XgBoost
3. 随机森林算法的“随机”是指随机选择特征。
- 在资源允许的条件下, 采用决策树集成模型(包括但不限于随机森林, AdaBoost 等)通常表现出更高的性能或效果
好。随机森林算法的优点主要包括: 个 具有很好的抗噪声能力
◇ 对数据集的适应能力强
◇ 可以得到变量重要性排序
支持向量机算法
支持向量机(Support Vector Machine, 简称SVM)模型不仅可用于分类任务,并且同样适用于回归分析
归。
支持向量机(SVM)算法其本质在于确定能够使间距最大的两个分割超平面(如图中虚线标记为H1和H2)
◇ 支持向量(Support Vector): 位于这两个边界上的样本。
◇ 中间的实线H 就是最优超平面。
- 支持向量机算法的主要参数有:
① kernel: 核函数类型
② c: 惩罚系数
③ gamma 系数:rbf核函数的参数
4. 支持向量机(SVM) 算法的优化目标:是间隔最大化。
5.C 惩罚参数(默认为1.0),调节相关参数有助于改善SVM模型的过拟合与欠拟合问题。
① C过高,容易过拟合
② C 过小,容易欠拟合
③ 如果SVM 算法出现欠拟合问题,则应该增大惩罚系数C。
④ 如果SVM 算法出现过拟合问题,则应该减小惩罚系数C。
支持向量机算法-核函数
在线性不可分的情形下,支持向量机算法在处理这类问题时表现出色:该算法通过巧妙地运用核函数技术实现对非线性数据的处理
将当前维度上线性不可分的样本,转化到更高维度,使其线性可分。
在SVM算法中核函数的功能:是通过将样本映射至高维特征空间中以实现数据的线性可分性
通过将线性不可分的样本映射至高维空间以实现其线性可分。 3.k 核函数的主要类型有哪些:
◇ rbf(默认的核函数):径向基核函数(高斯核函数),应用最广的核函数,噪声
数据抗干扰能力强。
多项式核函数:通过将低维数据映射至高维空间实现特征扩展,在此过程中所涉及的向量经过正交归一化处理以确保其方向相互独立且长度标准化
1)的数据。
指 linear 核函数而言,在支持向量机中使用这一核函数时,默认场景下会被对应于 sklearn.svm.linearSVC 类别,并被用于处理线性可分的数据集情况;采用该核函数的支持向量机模型则被归类为一种线性分类器类型。
朴素贝叶斯算法
1. 朴素贝叶斯是假设“样本的特征之间是相互独立的”一类贝叶斯算法。
◇ 这里的“朴素”是指算法假设样本的特征之间没有关联。
朴素贝叶斯分类器属于贝叶斯算法中最为简洁且表现优异的一种经典分类算法。
该算法通过计算出每个测试样本在各分类别中的概率值来判断各类别之间的归属关系,并将测试样本归入具有最高概率值的那一类别中。
2. 在 scikit-learn 中,共有3种朴素贝叶斯分类算法:
该算法基于以下假设:其先验分布在统计学上服从高斯分布(即正态分布),这是其作为朴素贝叶斯算法的基础原理之一。
多项式朴素贝叶斯(MultinomialNB):其基于多项式先验分布的贝叶斯模型
算法
在该模型中,默认参数设置基于该变量服从双态概率分布在数据预处理阶段
素贝叶斯算法
第3章无监督学习
本章内容主要旨在全面阐述无监督学习的基本原理及其应用方法。具体涵盖以下几大模块:首先详细介绍了利用多种聚类算法对鸢尾花数据进行分类任务;其次深入探讨了基于密度聚类DBSCAN的实际案例分析;再次系统讲解了主成分分析PCA与线性判别分析LDA的数据降维技术;随后重点描述了LDA与支持向量机SVM相结合的人脸识别模型构建过程;最后深入研究了流形学习方法在数据降维与可视化方面的实际应用效果。
本章的主要知识点如下:
无监督学习
机器学习通过模拟人类的学习行为实现技术发展。它主要可分为两种类型:监督型与非监督型。两者之间的关键差异体现在两个方面:一是所处理的数据类型(即数据),二是所追求的目标(即任务)。
监督学习提供的有标签数据用于模型训练;监督学习旨在构建一个能够基于此数据预测未标记的新数据样本的系统。
的标签,监督学习主要包括:
① 分类(Classification)
② 回归 ( Regression)
- 无监督学习,在这种情况下, 模型所使用的训练数据未标注类别, 其目标在于通过分析数据固有的特性来进行分类处理, 即根据数据间的相似性将相似的对象归为一类。
4. 常见的无监督学习主要有:
① 聚类(Clustering)
② 降维 (Dimensionality Reduction)
聚类算法
该聚类算法基于数据内在特征的差异性进行分组(即实现内聚),该算法能够实现对数据集的分类。
给模型学习的数据没有标签。
- 根据不同的算法思想,常用的聚类模型有:
① K-均值聚类(K -Means)
② 均值漂移聚类(MeanShift)
③ 层次聚类(Birch)
④ 密度聚类( DBSCAN)
- 是否指定聚类数量参数,不同算法有一定的差别:
① K-均值聚类(K-Means) 需要指定聚类的数量K。
② 均值漂移聚类(MeanShift) 不需要指定。
③ Birch 聚类既可以不指定,也可以指定聚类数量,其参数为n_clusters。
④ DBSCAN 聚类无需知道聚类簇的数量。
4.K-Means 聚类算法中的 “K” 指的是:要聚成几类。
DBSCAN****聚 类 算 法
DBSCAN 是一种广为人知的基于密度的空间聚类算法。其英文全称是 Density-Based Spatial Clustering of Applications with Noise, 意即一种具有抗噪声能力的空间聚类算法(Robustness-健壮性)。从直观效果来看, DBSCAN 算法能够识别出样本点的所有密集区域,并将这些区域视为独立的聚类群。
2.DBSCAN的基本概念:这是一种专门用于处理空间数据聚类问题的方法。该系统通过评估空间中的点密度,在满足一定条件的情况下将密集区域划分为若干簇,并能够识别出不同形状且受噪声影响较小的数据分布模式。其中,每个簇被定义为由相互之间密度相连的所有点所组成的最大集合。
3. DBSCAN 算法具有以下特点:
① 基于密度,对远离密度核心的噪声点鲁棒( Robust- 健壮)
② 无需知道聚类簇的数量
③ 可以发现任意形状的聚类簇(突出优势)
4. DBSCAN 算法的主要参数有:
① 临近半径 ( eps ): 默认值 0.5。
√ 当某个指标数值过高时,在该区域内落入的点数量会增加,在这种情况下可能会导致样本分类的数量有所减少;原本应归为一类的数据点可能被错误地划分为另一类
√ 值过小,则类别数可能会增大,本来是一类的样本却被分开。
② 最小样本数(min_samples): 默认值5。
√ 当数值过高时,则可能使得原本同一类别的样本被错误地标记为噪声点,并使类别总数增加。
√ 当数值偏小时,则可能导致分类数量减少。
聚类算法评估指标
- 调整熵指数 (兰德指数): 在Scikit-Learn中,默认设置的聚类评价指标...
具体来说就是评估聚类结果与实际类别标签之间的对应关系(即准确率指标,有多少样本被正确归类的比例)。
实际类别中)。
◇ 取值范围为(0,1),值越大代表聚类越准确。
2.silhouette_score (轮廓系数):是聚类效果好坏的另外一种评价方式。
该评估指标着重于不考虑样本的真实类别归属,在计算轮廓系数的过程中,并不需要依赖样本数据的具体数值或真实值。
际标签。
个 该指标关注聚类结果中样本的内聚度和分离度(差异度)两种因素。
◇ 取值范围为(-1,1),值越大代表聚类的结果越合理。
降维算法
1. “维度 (Dimension)”: 在机器学习中通常指样本数据的特征数量。
◇ 鸢尾花数据集 (Iris)有四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),
因此可以说该数据集有四个维度,
◇ 红酒数据集(Wine) 有13个特征,可以说数据有13个维度。
降维(Dimension Reduction):简单来说就是降低数据的空间维度,并减少了数据的特征数目。
3. 数据降维的目的包括:
① 减少数据冗余,减少噪音数据对模型的影响,节省存储空间。
② 提取有效特征(提取对结果影响较大的特征、忽略无意义特征)。
③ 便于数据可视化及计算。(3维以上的数据很难可视化)
④ 提高模型的运行效率及准确性。
- 机器学习和数据分析中两种常用的经典降维算法是:
① PCA ( 主成分分析):无监督学习
② LDA (线性判别分析):监督学习
5. 选择哪种算法来降维要根据具体的目的和场景。
◇ 如果我们的目的是分类,那么一般来说选择LDA 算法更合理。
◇ 如果我们的数据没有标签,则选择PCA 算法。
PCA 降维算法
PCA(主成分分析)是机器学习领域中的重要工具,其缩写形式为Principal Component Analysis,其中"成分"可被视为样本的各种特性表现
2.PCA 算法不关注样本数据的标签信息,因此属于无监督学习。
从基本原理来看,PCA算法的主要目标是通过在不同维度上对数据进行映射,将高维空间的数据转换至低维空间。该过程旨在选择能够最大限度地保留原始数据特征的那些投影方向。这样就能既有效降低原始数据的空间维度、又能尽可能多地保持原有数据的关键属性。
4. PCA 本质上是通过一系列线性组合将原特征转化为几个综合特征,并消除特征数据之间的相关性,在维度减少的同时最大限度地保留原始高维数据的信息
PCA算法常用于sklearn.decomposition模块中,并广泛应用于该模块中的transform功能及其与fit的整合
LDA 降维算法
LDA (线性判别分析)的全称是Linear Discriminant Analysis, 它是一种经典的降维算法, 同样将高维数据投影到低维空间以实现降维目标.
PCA 算法通过选择投影方向以最大化数据在该方向上的方差来进行降维处理;该方法基于假设:在其他条件相同的情况下,在不同维度上的方差大小反映了各维度所携带的信息量多少。
该LDA算法采用投影后使得类内方差较小且类间方差较大的方向来进行投影,并进而实现降维并保持类别信息。
2.LDA 算法因为考虑了样本的标签,所以属于监督学习。
- LDA降维由于考虑到样本的类别标签信息, 其数据分布表现出良好的类型区分能力, 因此LDA更适合用于分类任务
t-SNE 降维算法
t-SNE(基于t-分布的随机邻域嵌入):其全名为'T-Distributed Stochastic Neighbor Embedding'(T-SNE),是一种
一种基于流形学习的非线性降维算法被深度学习专家Laurens van der Maaten 和 Geoffrey Hinton 在2008年首次提出。该算法特别适合于将高维数据降到2或3维空间中进行可视化。
2. 利用流形学习原理的t-SNE算法在数据降维和可视化方面表现出色。
3. 在数据降维领域中具有卓越表现的t-SNE算法其主要缺陷在于:
① 计算复杂度高
② 占用内存大
③ 降维速度较慢
当面对高维数据集时, 我们难以判断其分类效果, 即同类之间的间距较小, 同类与异类之间的间距也较小
大 ) , 可 以 通 过 t-SNE 投影到 2 维 或 3 维的空间中进行可视化观察。
第4章预处理与特征工程
本章内容重点阐述了机器学习中的预处理与特征工程,并对其具体实施方式进行详细阐述。具体而言, 本章涵盖的内容包括: 采用数据缩放技术进行预处理; 运用独热编码方法对离散型变量进行编码; 引入多项式特性和交互项以丰富模型复杂度; 对连续型变量实施分箱处理以生成离散特征; 实施自动化的特征选择机制; 并针对缺失值和异常数据进行特殊处理等各项操作
本章的主要知识点如下:
数据缩放
数据缩放 (Scale): 基于特定的数学转换手段, 对原始数据进行按比例处理
换,将数据放到一个统一的特定区间内。
- 数据缩放的作用主要有:
使数据标准化处理:通过减少不同特征间的规模差距来实现统一尺度下的相对指标转化
数值。
◇ 将数据缩放到特定范围。
◇ 提升模型的准确性和效率。
3.Scikit-learn 中常用的数据缩放方法有:
① StandardScaler
② MinMaxScaler
③ RobustScaler
④ Normalizer
4.StandardScaler 缩放器:
◇ 通过变换使每个特征集合的平均值为0,方差为1,
◇ 使所有特征都位于同一量级。 5.MinMaxScaler 缩放器:
◇ 将所有特征值都缩放到0到1之间,
◇ 对于二维数据集来说,所有的数据都包含在 x 轴 0 到 1 与 y 轴 0 到 1 组 成 的
矩形中。
6. RobustScaler 缩放器:
◇ 原理与StandardScaler 类似,确保每个特征都位于同一范围。
它采用的是中位数和四分位数而非平均值与方差;RobustScaler不会考虑其相关属性。
他点有很大不同的异常值(比如测量误差)。
7. Normalizer缩放器:
将所有数据点投影至单位圆上(在更高维空间中则为超球面),对每一个数值进行相应的处理。
据点的缩放比例都不相同,
◇ 如果任务只考虑数据的方向或角度,不考虑特征向量的长度,通常会使用
Normalizer进行归一化。
8. 数据缩放器位于sklearn.preprocessing 预处理模块。
数据标准化和数据归一化
1. 作为数据缩放的两种常用方法,标准化和归一化的区别主要有:
标准化是指通过将特征列调整到均值为零、标准差为一的状态来实现的数据预处理方法。(如 StandardScaler 算法)
◇ 归一化是将特征值缩放到(0,1)或(- 1,1)之间。(如MinMaxScaler算 法 )
树状结构算法(包括决策树和随机森林等)不受特征尺度的影响,一般无需对数据进行缩放处理。
包括标准化和归一化处理。
◇ 决策树算法的关键在于如何生成最优的决策树(即每一层如何选择特征),
在构建决策树模型时,在选择根节点之前必须考虑哪些因素?随后,在构建子节点的过程中又该如何操作?
面的中间节点,以此类推,直到所有节点都是叶子节点。
独热编码
数据的表现形式对于机器学习的效果具有决定性的影响。为了实现最佳的数据表现形式这一目标所采取的方法被称为优化过程或特征提取技术。
“特征工程”,其目的是通过改善数据质量来提升模型的性能。
大多数机器学习模型在处理过程中需要对离散特征进行数值化处理,在这种情况下通常采用独热编码(one-hot encoding)技术来表示这些非连续变量
是最常用的离散特征编码方式。
◇ 如果特征是无序的离散值(如学历、颜色、国籍),通常需要进行独热编码,
◇ 如果特征是连续值(如身高、体重、价格),则不需要进行独热编码。
3. 独热编码 (one-hot 编码)也叫留一编码,
◇ 编码中只有一个是1,其他全为0。
一 用于表示原始特征的各种取值数量的变量会被编码成独立的一系列字段(例如,在这个示例中 color 特征求取红 黄 蓝三种不同的值时 这些变量会被分别编码成三个字段)
4. 独热编码确保了每个离散取值的无序特性、公平性质以及相互正交性质,实现了对离散特征的有效编码
数值化问题、提高了数据质量,有助于提高模型的性能。
树状结构方法(例如决策树和随机森林)与特征的具体值无关,在处理过程中无需对原始数据进行离散化处理。
转换。
多项式特征
多项式特征包含两种计算方法:一是各列之间的乘积运算(即交互作用项),二是各列的高阶幂运算。
特征。
注意
◇ degree 多项式次数(整数)
◇ interaction_only 是否只生成交互特征(默认-Flase |True)
PolynomialFeatures类实例调用get_feature_names()方法能够获取特征名称(即列名),有助于提升展示效果。
4. 线 性回归结合多项式特征使用,可以拟合非线性数据。
在线性模型中引入多项式特徵和交互项
该方法是一种关键手段以提高模型性能,并且其具体效果会受所选模型及任务的影响而有所不同
例如,在波士顿房价数据集中,通过将多项式阶数设置为2引入多项式扩展后, 特征数量从13个增加到105个, 并且Ridge回归模型的性能得到了显著提升.
多项式的阶数过高可能导致模型出现过拟合问题。具体而言,在训练数据上的表现优异并不能保证对未知数据的有效预测能力。
分箱离散化
通过将连续的特征值进行离散化处理(Discretization)来提高分类模型的性能是一种重要方法。在对特征进行离散化处理后(Discretization),分类模型变得更加稳定,并且降低了过拟合的风险。
分箱处理(binning)是一种将连续变量转换为离散变量的方法。其核心在于将连续型特征分割为多个区间(即不同类别)。
具体来说,例如将考试成绩从连续的数值形式转换为以80分为满分及以上,60至80分为中等分数段,以及60分及以下作为低分区间段 (可采用独热编码或其他编码方式表示),通过分箱处理能够有效提升分类模型的表现
对于分类模型而言,在处理连续型特征时实施区间划分是一种常见策略。这种做法不仅有助于提升模型的整体稳定性,并且能有效避免了由于特征离散化导致的潜在问题。
拟合的风险,分类模型的准确性也得以提升。
- 分箱离散化处理的优点主要有:
◇ 离散化后模型对异常数据的抗干扰能力得以增强,模型更加稳定。
◇ 引入了非线性特征,同时便于增加交互特征,提升了数据的表达能力。
◇ 将所有特征值都变换到了相似的尺度上,统一了量纲。
KBinsDiscretizer分箱
1. 在 Scikit-learn中 ,KBinsDiscretizer类提供了集成度更高的分箱功能,
2. 调用方法:KBinsDiscretizer(n_bins,encode,strategy),主要参数:
① n_bins: 每个特征列的分箱个数
② encode: 分箱的编码类型
·ordinal- 数字顺序编码,
·onehot- 独热编码,
·onehot-dense 独热编码-稠密矩阵)
③ strategy: 分箱策略
·均匀间距划分:每个区间宽度一致 ·基于相等频率划分的方法:每个子集数据量相等
·kmeans- 聚类分箱:每个分箱中的值到其1维K均值聚类簇心的距离相同
自动特征选择
1. 当特征数量比较多时,模型容易变得更复杂,过拟合的可能性也会增加。
◇ 可以进行降维处理。
采用自动化特征选择筛选出对结果影响较小的部分特征,并剔除这些不影响结果的关键因素,则能够构建出泛化能力更强、结构更为简洁的模型。
- 自动化特征选择有三种基本策略:
◇ 单变量统计 (univariate statistics)
个 基于模型的选择 (model-based selection)
◇ 迭代选择 (iterativeselection)
单变量统计特征选择
对于单变量统计策略而言,在分析每个特征与目标值之间的关系时,请注意检验这些关系是否存在统计学意义,并进一步得出结论。
后选择具有最高置信度的特征。
单一变量(univariate)的定义是指其仅考虑单一变量本身。当该变量仅在与其他变量结合使用时才能提供有价值的信息,则该变量会被剔除。
个 单变量统计策略的计算速度通常很快,并且过程中不需要构建模型。
2.Scikit-Learn 中提供了两种常用的单变量统计特征选择器:
◇ SelectKBest选择器:按数量选择最优特征,参数K=指定选取的特征个数。
基于百分比的选择器:SelectPercentile是一种基于预设百分比值筛选特征的技术方法,在该方法中,默认情况下会按照指定比例(通常为5%)提取出表现最优秀的特征。其中参数percentile设定为选定特征的比例
比。
基于模型的特征选择
基于模型的方法选择特征就是旨在利用一个通常采用的是基于决策树的技术来确定最优特征集合。随后将依据特定标准对这些候选特征子集进行评估
后交给具体的任务模型使用。
这些模型拥有了 feature_importances_ 属性,并且能够直接返回每个特征
的重要性。
在Scikit-learn中,通过基于模型的选择器来完成自动特征选择的具体操作流程是:选择器被设置为 SelectFromModel实例(适用于树模型)。
迭代特征选择********RFE
基于特征的选择策略仅构建一个模型;而迭代选择则会按照数量由多至少或由少至多的方式构建一系列模型;持续迭代直至满足预设条件。
通常采用的迭代特征选择方法包括递归特征消除法(Recursive Feature Elimination),简称RFE。其具体过程如下:在每一步中会利用当前可用的所有特征进行模型构建,并根据模型性能评估的重要性排序结果剔除那些对模型贡献最小的特征。这一过程将不断重复直至满足预设的选择标准或筛选出最优的特 trưng集合。
3.RFE 构造方法的主要参数:
① 参数1:所基于的模型(基于树的模型,通常采用随机森林)
② 参数2: n_features_to_select,预设的特征数量(即最终选出的特征数量)
通常情况下而言
了多个模型,计算效率较低。
异常检测
outliers, also referred to as anomalies, represent data anomalies or outliers within a dataset. Such as an age of -1 years or a laptop weighing 1 ton, all fall under the category of outliers. From a distribution perspective, these outliers are typically situated outside the main data cluster.
在某些实际领域内,异常点往往具有重要意义。例如,在银行卡交易数据中出现的 异常点通常被视为值得关注的关键交易现象,并且往往涉及欺诈行为。此外,在网络通信数据中出现的 异常点可能反映 出恶意攻击或系统故障等情况。
3. 在机器学习中,在消除异常点之前必须确保能够正确识别这些数据特征;常见的做法是在识别出这些异常数据之后采取相应的处理措施以保证模型性能;这一步骤对于提高模型准确性和可靠性至关重要
提就是异常检测。
4.Scikit-learn 提供了几个常用的异常检测算法,包括:
① IsolationForest(iForest-孤立森林)-基于树结构( Tree)
② OneClassSVM (一类支持向量机)-基于支持向量机(SVM****)****
③ LocalOutlierFactor (LOF局部离群因子)-基于K-最近邻 ( K-NN)
- outlier ratio is a key parameter in outlier detection models, serving as the benchmark to distinguish between normal and abnormal data. Its specific value often depends on the unique characteristics of different application scenarios.
iForest********异常检测算法
1.IsolationForest(iForest 孤立森林):是基于树结构 (Tree) 的异常检测算法。
◇ 孤立森林模型是由华人团队提出的;
◇ 算法简洁高效、适应性强,近年来被广泛使用。
2. iForest 孤立森林算法的主要参数:
skleran.ensemble.IsolationForest(n_estimators,contamination):
① n_estimators- 树的个数(默认100,树越多模型越稳定,计算复杂度越高)
② contamination- 异常值比例(默认0.1)
OneClassSVM********异常检测算法
OneClassSVM(一种基于单一类别支持向量机或独特类别支持向量机):它是以支持向量机(SVM)为基础发展起来的一种算法
常检测算法。
◇ OneClassSVM 属于奇异点检测 (Novelty Detection);
通过排除了所有异常样本的数据集建立模型,并在此基础上在新数据中寻找潜在的异常点。
2.OneClassSVM 算法的主要参数:skleran.svm.OneClassSVM(nu,kernel,gamma)
① nu - 期望的异常值比例(默认0.5)
② kernel- 核函数 (rbf- 高斯核 [ 最 常 用 ] ,poly-线性核,l inear-线性核)
③ gamma -rbf核函数的参数
LOF 异常检测算法
LOF(局部离群因子):该算法基于k近邻方法实现异常检测功能。
◇ 孤 立 森 林 和LOF 属于离群点检测 (Outlier Detection);
即训练数据集中包含异常样本,则旨在通过模型区分正常数据点与异常数据点之间的差异。6.LocalOutlierFactor(LOF)算法的主要参数有两个:比例因子以及用于计算局部密度的方法
skleran.neighbors.LocalOutlierFactor(n_neighbors,contamination)
① n_neighbors -KNN 邻居个数(默认20)
② contamination- 异常值比例
第5章 模型评估与优化
本章内容主要阐述了模型评估与优化的方法,并涵盖以下内容:采用交叉验证方法对模型进行评估、运用网格搜索实现自动调参、学习并掌握常用的模型评估指标、此外还包含了利用Pipeline构建算法链的过程。
本章的主要知识点如下:
交叉验证
1. 交叉验证 (cross -validation) 是一种评估模型泛化能力的统计学方法。
在交叉验证过程中, 数据经过多次分割(多个训练/测试集合), 通过这些集合进行模型的训练与评估.
相比于仅仅进行一次训练集与测试集的划分, 交叉验证能够更加精准地、系统性地评估模型的整体性能.
交叉验证 (cross validation)的基本概念是将数据集反复分割成多组训练集与测试集,在每组中分别进行训练与验证,并综合多轮结果来全面评估模型性能。这种方法不仅能够更加全面准确地评估模型表现能力,还特别有助于提高模型的泛化能力。
3. 交叉验证的优点:
① 模型评估更客观、全面、稳定;
② 对数据的使用更高效。
主要缺点在于提升了计算开销。其中,在k折交叉验证的过程中, 必须训练并评估k个不同的模型
而不是1个。
5.Scikit-learn 中,交叉验证函数为cross_val_score。
◇ 参数cv表示划分的折数k, 通常取值3、5或10。
◇ 比 如cv=3,表示将数据集分为3份进行交叉验证,其返回值为3次评估的成绩。
交叉验证方法
1.K- 折交叉验证( k-fold cross validation)
◇ 最常用的交叉验证方式。折数K 是由用户指定的数字,通常取3、5或10。
2. 留一法交叉验证 (leave-one-out cross validation)
◇ 在极端情况下(即当k趋向于无穷大时),该方法等同于k-折交叉验证的一种特殊情况:在这种特殊情况下(即每个子集仅包含一个样本),所使用的k-折交叉验证与常规k-折交叉验证有何不同?
◇ 每次选取一个样本作为测试数据集、剩余样本作为训练数据集进行处理。每个样本都会对应训练一个模型,并用于验证。
◇ 有多少样本就会评估多少次。例如样本数为150********, 则交叉验证返回150 个结果。
- 打乱划分交叉验证 (Shuffle-split Cross Validation)
◇ 这是一种高度灵活的交叉验证方法。其主要优势在于, 它能够同时指定训练集和测试数据集划分
集的大小(样本数量或者比例)和划分次数(即迭代次数),主要参数如下:
① n_splits: 划分次数
② train_size: 训练集样本数量或比例
③ Test_size: 测试集样本数量或比例
◇ 打乱划分交叉验证可选择部分样本参与评估,在一定程度上更适合大型数据集运用。相比之下,在小规模数据集上更为适用的是一种留一法交叉验证方法。
GridSearchCV********自动调参
1. 参数优化的目标是在模型中找到一组最优参数。
需要注意避免将调参过程应用于测试数据集上;这样做可能会导致对测试集过高的依赖从而影响评估结果的有效性,并且建议将测试集仅用于验证而非训练阶段。
Scikit-learn 包含了网格搜索(GridSearchCV)这一工具来进行自动化地优化模型参数。该工具系统性地遍历预定义的参数集合,并且不仅还拥有交叉验证机制来评估不同组合的效果,在完成所有可能性评估后能够确定最优的参数配置。
3. 网格搜索 (GridSearchCV) 的参数主要包括:
① 参数1:所用的模型
② 参数2:预定义的参数取值列表
③ 参数3:交叉验证的次数CV
4.GridSearchCV 的常用属性有:
① best_params_: 最佳参数组合
② best_score_: 最佳参数组合的成绩
TP****、TN、FP、****FN
1.TP:True Positive (真正):指真实情况与预测结果均为"正"的情况。
2.TN:True Negative (真负):指真实情况与预测结果均为"负"的情况。
3.FP:False Positive (假正):指真实情况是"负"但被误判为"正"的情况。
4.FN:False Negative (假负):指真实情况是"正"但被误判为"负"的情况。
在该系统中,我们将男性设为阳性类别(P),女性设为阴性类别(N)
① TP (真正):将男生预测为男生。
② TN (真负):将女生预测为女生。
③ FP (假正):将女生预测为男生。
④ FN (假负):将男生预测为女生。
混淆矩阵
混淆矩阵用于记录各类别预测结果的数量(即在预测结果中各类别各自出现的次数),同时适用于评估二分类及多分类模型的效果
矩阵中的每一行数据代表一个实际类别的预测结果数量分布情况(具体来说,每行中的数字总和即为该实际类别的样本数量)
矩阵中的每一列代表预测结果中某一类别的数量分布情况(其中每一列所对应的数字总和等于该预测结果所涉及的样本总数)。
2.Scikit-learn 中,二分类问题的混淆矩阵每个数字分别表示[TN,FP],[FN,TP]]。
3. 混淆矩阵中,所有元素之和即为全部样本的总数。
准确率、精确率、召回率、 F1****值
- 准确率 (Accuracy,ACC)
在全部样本数据中,在所有样本中进行分类模型运行后得到的结果与真实结果相匹配的情况所占的比例即为该分类模型的正确率(也被称为准确率),其中score方法返回的就是这个指标值。
的就是准确率)。
◇ 计 算 公 式 :ACC=(TP+TN)/(TP+TN+FP+FN
2. 精确率 (Precision,P)
◇ 含义:预测为正类的样本中,真正是正类的比例,又称查准率。
◇ 计算公式:P=TP/(TP+FP)
- 召回率 (Recall,R)
◇ 含义:实际为正类的样本中,预测为正类的比例,又称查全率。
◇ 计算公式:R=TP/(TP+FN
4. F1值
◇ 含义:精确率与召回率的调和平均,综合衡量精确率与召回率,其值在0-1之间,
只有精确率与召回率都比较高时F1 值才较高。
◇ 计 算 公 式 :F1=(2PR)/(P+R)
5. 精确率和召回率更关注正样本的情况。
◇ 在正负样本数量均衡的情况下,精确率和召回率能正常评估模型。
当训练集中的正负类样本数量存在显著差异时,在这种情况下由于精确率与召回率均着重评估模型对正类样本的表现 二指标不适合用来全面衡量模型性能
ROC********曲 线
ROC(Receiver Operating Characteristic Curve) 全称是‘诊断性能指标曲线图’。
◇ 该曲线以假正率(FPR) 和真正率(TPR) 为轴的曲线,
◇ 横坐标为 FPR, 纵坐标为TPR。
◇ roc_curve 函数计算 FPR 和 TPR.
2.TPR(True Positive Rate): 真正率(灵敏度),实际是对的、预测为对的比例。
◇ TPR 越大越好,1为理想状态。
◇ 计算公式:TPR=TP/(TP+FN)。
3.FPR(False Positive Rate): 假正率(特异度),实际是错的、预测为对的比例。
◇ FPR越小越好,0为理想状态。
◇ 计算公式:FPR=FP/(FP+TN)。
- ROC曲线上每一个坐标点都对应于一个特定阈值下的模型真阳性率(TPR)和假阳性率(FPR),将这些点连接起来就组成了ROC曲线。
AUC********指 标
- ROC 曲线向左上方延伸 (AUC值越大),能够更好地区分正负类样本;反之则模型分类能力较弱。
- AUC值即为ROC曲线下方的覆盖区域大小(Area Under Curve, 曲线下面积)。
◇ AUC值越大,模型性能越好。 个 auc 函数计算 AUC 值。
阈值
1.ROC 曲线上的点,代表着选取一系列阈值 (threshold) 产生的结果。
阈值(也称临界值):在许多分类模型中,模型预测的结果不是负类别/正类别
(positive class)被定义为样本属于negative category或者positive category的概率。那么,在多大程度上我们视该样本为negative category或者将其归入positive category?该判断的数值被称为阈值(threshold)。
◇比如:阈值=0.5,则预测结果>0.5,即为正类,否则为负类。
3. ROC曲线实际上是基于阈值从小到大的变化方向进行评估模型泛化能力的一个重要指标。
P-R****曲 线
1.P-R 曲线:是精确率-召回率曲线,直观反映二者间的关系。
◇ 以召回率 (Recall)为 X 轴, 个 精确率(Precision)为 y 轴。
2.P-R 曲线同样通过设定多个不同阈值(threshold),分别计算每个阈值对应的精确度与召回率(precision and recall),从而绘制出一条P-R曲线图。
3. 模型的精确度与召回率之间存在权衡关系,在一般情况下(或普遍情况下),P-R曲线整体向右上方凸起趋势,则表示模型性能较好
- 在不同应用场景,使用ROC 曲线和 P-R曲线的效果会有一些差别。
◇ 在正负样本数量均衡的情况下,P-R曲线和ROC 曲线的趋势差不多;
当样本数量较多时P-R曲线的表现效果欠佳,在这种情况下ROC曲线更适合使用(因为其精确率和召回率较低)。
率更关注正样本的情况)。
Pipeline
在机器学习中, 通常会采用多种算法模型以完成某一特定任务, 例如在构建机器学习 pipelines时, 首先应用预处理模块, 然后结合分类或回归模块. 通过 Pipeline(管道)即可将这些组件有机整合.
一个完整的算法流程能够系统性地采用常见的 fit、score 和 predict 操作。
Pipeline(管道)的作用主要体现在:
① 构建算法链可以简化模型代码(避免多个模型重复调用 fit 等方法);
② 同时还可以避免因模型之间数据不一致导致的性能问题。
Pipeline 的经典应用场景是集成预处理流程与监督学习模型,并且可以通过网格搜索与交叉验证技术实现参数优化以选择最佳模型及对应的参数设置。
Pipleline 创建方法
1. 创建方法一:快速构建 Pipeline 对象;导入 sklearn.pipeline 库。
管道=管道([ (Model Name, Model Object), (Model Name, Model Object) ……]) 的一个优势是灵活设置模型名称。
◇ 缺点:书写比较复杂。
- 创建方法二:使用make_pipeline函数
from sklearn.pipeline import make_pipeline
pipeline=make_pipeline (模型对象,模型对象……)
◇ 优点:书写简洁。
◇ 缺点:缺点在于无法自行指定模型名称;函数会自动对模型对象进行命名;默认将命名为基于类名的小规模。
写。

