机器学习实战:从数据预处理到模型评估的完整案例

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:机器学习实战:从数据预处理到模型评估的完整案例

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录

  • 前言
    • 1. 数据集介绍
      • 1.1 鸢尾花数据集概述
      • 1.2 特征描述
      • 1.3 目标变量
      • 1.4 数据集的结构
      • 1.5 数据集的应用
      • 1.6 数据集的获取
    • 2. 环境准备
      • 2.1 安装 Python
      • 2.2 安装包管理工具
      • 2.3 创建虚拟环境
      • 2.4 安装必要的库
      • 2.5 验证安装
      • 2.6 IDE 选择
    • 3. 数据加载与预处理
      • 3.1 数据加载
      • 3.2 数据探索
      • 3.3 数据可视化
      • 3.4 数据预处理
        • 3.4.1 特征选择
        • 3.4.2 数据标准化
        • 3.4.3 数据分割
    • 4. 模型选择与训练
      • 4.1 选择模型
      • 4.2 创建模型
      • 4.3 训练模型
      • 4.4 模型预测
      • 4.5 模型评估
      • 4.6 可视化混淆矩阵
      • 4.7 超参数调优(可选)
    • 5. 结果分析
      • 5.1 混淆矩阵分析
      • 5.2 分类报告分析
      • 5.3 可视化结果
        • 5.3.1 ROC 曲线
        • 5.3.2 Precision-Recall 曲线
      • 5.4 结果总结
  • 结论

在这里插入图片描述

前言

  在当今数据驱动的时代,机器学习已经成为各行各业的重要工具。无论是在金融、医疗、还是零售领域,机器学习都在帮助企业做出更明智的决策,提升效率和创新能力。然而,对于许多初学者来说,机器学习的复杂性和多样性可能让人感到困惑。

  本文旨在通过一个具体的实战案例,帮助读者理解机器学习的基本概念和流程。我们将通过一个具体的机器学习实战案例,展示如何从数据预处理到模型评估的整个流程。我们将使用 Python 和常用的机器学习库,如 Pandas、Scikit-learn 和 Matplotlib。我们的目标是构建一个简单的分类模型,预测鸢尾花(Iris)数据集中的花种类。

  让我们一起探索机器学习的世界,掌握这一强大的工具,为未来的挑战做好准备!

1. 数据集介绍

1.1 鸢尾花数据集概述

  鸢尾花数据集(Iris Dataset)是机器学习领域中最经典和广泛使用的数据集之一。该数据集由著名的统计学家和生物学家罗纳德·费希尔(Ronald A. Fisher)于1936年首次引入,主要用于模式识别和分类算法的研究。数据集包含150个样本,分为三种不同的鸢尾花种类:山鸢尾(Iris Setosa)、变色鸢尾(Iris Versicolor)和维吉尼亚鸢尾(Iris Virginica)。每种花的样本数量均为50个。

1.2 特征描述

鸢尾花数据集包含四个特征,这些特征是通过测量花萼和花瓣的长度和宽度获得的。具体特征如下:

  1. 花萼长度(sepal length):以厘米为单位,表示花萼的长度。
  2. 花萼宽度(sepal width):以厘米为单位,表示花萼的宽度。
  3. 花瓣长度(petal length):以厘米为单位,表示花瓣的长度。
  4. 花瓣宽度(petal width):以厘米为单位,表示花瓣的宽度。

1.3 目标变量

目标变量是鸢尾花的种类,包含以下三类:

  • 0:山鸢尾(Iris Setosa)
  • 1:变色鸢尾(Iris Versicolor)
  • 2:维吉尼亚鸢尾(Iris Virginica)

1.4 数据集的结构

鸢尾花数据集的结构可以用一个表格来表示,每一行代表一个样本,每一列代表一个特征或目标变量。数据集的示例结构如下:

花萼长度 (cm)花萼宽度 (cm)花瓣长度 (cm)花瓣宽度 (cm)种类
5.13.51.40.20
4.93.01.40.20
4.73.21.30.20
6.33.36.02.52

1.5 数据集的应用

