机器学习重要内容:特征工程之特征抽取

目录

1、简介

2、⭐为什么需要特征工程

3、特征抽取

3.1、简介

3.2、特征提取主要内容

3.3、字典特征提取

3.4、"one-hot"编码

3.5、文本特征提取

3.5.1、英文文本

3.5.2、结巴分词

3.5.3、中文文本

3.5.4、Tf-idf


⭐所属专栏:人工智能

文中提到的代码如有需要可以私信我发给你噢😊

1、简介

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

意义:会直接影响机器学习的效果

特征工程是机器学习中至关重要的一步,它涉及将原始数据转换为适合机器学习模型的特征(也称为变量或属性)。好的特征工程可以显著提高模型性能,因为它能够揭示数据中的有用信息,降低噪音影响,甚至帮助模型更好地泛化到新数据。

特征工程包含内容

  • 特征抽取
  • 特征预处理
  • 特征降维

以下是特征工程的一些常见方法和技巧:

  1. 特征选择(Feature Selection):从原始特征集中选择最相关、最有用的特征,以降低模型的复杂性和过拟合风险。
  2. 特征提取(Feature Extraction):通过数学变换,将原始特征转换为更具信息量的特征,例如主成分分析(PCA)、独立成分分析(ICA)等。
  3. 特征转换(Feature Transformation):对原始特征进行变换,以使其更适合模型,如对数、指数、归一化、标准化等。
  4. 多项式特征扩展(Polynomial Feature Expansion):将原始特征的多项式组合添加到特征集中,以捕获特征之间的非线性关系。
  5. 时间序列特征处理:针对时间序列数据,可以提取滞后特征(lag features)、移动平均、指数加权移动平均等。
  6. 文本特征处理:对文本数据进行词袋模型(Bag-of-Words)、TF-IDF(Term Frequency-Inverse Document Frequency)处理,或者使用词嵌入(Word Embeddings)等技术。
  7. 类别特征编码:将类别型特征转换为数值型特征,例如独热编码(One-Hot Encoding)、标签编码(Label Encoding)等。
  8. 缺失值处理:处理缺失值的方法包括删除含有缺失值的样本、填充缺失值、使用模型预测缺失值等。
  9. 特征交互与组合:通过对特征进行交互、组合,创建新的特征来捕获更高级的信息。
  10. 数据降维:使用降维技术(如PCA)减少数据维度,以减少计算复杂性和噪音的影响。
  11. 领域知识引导:利用领域专业知识来设计和选择特征,以更好地捕获问题的本质。

在进行特征工程时,需要注意以下几点:

  • 理解数据:深入了解数据的含义、结构和背景,以便做出更明智的特征工程决策。
  • 避免过拟合:特征工程可能导致过拟合问题,因此需要谨慎选择和处理特征。
  • 实验和迭代:尝试不同的特征工程方法,并使用交叉验证等技术来评估模型性能,以确定哪些方法有效。
  • 自动化:一些自动化特征选择和提取工具可以帮助你快速尝试不同的特征工程技术。

总之,特征工程是机器学习中一个关键且有创造性的阶段,它能够显著影响模型的性能和泛化能力。

2、⭐为什么需要特征工程

机器学习领域的大神Andrew Ng(吴恩达)老师说“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering. ”

业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

以下是特征工程的重要性和原因:

  1. 提取有用信息:原始数据可能包含大量的冗余或无关信息,特征工程能够通过选择、提取或转换特征,从中抽取出对问题有用的信息,提高模型的预测能力。
  2. 降低维度:某些问题可能涉及大量的特征,而高维度数据会导致计算成本的增加和过拟合的风险。特征工程可以通过降维技术(如主成分分析)减少数据维度,从而提高模型效率和泛化性能。
  3. 改善模型泛化:好的特征工程有助于降低模型在新数据上的错误率,提高模型的泛化能力,使其能够更好地适应未见过的数据。
  4. 处理缺失值和异常值:特征工程可以帮助处理数据中的缺失值和异常值,选择合适的填充策略或移除异常值,从而减少对模型的不良影响。
  5. 解决非线性关系:原始数据可能包含复杂的非线性关系,特征工程可以通过多项式特征扩展、特征交互和转换等方法,使模型能够更好地捕获这些关系。
  6. 提高模型解释性:通过特征工程,可以将数据转换为更易解释的形式,使模型的预测结果更具可解释性,有助于理解模型的决策依据。
  7. 适应不同模型:不同的机器学习模型对特征的需求不同,通过特征工程,可以根据模型的特点和假设来调整特征,提高模型性能。
  8. 利用领域知识:特征工程可以融入领域专业知识,根据问题背景和领域特点,选择和设计适用的特征,更好地捕获数据的本质。