鸢尾花数据集因其简单性和可视化效果,成为机器学习和数据科学教育中的重要工具。它常用于以下几个方面:

  • 分类算法的测试与比较:研究人员和开发者可以使用该数据集来测试不同的分类算法,如决策树、支持向量机、K近邻等。
  • 数据可视化:通过可视化技术,用户可以直观地观察特征之间的关系以及不同类别之间的分布。
  • 特征工程的实践:数据科学家可以在此数据集上练习特征选择、特征提取和数据预处理等技能。

1.6 数据集的获取

鸢尾花数据集可以通过多种方式获取,包括:

  • Scikit-learn库:在Python中,用户可以直接使用Scikit-learn库中的load_iris()函数加载数据集。
  • UCI机器学习库:该数据集也可以在UCI机器学习库网站上找到,供研究和学习使用。

2. 环境准备

  在进行机器学习项目之前,确保你的开发环境已正确设置是至关重要的。以下是详细的环境准备步骤,包括所需软件、库的安装以及基本配置。

2.1 安装 Python

  首先,你需要确保你的计算机上安装了 Python。推荐使用 Python 3.x 版本,因为许多现代机器学习库都已停止对 Python 2.x 的支持。

  • 下载 Python:访问 Python 官方网站 下载适合你操作系统的安装包。
  • 安装 Python:按照安装向导的指示进行安装,确保在安装过程中勾选“Add Python to PATH”选项,以便在命令行中直接使用 Python。

2.2 安装包管理工具

  为了方便管理 Python 库,建议使用 pip(Python 的包管理工具)。通常,Python 安装包中会自带 pip,你可以在命令行中输入以下命令来检查是否已安装:

pip --version

  如果未安装,可以通过以下命令安装:

python -m ensurepip --upgrade

2.3 创建虚拟环境

  为了避免库版本冲突,建议为每个项目创建一个虚拟环境。可以使用 venv 模块创建虚拟环境。

# 创建虚拟环境
python -m venv iris_env

# 激活虚拟环境
# Windows
iris_env\Scripts\activate

# macOS/Linux
source iris_env/bin/activate

  激活虚拟环境后,你会看到命令行前面出现 (iris_env),表示当前处于该虚拟环境中。

2.4 安装必要的库

  在虚拟环境中,安装机器学习和数据处理所需的库。以下是一些常用的库及其安装命令:

  1. Pandas:用于数据处理和分析。
  2. NumPy:用于科学计算和数组操作。
  3. Scikit-learn:用于机器学习算法的实现。
  4. Matplotlib:用于数据可视化。
  5. Seaborn:基于 Matplotlib 的数据可视化库,提供更美观的图表。

  可以通过以下命令一次性安装这些库:

pip install pandas numpy scikit-learn matplotlib seaborn

2.5 验证安装

  安装完成后,可以通过以下 Python 代码验证库是否成功安装:

import pandas as pd
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
import seaborn as sns

print("所有库安装成功!")

  在命令行中运行上述代码,如果没有错误信息,则表示所有库已成功安装。

2.6 IDE 选择

  为了方便编写和调试代码,建议使用集成开发环境(IDE)。以下是一些常用的 Python IDE:

  • Jupyter Notebook:非常适合数据科学和机器学习项目,支持交互式编程和可视化。
  • PyCharm:功能强大的 Python IDE,适合大型项目开发。
  • Visual Studio Code:轻量级的代码编辑器,支持多种编程语言,适合快速开发。

  你可以根据个人喜好选择合适的 IDE,并进行安装。

3. 数据加载与预处理

  在机器学习项目中,数据加载和预处理是至关重要的步骤。它们确保数据以适合模型训练的格式存在,并且通过清洗和转换提高数据质量。以下是详细的步骤和代码示例,展示如何加载和预处理鸢尾花数据集。

3.1 数据加载

  我们将使用 Scikit-learn 库中的 load_iris() 函数来加载鸢尾花数据集。该函数返回一个包含数据和目标变量的对象。

from sklearn.datasets import load_iris
import pandas as pd

# 加载鸢尾花数据集
iris = load_iris()

# 将数据转换为 DataFrame
data = pd.DataFrame(data=iris.data, columns=iris.feature_names)
data['target'] = iris.target

# 查看数据集的前几行
print(data.head())

  在上述代码中,我们首先导入所需的库,然后加载数据集并将其转换为 Pandas DataFrame,以便于后续的数据处理和分析。

3.2 数据探索

  在进行数据预处理之前,了解数据的基本特征和结构是非常重要的。我们可以使用以下方法进行数据探索:

  • 查看数据的基本信息
# 查看数据集的基本信息
print(data.info())
  • 查看数据的描述性统计
# 查看数据的描述性统计
print(data.describe())
  • 检查缺失值
# 检查缺失值
print(data.isnull().sum())

3.3 数据可视化

  数据可视化可以帮助我们更好地理解数据的分布和特征之间的关系。我们可以使用 Seaborn 和 Matplotlib 进行可视化。

import seaborn as sns
import matplotlib.pyplot as plt

# 可视化特征之间的关系
sns.pairplot(data, hue='target', palette='Set1')
plt.show()

  通过 pairplot,我们可以直观地观察到不同特征之间的关系以及不同类别的分布情况。

3.4 数据预处理

  在数据加载和探索之后,我们需要进行一些数据预处理,以确保数据适合模型训练。以下是一些常见的预处理步骤:

3.4.1 特征选择

  在鸢尾花数据集中,我们已经知道所有的特征都是有用的,因此我们可以直接使用所有特征进行建模。

# 特征和目标变量
X = data.iloc[:, :-1]  # 特征
y = data['target']      # 目标变量
3.4.2 数据标准化

  虽然鸢尾花数据集中的特征已经在相似的范围内,但在某些情况下,标准化可以提高模型的性能。我们可以使用 StandardScaler 进行标准化处理。

from sklearn.preprocessing import StandardScaler

# 创建标准化对象
scaler = StandardScaler()

# 对特征进行标准化
X_scaled = scaler.fit_transform(X)

# 将标准化后的数据转换为 DataFrame
X_scaled = pd.DataFrame(X_scaled, columns=X.columns)

# 查看标准化后的数据
print(X_scaled.head())
3.4.3 数据分割

  在模型训练之前,我们需要将数据集分为训练集和测试集,以便评估模型的性能。我们将使用 Scikit-learn 的 train_test_split 函数进行数据分割。

from sklearn.model_selection import train_test_split

# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 查看训练集和测试集的形状
print(f"训练集形状: {X_train.shape}, 测试集形状: {X_test.shape}")

4. 模型选择与训练

  在数据预处理完成后,接下来我们将选择合适的机器学习模型并进行训练。在本案例中,我们将使用支持向量机(SVM)作为分类模型。SVM 是一种强大的监督学习算法,适用于分类和回归任务,特别是在高维空间中表现良好。

4.1 选择模型

  支持向量机(SVM)通过寻找最佳的超平面来分隔不同类别的数据点。我们将使用 Scikit-learn 库中的 SVC 类来实现 SVM 模型。

4.2 创建模型

  在创建模型之前,我们可以选择不同的内核(kernel)来适应数据的分布。常用的内核包括线性内核(linear)、多项式内核(poly)和径向基函数内核(RBF)。在本案例中,我们将使用线性内核。

from sklearn.svm import SVC

# 创建支持向量机模型
model = SVC(kernel='linear', random_state=42)

4.3 训练模型

  使用训练集数据来训练模型。我们将调用模型的 fit 方法,将训练特征和目标变量传入。

# 训练模型
model.fit(X_train, y_train)

# 输出训练完成的信息
print("模型训练完成!")

4.4 模型预测

  训练完成后,我们可以使用测试集进行预测。调用模型的 predict 方法,将测试特征传入。

# 进行预测
y_pred = model.predict(X_test)

# 输出预测结果
print("预测结果:", y_pred)

4.5 模型评估

  为了评估模型的性能,我们将使用混淆矩阵和分类报告。混淆矩阵显示了真实标签与预测标签之间的关系,而分类报告提供了精确率、召回率和 F1 分数等指标。

from sklearn.metrics import classification_report, confusion_matrix

# 评估模型
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

# 输出混淆矩阵和分类报告
print("混淆矩阵:\n", conf_matrix)
print("\n分类报告:\n", class_report)

4.6 可视化混淆矩阵

  为了更直观地理解模型的性能,可以将混淆矩阵可视化。我们可以使用 Seaborn 库来绘制热图。

plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.ylabel('真实标签')
plt.xlabel('预测标签')
plt.title('混淆矩阵')
plt.show()