总之,特征工程是机器学习流程中的关键步骤,它可以帮助我们将原始数据转化为更有意义、更适合模型的特征,从而提高模型的性能、泛化能力和解释性。特征工程的好坏直接影响着模型的效果,因此在实际应用中,合适的特征工程往往能够为机器学习任务带来显著的提升。

3、特征抽取

3.1、简介

特征抽取(Feature Extraction)是指从原始数据中自动或半自动地提取出具有代表性和信息丰富度的特征,以用于机器学习和数据分析任务。在特征抽取过程中,原始数据的维度可能会被降低,从而减少计算成本并提高模型的性能和泛化能力。

特征抽取的目标是将原始数据转换为更具有判别性和表达力的特征表示,以便更好地捕获数据中的模式、关系和变异。这有助于提高模型的训练效果,并且可以使模型更好地适应新的未见过的数据。

特征抽取的方法可以包括以下几种:

  1. 主成分分析(PCA):PCA是一种降维技术,通过线性变换将原始特征投影到一个新的坐标系中,使得投影后的特征具有最大的方差。这样可以将数据的维度减少,同时保留最重要的信息。
  2. 独立成分分析(ICA):ICA是一种用于提取独立信号的技术,适用于信号分离和降噪等场景,可以用于音频处理、图像处理等领域。
  3. 特征选择器(Feature Selectors):通过选择最相关或最重要的特征来降低维度,例如选择方差较大的特征、基于统计方法的特征选择等。
  4. 词袋模型(Bag-of-Words):在自然语言处理中,将文本数据转换为一个表示每个单词频次的向量,从而构建文本的特征表示。
  5. 傅里叶变换(Fourier Transform):用于将信号从时间域转换到频率域,常用于信号处理和图像处理领域。
  6. 小波变换(Wavelet Transform):类似于傅里叶变换,但可以同时提供时间和频率信息,适用于分析非平稳信号。
  7. 自编码器(Autoencoders):是一种神经网络结构,通过训练模型来学习数据的低维表示,常用于无监督学习任务。

特征抽取的选择取决于问题的性质、数据的类型以及任务的要求。它在处理高维数据、降低计算成本、提高模型泛化能力等方面具有重要作用,是特征工程的一个关键组成部分。

3.2、特征提取主要内容

1、将任意数据(如文本或图像)转换为可用于机器学习的数字特征

特征值化是为了计算机更好的去理解数据

  • 字典特征提取(特征离散化)
  • 文本特征提取
  • 图像特征提取(深度学习将介绍)

2、特征提取API:sklearn.feature_extraction

3.3、字典特征提取

作用:对字典数据进行特征值化

sklearn.feature_extraction.DictVectorizer(sparse=True,…)

DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩阵

DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式

DictVectorizer.get_feature_names() 返回类别名称

from sklearn.feature_extraction import DictVectorizer  # 实例化'''
sklearn.feature_extraction.DictVectorizer(sparse=True,…)DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩阵DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式DictVectorizer.get_feature_names() 返回类别名称
'''
def dict_demo():"""对字典类型的数据进行特征抽取:return: None"""data = [{'city': '北京', 'temperature': 100},{'city': '上海', 'temperature': 60},{'city': '深圳', 'temperature': 30}]# 1、实例化一个转换器类transfer1 = DictVectorizer(sparse=False)transfer2 = DictVectorizer()# 2、调用fit_transformdata2 = transfer2.fit_transform(data)data1 = transfer1.fit_transform(data)print("返回的结果(稀疏矩阵):\n", data2)print("返回的结果(原始矩阵):\n", data1)# 打印特征名字print("特征名字:\n", transfer1.get_feature_names_out())if __name__ == '__main__':dict_demo()

结果:

3.4、"one-hot"编码

"One-Hot"编码是一种常用的分类变量(也称为类别变量、离散变量)到数值变量的转换方法,用于将类别型数据表示为二进制向量的形式。这种编码方法在机器学习中广泛应用于处理类别型特征,以便将其用于各种算法和模型中。

在"One-Hot"编码中,每个类别被转换为一个唯一的二进制向量,其中只有一个元素为1,其余元素为0。这个元素的位置表示类别的索引或标签。这样做的目的是消除类别之间的顺序关系,以及用离散的0和1表示类别信息,使算法能够更好地处理类别型特征。

以下是一个简单的示例来解释"One-Hot"编码:

假设我们有一个表示动物种类的类别特征,包括猫、狗和鸟。"One-Hot"编码将这三个类别转化为如下形式的向量:

  • 猫:[1, 0, 0]
  • 狗:[0, 1, 0]
  • 鸟:[0, 0, 1]

这样,每个类别都被表示为一个唯一的二进制向量,其中对应的位置为1,其余位置为0。

在Python中,可以使用各种工具和库来进行"One-Hot"编码,其中最常用的是Scikit-Learn(sklearn)库的OneHotEncoder类。

以下是一个简单的代码示例:

from sklearn.preprocessing import OneHotEncoder# 创建OneHotEncoder对象
encoder = OneHotEncoder()# 假设有一个包含动物种类的数组
animal_categories = [['猫'], ['狗'], ['鸟']]# 进行One-Hot编码
encoded_categories = encoder.fit_transform(animal_categories).toarray()# 打印编码结果
print(encoded_categories)

结果:

3.5、文本特征提取

作用:对文本数据进行特征值化

sklearn.feature_extraction.text.CountVectorizer(stop_words=[]) 返回词频矩阵

CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵

CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格

CountVectorizer.get_feature_names() 返回值:单词列表

sklearn.feature_extraction.text.TfidfVectorizer

3.5.1、英文文本

下面对以下文本进行分析:["life is short,i like python","life is too long,i dislike python"]

流程分析:

实例化类CountVectorizer

调用fit_transform方法输入数据并转换 (注意返回格式,利用toarray()进行sparse矩阵转换array数组)

from sklearn.feature_extraction.text import CountVectorizer  # 文本特征提取'''
sklearn.feature_extraction.text.CountVectorizer(stop_words=[]) 返回词频矩阵CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格CountVectorizer.get_feature_names() 返回值:单词列表sklearn.feature_extraction.text.TfidfVectorizer
'''
def text_count_demo():"""对文本进行特征抽取,countvetorizer:return: None"""data = ["life is short,i like like python","life is too long,i dislike python"]# 1、实例化一个转换器类transfer = CountVectorizer()# 2、调用fit_transformdata = transfer.fit_transform(data)print("文本特征抽取的结果:\n", data.toarray())print("返回特征名字:\n", transfer.get_feature_names_out())if __name__ == '__main__':text_count_demo()

输出结果:

🔺如果替换成中文,则会出问题:"人生苦短,我喜欢Python" "生活太长久,我不喜欢Python"

为什么会得到这样的结果呢,仔细分析之后会发现英文默认是以空格分开的。

其实就达到了一个分词的效果,所以我们要对中文进行分词处理。

这里需要用到“结巴分词”

3.5.2、结巴分词

结巴分词(jieba)是一个流行的中文文本分词工具,被广泛应用于自然语言处理(NLP)任务中,如文本分析、信息检索、情感分析、机器翻译等。结巴分词是基于Python开发的开源项目,它提供了一种可靠高效的中文分词解决方案。

以下是结巴分词的一些特点和功能:

  1. 中文分词:结巴分词可以将中文文本切分成一个一个有意义的词语(词汇),从而为后续的文本处理和分析提供基础。
  2. 支持多种分词模式:结巴分词提供了不同的分词模式,包括精确模式、全模式、搜索引擎模式等,以适应不同的分词需求。
  3. 支持用户自定义词典:用户可以根据需要添加自定义的词典,用于识别领域特定的术语、词汇,从而提高分词的准确性。
  4. 高性能:结巴分词在分词速度上表现出色,可以处理大规模的文本数据。
  5. 支持繁体字分词:除了简体中文,结巴分词还支持繁体中文文本的分词。
  6. 词性标注:结巴分词可以对分词结果进行词性标注,帮助识别每个词语的词性,如名词、动词等。
  7. 适应多种任务:结巴分词不仅可以用于分词,还可以用于关键词提取、文本去重、文本相似度计算等任务。

3.5.3、中文文本

案例分析:

对以下三句话进行特征值化:

今天很残酷,明天更残酷,后天很美好,

但绝对大部分是死在明天晚上,所以每个人不要放弃今天。

我们看到的从很远星系来的光是在几百万年之前发出的,

这样当我们看到宇宙时,我们是在看它的过去。

如果只用一种方式了解某样事物,你就不会真正了解它。

了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。

分析:

准备句子,利用jieba.cut进行分词

实例化CountVectorizer

将分词结果变成字符串当作fit_transform的输入值

from sklearn.feature_extraction.text import CountVectorizer  # 文本特征提取
import jieba  # 结巴分词'''
使用结巴分词,对中文特征进行提取
'''
def text_chinese_count_demo2():"""对中文进行特征抽取:return: None"""data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]# 将原始数据转换成分好词的形式text_list = []for sent in data:text_list.append(" ".join(list(jieba.cut(sent))))  # 这里使用结巴分词print(text_list)# 1、实例化一个转换器类# transfer = CountVectorizer(sparse=False)transfer = CountVectorizer()# 2、调用fit_transformdata = transfer.fit_transform(text_list)print("文本特征抽取的结果:\n", data.toarray())print("返回特征名字:\n", transfer.get_feature_names_out())if __name__ == '__main__':text_chinese_count_demo2()

结果:

但如果把这样的词语特征用于分类,会出现什么问题?

该如何处理某个词或短语在多篇文章中出现的次数高这种情况?

这种情况下,我们需要用到"Tf-idf文本特征提取"。

3.5.4、Tf-idf

TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征提取方法,用于将文本数据转换为数值特征表示,以便用于机器学习和信息检索任务。

TF-IDF反映了一个词在文本中的重要性,同时考虑了词频和文档频率的影响。

TF-IDF文本特征提取的原理如下:

  1. 词频(Term Frequency,TF):表示一个词在一篇文档中出现的频率。计算方法为:一个词在文档中出现的次数除以文档的总词数。
  2. 逆文档频率(Inverse Document Frequency,IDF):表示一个词在所有文档中的普遍程度。计算方法为:总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数IDF的目的是降低常见词对文档区分能力的影响。
  3. TF-IDF:将词频和逆文档频率相乘,得到一个词在文档中的重要性得分。高频出现但在其他文档中不常见的词,得分会相对较高。

公式:

tfidf_{i,j}=tf_{i,j}\times tf_{i,j}

TF-IDF的优点在于它可以凸显文本中的关键词,过滤掉一些无意义的常见词,并为文本赋予数值特征,使得文本数据适用于各种机器学习算法。

案例:

from sklearn.feature_extraction.text import TfidfVectorizer  # TF-IDF特征提取
import jieba  # 结巴分词'''
提取TF-IDF特征
'''
def text_chinese_tfidf_demo():"""对中文进行特征抽取:return: None"""data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]# 将原始数据转换成分好词的形式text_list = []for sent in data:text_list.append(" ".join(list(jieba.cut(sent))))  # 这里使用结巴分词print(text_list)transfer = TfidfVectorizer(stop_words=['一种', '不会', '不要'])# 2、调用fit_transformdata = transfer.fit_transform(text_list)print("文本特征抽取的结果:\n", data.toarray())print("返回特征名字:\n", transfer.get_feature_names_out())if __name__ == '__main__':text_chinese_tfidf_demo()

TF-IDF特征提取如下:

这段输出表示TF-IDF文本特征抽取的结果,是一个特征矩阵,其中每一行代表一个文本样本,每一列表示一个单词的TF-IDF得分。

TF-IDF(词频-逆文档频率)是一种用于衡量一个词在文本中的重要性的指标,结合了词频(TF)和逆文档频率(IDF)。TF-IDF越高,说明该词在当前文本中越重要且越不常见于其他文本。

以下是对输出矩阵的解释:

  • 第一行:表示第一篇文本样本的TF-IDF特征向量。特征向量中的每个元素表示对应单词的TF-IDF得分。例如,"今天"的TF-IDF得分是0.43643578,"很"的得分是0.21821789。
  • 第二行:表示第二篇文本样本的TF-IDF特征向量。例如,"我们"的TF-IDF得分是0.2410822,"光"的得分是0.55004769。
  • 第三行:表示第三篇文本样本的TF-IDF特征向量。例如,"了解"的TF-IDF得分是0.644003,"事物"的得分是0.3220015。

在这个特征矩阵中,每一行表示一个文本样本,每一列对应一个单词(词汇表中的词)。

每个元素表示对应单词在对应文本中的TF-IDF得分。

这个矩阵将文本数据转换为数值特征表示,可以作为机器学习算法的输入。

通常情况下,为了方便理解,这些得分会在实际应用中进行归一化或者规范化处理。

Tf-idf的重要性:分类机器学习算法进行文章分类中前期数据处理方式

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

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

相关文章

LLaMA长度外推高性价比trick:线性插值法及相关改进源码阅读及相关记录

前言 最近,开源了可商用的llama2,支持长度相比llama1的1024,拓展到了4096长度,然而,相比GPT-4、Claude-2等支持的长度,llama的长度外推显得尤为重要,本文记录了三种网络开源的RoPE改进方式及相…

Vue-打印组件页面

场景: 需要将页面的局部信息打印出来&#xff0c;只在前端实现&#xff0c;不要占用后端的资源。经过百度经验&#xff0c;决定使用 print-js和html2canvas组件。 1. 下载包 npm install print-js --save npm install --save html2canvas 2. 组件内引用 <script>impo…

TPAMI, 2023 | 用压缩隐逆向神经网络进行高精度稀疏雷达成像

CoIR: Compressive Implicit Radar | IEEE TPAMI, 2023 | 用压缩隐逆向神经网络进行高精度稀疏雷达成像 注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于Nature/Science及其子刊;MobiCom, Sigcom, MobiSy…

Java【算法 04】HTTP的认证方式之DIGEST认证详细流程说明及举例

HTTP的认证方式之DIGEST 1.是什么2.认值流程2.1 客户端发送请求2.2 服务器返回质询信息2.2.1 质询参数2.2.2 质询举例 2.3 客户端生成响应2.4 服务器验证响应2.5 服务器返回响应 3.算法3.1 SHA-2563.1.1 Response3.1.2 A13.1.3 A2 3.2 MD53.2.1 Request-Digest3.2.2 A13.2.3 A2…

CSS3 中新增了哪些常见的特性?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 圆角&#xff08;Border Radius&#xff09;⭐ 渐变&#xff08;Gradients&#xff09;⭐ 阴影&#xff08;Box Shadow&#xff09;⭐ 文本阴影&#xff08;Text Shadow&#xff09;⭐ 透明度&#xff08;Opacity&#xff09;⭐ 过渡&…

Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find

问题再现&#xff1a; 2023-08-15 16:51:16,151 DEBUG [reactor-http-nio-2][CompositeLog.java:147] - [dc73b32c-1] Encoding [{timestampTue Aug 15 16:51:16 CST 2023, path/content/course/list, status503, errorService Unavai (truncated)...] 2023-08-15 16:51:16,17…

leetcode27—移除元素

思路&#xff1a; 参考26题目双指针的思想&#xff0c;只不过这道题不是快慢指针。 看到示例里面数组是无序的&#xff0c;也就是说后面的元素也是可能跟给定 val值相等的&#xff0c;那么怎么处理呢。就想到了从前往后遍历&#xff0c;如果left对应的元素 val时&#xff0c…

汽车制造业上下游协作时 外发数据如何防泄露?

数据文件是制造业企业的核心竞争力&#xff0c;一旦发生数据外泄&#xff0c;就会给企业造成经济损失&#xff0c;严重的&#xff0c;可能会带来知识产权剽窃损害、名誉伤害等。汽车制造业&#xff0c;会涉及到重要的汽车设计图纸&#xff0c;像小米发送汽车设计图纸外泄事件并…

[足式机器人]Part5 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】

本文仅供学习使用 本文参考&#xff1a; 《机械设计》 王德伦 马雅丽课件与日常作业可登录网址 http://edu.bell-lab.com/manage/#/login&#xff0c;选择观摩登录&#xff0c;查看2023机械设计2。 机械设计-Ch00Ch01——绪论机器结构组成与连接 Ch00-绪论0.1 何为机械设计——…

12.Eclipse导入Javaweb项目

同事复制一份他的项目给我ekp.rar (懒得从SVN上拉取代码了)放在workspace1目录下 新建一个文件夹 workspace2&#xff0c;Eclipse切换到workspace2工作空间 选择Import导入 选择导入的项目(这里是放到workspace1里面) 拷贝一份到workspace2里面 例子 所有不是在自己电脑上开发…

可白嫖的4家免费CDN,并测试其网络加速情况(2023版)

网站加载速度优化过程中&#xff0c;不可避免的会用上CDN来加速资源的请求速度。但是市面上的CDN资源几乎都是要收费的&#xff0c;而且价格还不便宜&#xff0c;对于小公司站长来讲&#xff0c;这将是一笔不小的开销。不过还是有一些良心公司给我们提供了免费的资源&#xff0…

Redis_亿级访问量数据处理

11. 亿级访问量数据处理 11.1 场景表述 手机APP用户登录信息&#xff0c;一天用户登录ID或设备ID电商或者美团平台&#xff0c;一个商品对应的评论文章对应的评论APP上有打卡信息网站上访问量统计统计新增用户第二天还留存商品评论的排序月活统计统计独立访客(Unique Vistito…

【BEV】3D视觉 PRELIMINARY

这里的知识来自于论文 Delving into the Devils of Bird’s-eye-view Perception: A Review, Evaluation and Recipe 的 Appendix B.1 部分来自 这篇文章 从透视图转向鸟瞰图。&#xff08;Xw、Yw、Zw&#xff09;、&#xff08;Xc、Yc、Zc&#xff09;表示世界World坐标和相…

Android学习之路(4) UI控件之Button (按钮)与 ImageButton (图像按钮)

本节引言&#xff1a; 今天给大家介绍的Android基本控件中的两个按钮控件&#xff0c;Button普通按钮和ImageButton图像按钮&#xff1b; 其实ImageButton和Button的用法基本类似&#xff0c;至于与图片相关的则和后面ImageView相同&#xff0c;所以本节 只对Button进行讲解&am…

vue自定义穿梭框支持远程滚动加载

分享-2023年资深前端进阶&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结&#xff0c;前端之巅 *分享一个使用比较久的&#x1fa9c; 技术框架公司的选型(老项目)&#xff1a;vue2 iview-ui 方案的实现思路是共性的&#xff0c;展现UI样式需要你们自定义进行更改&#…

【注解使用】使用@Autowired后提示:Field injection is not recommended(Spring团队不推荐使用Field注入)

问题发生场景&#xff1a; 在使用 IDEA 开发 SpringBoot 项目时&#xff0c;在 Controller 类中使用注解 Autowired 注入一个依赖出现了警告提示&#xff0c;查看其他使用该注解的地方同样出现了警告提示。这是怎么回事&#xff1f;由于先去使用了SpringBoot并没有对Spring进行…

分布式 - 消息队列Kafka:Kafka消费者和消费者组

文章目录 1. Kafka 消费者是什么&#xff1f;2. Kafka 消费者组的概念&#xff1f;3. Kafka 消费者和消费者组有什么关系&#xff1f;4. Kafka 多个消费者如何同时消费一个分区&#xff1f; 1. Kafka 消费者是什么&#xff1f; 消费者负责订阅Kafka中的主题&#xff0c;并且从…

【数据结构OJ题】反转链表

原题链接&#xff1a;https://leetcode.cn/problems/reverse-linked-list/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 方法一&#xff1a;三指针翻转法 使用三个结构体指针n1&#xff0c;n2&#xff0c;n3&#xff0c;原地修改结点…

VSCode如何设置高亮

一、概述 本文主要介绍在 VSCode 看代码时&#xff0c;怎样使某个单词高亮显示&#xff0c;主要通过以下三步实现&#xff1a; 安装 highlight-words 插件 配置 highlight-words 插件 设置高亮快捷键F8 工作是嵌入式开发的&#xff0c;代码主要是C/C的&#xff0c;之前一直用…

【Linux】高级IO

目录 IO的基本概念 钓鱼五人组 五种IO模型 高级IO重要概念 同步通信 VS 异步通信 阻塞 VS 非阻塞 其他高级IO 阻塞IO 非阻塞IO IO的基本概念 什么是IO&#xff1f; I/O&#xff08;input/output&#xff09;也就是输入和输出&#xff0c;在著名的冯诺依曼体系结构当中…