4.7 超参数调优(可选)

  在实际应用中,模型的性能可能会受到超参数的影响。我们可以使用网格搜索(Grid Search)来寻找最佳的超参数组合。Scikit-learn 提供了 GridSearchCV 类来实现这一功能。

from sklearn.model_selection import GridSearchCV

# 定义超参数范围
param_grid = {
    'C': [0.1, 1, 10, 100],
    'gamma': ['scale', 'auto'],
    'kernel': ['linear', 'rbf']
}

# 创建网格搜索对象
grid_search = GridSearchCV(SVC(), param_grid, cv=5)

# 进行网格搜索
grid_search.fit(X_train, y_train)

# 输出最佳参数
print("最佳参数:", grid_search.best_params_)

5. 结果分析

  在完成模型训练和预测后,结果分析是机器学习项目中至关重要的一步。通过对模型预测结果的分析,我们可以评估模型的性能,识别潜在的问题,并为进一步的改进提供依据。在本部分中,我们将详细探讨如何分析模型的结果,包括混淆矩阵、分类报告的解读,以及可视化结果的方式。

5.1 混淆矩阵分析

  混淆矩阵是评估分类模型性能的重要工具,它展示了真实标签与预测标签之间的关系。混淆矩阵的结构如下:

预测为 0 (Setosa)预测为 1 (Versicolor)预测为 2 (Virginica)
实际为 0True Positive (TP)False Negative (FN)False Negative (FN)
实际为 1False Positive (FP)True Positive (TP)False Negative (FN)
实际为 2False Positive (FP)False Positive (FP)True Positive (TP)
  • True Positive (TP):模型正确预测为某一类别的样本数。
  • False Positive (FP):模型错误预测为某一类别的样本数。
  • False Negative (FN):模型未能预测为某一类别的样本数。

  通过混淆矩阵,我们可以直观地看到模型在每个类别上的表现。例如,如果模型在某一类别的 TP 数量很高,而 FP 和 FN 数量较低,说明模型在该类别上的表现良好。

5.2 分类报告分析

  分类报告提供了更详细的性能指标,包括精确率(Precision)、召回率(Recall)和 F1 分数(F1 Score)。这些指标的定义如下:

  • 精确率 (Precision):正确预测为正类的样本数占所有预测为正类的样本数的比例。公式为:

    Precision = T P T P + F P \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP

  • 召回率 (Recall):正确预测为正类的样本数占所有实际为正类的样本数的比例。公式为:

    Recall = T P T P + F N \text{Recall} = \frac{TP}{TP + FN} Recall=TP+FNTP

  • F1 分数 (F1 Score):精确率和召回率的调和平均数,综合考虑了这两个指标。公式为:

    F 1 = 2 × Precision × Recall Precision + Recall F1 = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1=2×Precision+RecallPrecision×Recall

  通过分类报告,我们可以评估模型在每个类别上的表现,识别哪些类别的预测效果较好,哪些类别的预测效果较差。

5.3 可视化结果

  为了更直观地理解模型的性能,我们可以使用可视化工具来展示结果。除了混淆矩阵的热图外,我们还可以绘制 ROC 曲线和 Precision-Recall 曲线。

5.3.1 ROC 曲线

  ROC(Receiver Operating Characteristic)曲线用于评估二分类模型的性能。它展示了真正率(TPR)与假正率(FPR)之间的关系。对于多分类问题,我们可以使用一对多的方式绘制 ROC 曲线。

from sklearn.metrics import roc_curve, auc

# 计算 ROC 曲线
fpr, tpr, _ = roc_curve(y_test, model.decision_function(X_test), pos_label=1)
roc_auc = auc(fpr, tpr)

# 绘制 ROC 曲线
plt.figure()
plt.plot(fpr, tpr, color='blue', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='red', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('假正率 (FPR)')
plt.ylabel('真正率 (TPR)')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")
plt.show()
5.3.2 Precision-Recall 曲线

  Precision-Recall 曲线展示了精确率与召回率之间的关系,适用于不平衡数据集的评估。

from sklearn.metrics import precision_recall_curve

# 计算 Precision-Recall 曲线
precision, recall, _ = precision_recall_curve(y_test, model.decision_function(X_test))

# 绘制 Precision-Recall 曲线
plt.figure()
plt.plot(recall, precision, color='blue', lw=2)
plt.xlabel('召回率 (Recall)')
plt.ylabel('精确率 (Precision)')
plt.title('Precision-Recall Curve')
plt.show()

5.4 结果总结

  通过对混淆矩阵和分类报告的分析,我们可以总结模型的优缺点。例如,如果模型在某一类别的精确率较低,可能需要考虑以下改进措施:

  • 数据增强:增加训练数据的多样性,尤其是对表现较差的类别。
  • 特征工程:尝试不同的特征选择或特征提取方法,以提高模型的表现。
  • 模型调优:使用交叉验证和超参数调优来优化模型的参数设置。

结论

  通过本篇博文,我们深入探讨了机器学习的基本流程,并通过鸢尾花数据集的实战案例,展示了从数据预处理到模型评估的完整步骤。我们学习了如何使用 Python 和 Scikit-learn 库进行数据加载、可视化、模型训练和性能评估,掌握了机器学习的核心概念和实践技巧。

  在实际应用中,机器学习不仅仅是算法的选择,更重要的是对数据的理解和处理。数据的质量和特征选择对模型的性能有着直接影响。因此,持续学习和实践是提升机器学习技能的关键。

  希望通过这个案例,读者能够对机器学习有更深入的理解,并能够在自己的项目中应用所学知识。未来,随着技术的不断发展,机器学习将继续在各个领域发挥重要作用。让我们保持好奇心,积极探索这一充满潜力的领域,为解决实际问题贡献自己的力量!


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

面试总结一

面试总结 1、自我介绍一下自己2.面试11、css常用布局有哪些2、css常用的属性3.js原型链4、开发中遇到的技术难点5、闭包6、ts了解什么呢7.git都用什么命令8、vue怎么打包9.vue启动一个项目需要什么10、vue怎么创建一个项目 2.面试21.vue2和vue3有什么区别2.复杂组件的封装&…

《Java与API的浪漫邂逅:一键获取商品详情》

亲爱的Java爱好者们,你是否曾在夜深人静时,对着电脑屏幕发呆,思考如何用你的代码去征服那些遥远的API数据?你是否梦想着,只需轻轻一点,就能让商品详情如魔法般出现在你的眼前?今天,我…

数据结构与算法:贪心算法与应用场景

目录 11.1 贪心算法的原理 11.2 经典贪心问题 11.3 贪心算法在图中的应用 11.4 贪心算法的优化与扩展 总结 数据结构与算法:贪心算法与应用场景 贪心算法是一种通过选择当前最佳解来构造整体最优解的算法策略。贪心算法在很多实际问题中都取得了良好的效果&am…

Struts2标签库全解密:打造高效、动态的Web界面

文章目录 Struts2的标签通用(Generic)标签<s:property> 数据类标签<s:iterator>&#xff08;至关重要&#xff01;&#xff01;&#xff01;&#xff01;&#xff09;<s:if> <s:elseif> <s:else><s:a>超链接标签用户界面(UI)标签表单标签 …

【C++打怪之路Lv12】-- 模板进阶

#1024程序员节&#xff5c;征文# &#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;重生之我在学Linux&#xff0c;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您…

Java集合剖析4】LinkedList

目录 一、LinkedList的特有方法 二、LinkedList的底层数据结构 三、插入方法的具体实现 一、LinkedList的特有方法 LinkedList的底层是双向链表&#xff0c;它提供了操作首尾结点的方法。 二、LinkedList的底层数据结构 LinkedList的底层数据结构是一个双向链表&#xff0c;体现…

LeetCode 0908.最小差值 I:思维(遍历)

【LetMeFly】908.最小差值 I&#xff1a;思维&#xff08;遍历&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/smallest-range-i/ 给你一个整数数组 nums&#xff0c;和一个整数 k 。 在一个操作中&#xff0c;您可以选择 0 < i < nums.length 的…

STM32:GPIO

目录 一、简介 二、结构 三、功能 1.GPIO 2.外部中断 四、示例 一、简介 输入输出&#xff08;IO&#xff09;是单片机最基本的外设功能之一。根据型号不同&#xff0c;STM32的IO端口数量不同&#xff0c;如64引脚的STM32F103RBT6有A、B、C、D四个IO端口&#xff0c;每个端…

追寻数组的轨迹,解开算法的情愫

公主请阅 1. 移除元素1.1 题目说明示例 1示例 2 1.2 题目分析1.3 代码部分1.4 代码分析 2. 删除有序数组中的重复项2.1 题目说明示例 1示例 3 2.2 题目分析2.3 代码部分2.4 代码分析 1. 移除元素 题目传送门 1.1 题目说明 题目描述&#xff1a; 给你一个数组 nums 和一个值 v…

代码随想录算法训练营第46期Day42

leetcode.518.零钱兑换 class Solution { public: //求装满背包有几种方法&#xff0c;公式都是&#xff1a;dp[j] dp[j - nums[i]]; // 如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。 // 如果求排列数就是外层for遍历背包&#xff0c;内层for循环遍历物…

数据结构修炼——常见的排序算法:插入/希尔/选择/堆排/冒泡/快排/归并/计数

目录 一、常见的排序算法二、常见排序算法的实现2.1 排序算法回顾2.1.1 冒泡排序2.1.2 堆排序 2.2 直接插入排序2.3 希尔排序2.4 选择排序2.5 快速排序2.5.1 快速排序&#xff08;霍尔法&#xff09;2.5.2 快速排序&#xff08;挖坑法&#xff09;2.5.3 快速排序&#xff08;前…

Java实现html填充导出pdf

Java实现html填充导出pdf 1.依赖添加和pom修改 <!-- Thymeleaf 模板引擎 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- OpenPDF 库 -…

Vue3基于Element-plus的Select组建进行二次封装-demo

效果 组件 <template><ElSelectclass"follow-records-pairs-select"v-model"selectVal":placeholder"placeholder"change"selectChange"><ElOptionv-for"item in options":key"item.value":labe…

点跟踪论文—RAFT: Recurrent All-Pairs Field Transforms for Optical Flow-递归的全对场光流变换

点目标跟踪论文—RAFT: Recurrent All-Pairs Field Transforms for Optical Flow-递归的全对场光流变换 读论文RAFT密集光流跟踪的笔记 RAFT是一种新的光流深度网络结构&#xff0c;由于需要基于点去做目标的跟踪&#xff0c;因此也是阅读了像素级别跟踪的一篇ECCV 2020的经典…

Golang 怎么高效处理ACM模式输入输出

文章目录 问题bufio.NewReader高效的原理 再次提交 问题 最近在练习牛客上单调栈题目时&#xff0c;要求自己处理出入输出&#xff0c;也就是读题库要求的输入&#xff0c;计算最终结果&#xff0c;并打印输出 当我用fmt.Scan处理输入&#xff0c;用fmt.Println处理输出时&am…

使用React和Redux构建可扩展的前端应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用React和Redux构建可扩展的前端应用 1 引言 2 React入门 2.1 安装React 2.2 创建组件 3 Redux基础 3.1 安装Redu…

Jsoup在Java中:解析京东网站数据

对于电商网站如京东来说&#xff0c;其页面上的数据包含了丰富的商业洞察。对于开发者而言&#xff0c;能够从这些网站中提取有价值的信息&#xff0c;进行分析和应用&#xff0c;无疑是一项重要的技能。本文将介绍如何使用Java中的Jsoup库来解析京东网站的数据。 Jsoup简介 …

特殊类设计与设计模式

&#x1f30e;特殊类设计与设计模式 文章目录&#xff1a; 特殊类设计与设计模式 特殊类设计       设计一个只能在堆上创建对象的类       设计一个只能在栈上创建对象的类       请设计一个不能被拷贝的类       请设计一个不能被继承的类 设计模式…

【汇编语言】第一个程序(一)—— 一个源程序从写出到执行的过程

文章目录 前言1. 第一步&#xff1a;编写汇编源程序2. 第二步&#xff1a;对源程序进行编译连接3. 第三步&#xff1a;执行可执行文件中的程序结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程…

【GIT】.cr、.gitattributes 、 .gitignore和.git各文件夹讲解介绍

在 Git 项目中&#xff0c;.cr、.gitattributes 和 .gitignore 文件分别用于不同的配置和管理功能。下面分别解释这些文件的作用和用途&#xff1a; 1. .gitignore 文件 作用&#xff1a; .gitignore 文件用于指定哪些文件或目录应该被 Git 忽略&#xff0c;不会被追踪或提交…