使用逻辑回归模型进行信用卡信用分类002

news2024/12/22 19:58:01

代码

代码获取方式:
 
链接:https://pan.baidu.com/s/1p4dHAyoG0nQzlRaT2VnKIA?pwd=n474 
提取码:n474
count_classes = pd.value_counts(data['Class'], sort = True).sort_index()

直方图统计数量:

切分数据集:

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, random_state = 0)

交叉验证选取c参数:

建模评估召回

# 逻辑回归模型
lr = LogisticRegression(C = best_c, penalty = 'l1',solver='liblinear')
# 训练集训练
lr.fit(X_train_undersample,y_train_undersample.values.ravel())
# 测试集预测
y_pred_undersample = lr.predict(X_test_undersample.values)

# Compute confusion matrix 测试集计算
cnf_matrix = confusion_matrix(y_test_undersample,y_pred_undersample)
np.set_printoptions(precision=2)
# #Recall = TP/(TP+FN)
print("Recall metric in the testing dataset: ", cnf_matrix[1,1]/(cnf_matrix[1,0]+cnf_matrix[1,1]))

调优方案:

下采样训练数据集训练模型,全量的测试集测试,计算全量测试集的混沌矩阵。

全量训练数据集训练模型,全量的测试集测试,计算全量测试集的混沌矩阵。

下采样训练数据集训练模型,下采样的测试集测试(带概率阈值),计算下采样测试集的混沌矩阵。

概念

逻辑回归是一种用于解决分类问题的机器学习算法。尽管名字中包含“回归”,但逻辑回归实际上是一种分类算法,用于预测输入变量属于某个特定类别的概率。

逻辑回归的原理基于线性回归,但它使用了一个称为逻辑函数(也称为 Sigmoid 函数)来将线性输出转换为概率值。

训练逻辑回归模型通常通过最大化似然函数或最小化对数损失函数来完成。一旦模型训练完成,它就可以用来进行预测,预测输入样本属于哪个类别的概率。

逻辑回归在实践中广泛应用于二分类问题,例如垃圾邮件检测、信用风险评估等。

逻辑回归是一种广泛应用的统计方法,主要用于分类问题,特别是二分类问题。

逻辑回归建模的一般流程

1. 问题定义

首先明确要解决的问题是一个分类问题,并确定是二分类还是多分类问题。对于逻辑回归,通常用于二分类,即输出只有两个类别。

2. 数据收集

收集相关的数据集,包括特征变量(自变量X)和目标变量(因变量Y)。确保数据的质量和完整性。

3. 数据预处理

  • 数据清洗:处理缺失值、异常值和重复值。
  • 特征工程:包括特征选择和特征转换,选择与目标变量相关的特征,进行必要的特征转换,如归一化、标准化、编码等。

在逻辑回归中处理类别型特征

1. 编码(Encoding)独热编码(One-Hot Encoding):为每个类别创建一个二进制列(0或1),其中只有一个列对于每个样本是1,其余都是0。这种方法适用于类别数量不是很多时;标签编码(Label Encoding):将每个类别映射到一个唯一的整数。这种方法可能不适用于逻辑回归,因为它会赋予类别一个数值上的顺序,这可能对模型产生误导。

2. 二进制编码(Binary Encoding)对于具有大量类别的特征,可以使用二进制编码。首先对类别进行标签编码,然后将每个整数值转换为二进制形式,并分别作为新的特征列。

3. 哈希编码(Hash Encoding)使用哈希函数将类别名称映射到固定数量的桶(通常小于类别数)。这种方法在类别非常多时很有用,但可能会导致哈希冲突。

4. 伪计数(Pseudo Counts)为每个类别分配一个计数,然后使用这些计数作为特征值。这种方法适用于有序类别特征。

5. 向量化(Embedding)可以将类别特征通过嵌入层(embedding layer)转换为稠密的数值向量。在处理大量类别时特别有效。

6. 归一化效应编码(Effect Encoding)/偏差编码(Deviation Encoding)

这种方法类似于独热编码,但在每个独热编码的基础上添加了一个额外的列来表示平均效应或偏差。

7. 后续处理

在逻辑回归模型中,编码后的类别特征可以直接作为输入。但是,如果类别特征之间存在某种顺序关系,可以考虑将它们转换为有序的数值特征,例如使用有序编码。

在处理类别型特征时,重要的是要考虑特征的基数(不同类别的数量)和稀疏性。高基数特征可能导致过度拟合或计算效率低下,而稀疏特征可能需要特殊处理以避免模型过于复杂。在实际应用中,可能需要尝试不同的编码方法,并通过交叉验证来选择最佳方法。

归一化(Normalization)和标准化(Standardization)

两种常见的特征缩放方法,用于预处理数据,特别是在机器学习中。它们的目的都是将特征数据的规模调整到一定的范围内,以便于模型的训练和改善模型的性能。但是,它们的方法和适用场景有所不同。

归一化通常是指将数据缩放到一个固定的范围(通常是0到1之间)。归一化公式如下:最小值和最大值。

归一化的优点是能够将不同范围的特征统一到相同的尺度,适用于分布范围差异较大的数据。但是,它对异常值比较敏感,异常值会影响最小值和最大值的计算,从而影响归一化结果。

标准化通常是指将数据转换为具有零均值和单位标准差的分布。

标准化的优点是能够使得数据分布更加稳定,特别是对于近似正态分布的数据。它对异常值的影响较小,因为标准化方法是基于整体的统计量(均值和标准差),而不是依赖于最大值和最小值。

- **归一化**:

- 当数据分布不明确,或者最小值和最大值未知时(如神经网络中的激活函数)。

- 当特征之间的量级差异很大,且最小值和最大值对于后续模型很重要时。

- **标准化**:

- 当数据近似正态分布,或者对数据的分布没有明确要求时。

- 当使用基于距离的算法(如K-近邻、K-均值聚类、支持向量机等)时。

在实际应用中,选择哪种方法取决于数据的特性和使用的模型。有时,为了达到最佳效果,可能需要尝试不同的缩放方法,并通过交叉验证来选择最佳方法。

  • 数据分割:将数据集分为训练集和测试集,通常采用70%-30%,60%-40%或其它比例。

4. 模型建立

  • 选择模型类型:确定使用二项逻辑回归还是多项逻辑回归。

二项逻辑回归适用于二分类问题,即目标变量只有两个类别。

在实际应用中,多项逻辑回归可以通过多个二项逻辑回归模型来实现,这种方法称为“一对多”(One-vs-All 或 One-vs-Rest)策略,其中每个类别都有一个模型来与所有其他类别区分开来。但是,这种方法可能会导致类别不平衡问题,因为每个模型都是单独训练的。相比之下,多项逻辑回归考虑了所有类别之间的相互关系,通常能够提供更好的性能。

  • 模型训练:使用训练集数据来训练模型,通过最大似然估计方法来求解模型参数。
  • 模型评估:使用诸如准确率、召回率、F1分数、AUC值等指标来评估模型性能。

注:逻辑函数(Logistic Function)和Sigmoid函数实际上是同一个函数,只是名称不同。在数学、统计学和机器学习领域,这个函数通常被称为逻辑斯谛函数(Logistic Function)或Sigmoid函数。

5. 参数调优

  • 确定优化目标:通常是选择交叉熵作为损失函数。
  • 选择优化算法:如梯度下降法、牛顿法等。
  • 调参:通过调整学习率、正则化参数等来优化模型。

6. 模型诊断

检查模型是否存在过拟合或欠拟合问题,可能需要回到特征工程步骤进行调整,或者通过增加训练样本、减少特征数量等方式来解决。

7. 模型部署

将训练好的模型部署到生产环境中,进行实时预测或批量预测。

8. 模型监控与维护

持续监控模型的性能,确保其预测结果的准确性和稳定性。定期使用新收集的数据对模型进行重新训练和评估。

逻辑回归建模是一个迭代的过程,可能需要多次回到前面的步骤进行优化。在整个过程中,确保遵循数据安全和隐私保护的相关规定。

案例与参数

C 参数是一个惩罚参数

用于正则化项的系数。在 scikit-learn 库中,当你使用逻辑回归(Logistic Regression)时,C 参数控制了正则化强度的倒数。C 参数与正则化项的系数α之间的关系是C = 1/α。

逻辑回归中常用的正则化形式是 L1 正则化和 L2 正则化,分别对应于 Lasso 和 Ridge 正则化。在 scikit-learn 中 penalty 参数来选择使用哪一种正则化,'l1' 表示 L1 正则化,而 'l2' 表示 L2 正则化。

  • 当 C 的值很小时,模型会受到较强的正则化,这意味着模型会尽量让权重值较小,可能会导致模型过于简单,出现欠拟合。
  • 当 C 的值很大时,正则化的影响会很小,模型会尽量拟合训练数据,这可能会导致过拟合。
  • 当 C 等于 1 时(默认值),表示没有正则化。 选择合适的 C 值通常需要通过交叉验证(如 GridSearchCV)来调整,以便在训练数据上获得最佳的泛化性能。 在 scikit-learn 中使用逻辑回归时,你可以这样设置 C 参数:

from sklearn.linear_model import LogisticRegression

log_reg = LogisticRegression(C=0.1, penalty='l2')

# 使用 L2 正则化,C=0.1 log_reg.fit(X_train, y_train)

这里的 C=0.1 表示使用了较强的正则化。你需要根据你的具体问题和数据集来调整这个值。

权重大小与模型的复杂度有一定关系,并不是绝对的。

模型的复杂度通常与模型能够捕捉的数据特征的数量和类型有关,而权重的大小只是其中的一个方面。

1. **权重的大小**:在实施了正则化的模型中,权重的大小可以被看作是模型复杂度的一个指标。正则化(如L1或L2正则化)会惩罚模型权重的大小,目的是为了防止过拟合。当权重很小时,可能意味着模型更加简单,因为它倾向于减少特征对模型的影响,可能会导致模型欠拟合。

2. **模型的复杂度**:模型的复杂度还与其他因素有关,比如模型的结构、特征的数量和交互作用、以及模型参数的数量。例如,一个深度神经网络即使权重很小,也可能是一个非常复杂的模型,因为它可以捕捉到输入特征之间的高阶交互作用。

3. **权重与复杂度的关系**:在一些情况下,权重的大小确实可以反映模型的复杂度。例如,在逻辑回归中,如果使用了L1正则化(Lasso回归),权重的小值可能意味着模型选择了较少的特征,从而简化了模型。相反,如果没有正则化或正则化强度很弱,即使权重很大,模型也可能很简单,因为它可能只依赖于少数几个强相关的特征。

4. **权重与性能的关系**:权重的大小也会影响模型的性能。一个过于简单的模型可能无法捕捉数据的真实结构,而一个过于复杂的模型可能会导致过拟合。因此,找到合适的权重大小和模型复杂度是机器学习中的一个重要任务。

总之,权重的大小可以作为衡量模型复杂度的一个指标,但它并不是唯一的指标。在实际应用中,需要综合考虑模型的结构、特征的选择、正则化的使用以及模型的性能等因素。

KFold 分割一种交叉验证的方法

它将数据集分成 K 个大小相等的互斥的折叠(folds)。在 KFold 交叉验证中,每次迭代都会使用一个折叠作为验证集,而剩下的 K-1 个折叠作为训练集。这个过程会重复 K 次,每次选择不同的折叠作为验证集,以便模型可以在不同的数据子集上进行训练和验证。

KFold 分割的目的是为了评估模型的泛化能力,即模型在未见过的数据上的表现。通过将数据集分成多个折叠,我们可以确保模型在不同的数据子集上进行了训练和测试,从而得到一个更稳健的性能评估。

from sklearn.model_selection import KFold

# 假设 X 是特征数据集,y 是目标变量

X = ... # 特征数据集

y = ... # 目标变量

# 创建 KFold 分割实例,这里 K=5 kf = KFold(n_splits=5)

# 进行 KFold 分割

for train_index, test_index in kf.split(X):

X_train, X_test = X[train_index],

X[test_index] y_train,

y_test = y[train_index],

y[test_index] # 在这里训练和评估模型

在这个例子中,KFold 类的 split 方法会生成训练集和验证集的索引,然后我们可以使用这些索引来分割数据集 X 和 y。这种方法有助于我们更准确地评估模型的性能,并调整模型参数以获得更好的泛化能力。

random_state

控制在算法中任何随机性操作的可重复性。在很多情况下我们希望结果是可以复现的,尤其是在调试或者进行科学实验时。设置 `random_state` 参数可以确保每次代码运行时得到相同的结果。

以下是一些常见的使用 `random_state` 的场景:

1. **数据分割**:当我们使用 `train_test_split` 函数将数据集分割为训练集和测试集时,可以设置 `random_state` 确保每次分割得到相同的结果。

```python

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=42)

```

2. **模型初始化**:某些机器学习模型在初始化时会有随机性,例如随机森林(`RandomForestClassifier`)和梯度提升树(`GradientBoostingClassifier`)。设置 `random_state` 可以确保模型初始化的一致性。

```python

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(n_estimators=100, random_state=42)

```

3. **数据混洗**:在使用诸如 `shuffle` 的函数对数据进行混洗时,设置 `random_state` 可以确保混洗结果的可重复性。

```python

import numpy as np

np.random.seed(42)

np.random.shuffle(data)

```

4. **参数搜索**:在使用网格搜索(`GridSearchCV`)或随机搜索(`RandomizedSearchCV`)来寻找模型的最佳参数时,`random_state` 可以确保搜索过程的可重复性。

```python

from sklearn.model_selection import GridSearchCV

param_grid = {'C': [0.1, 1, 10]}

grid_search = GridSearchCV估计器, param_grid, cv=5, random_state=42)

```

`random_state` 是一个确保代码可重复性的重要参数。在实际应用中,选择一个固定的整数作为 `random_state` 的值是一个好习惯,尤其是当你需要与他人分享代码或者记录实验结果时。通常,`42` 被用作一个流行的 `random_state` 值,这源自于科幻小说《银河系漫游指南》中“生命、宇宙以及任何事情的终极答案”的典故。

技巧

pd.value_counts 统计直方图,查看不同分类的数量;

StandardScaler().fit_transform:数据均值、标准差进行标准化,有助于提升模型的性能和收敛速度。

data.iloc 获取训练数据和标签列;

np.random.choice:随机获取多的样本与少的样本一致,相当于下采样。

train_test_split:按照比例划分训练集和测试集

KFold :交叉验证的方法,将数据集分成 K 个大小相等的折叠(folds)。在 KFold 交叉验证中,每次迭代会使用一个折叠作为验证集,剩下的 K-1 个折叠作为训练集。有助于评估模型的泛化能力,并且可以更有效地利用数据。

pd.DataFrame:创建表格存储不同的参数列

fold.split(y_train_data):将交叉验证的训练数据集打折分开成两部分。注意操作的是训练集,交叉得到最佳c参数

LogisticRegression(C = c_param, penalty = 'l1',solver='liblinear') 创建模型。

lr.fit 模型训练。

lr.predict 模型预测。

recall_score 计算回归得分;输入真正标签和预测标签;召回率或真正率。tp / (tp + fn)

confusion_matrix:计算混沌矩阵,利用以上交叉得到的c参数,训练得到模型,并预测测试集,然后预测与真值输入计算混沌矩阵。

怎么通过混沌矩阵评价机器学习模型好坏

混沌矩阵(Confusion Matrix),也称为混淆矩阵,是一种特别适用于监督学习的评估分类模型性能的工具,尤其是在分类问题中用来可视化算法性能的表格布局。它展示了实际类别与模型预测类别的关系,通过这个矩阵可以计算出许多性能指标,如精确度(Precision)、召回率(Recall)、F1分数(F1 Score)等。

混沌矩阵的基本结构如下:

  • 真正(True Positive, TP):模型正确预测到的正类别。
  • 假正(False Positive, FP):模型错误预测为正类别的负类别,也称为“假警报”。
  • 假负(False Negative, FN):模型错误预测为负类别的正类别,也称为“漏报”。
  • 真负(True Negative, TN):模型正确预测到的负类别。
  1. 精确度(Precision)是针对预测结果而言的,它表示在所有被预测为正类的样本中,真正为正类的比例。

Precision = TP / {TP + FP}

  1. 召回率(Recall)是针对原始数据而言的,它表示在所有真正的正类样本中,被正确预测为正类的比例。

Recall = TP / {TP + FN}

  1. F1分数(F1 Score)是精确度和召回率的调和平均值,用于综合反映模型的精确性和鲁棒性。

F1 Score = 2 * {Precision * Recall} / {Precision + Recall}

  1. 准确率(Accuracy)是所有预测正确的样本(真正和真负)占所有样本的比例。

Accuracy = {TP + TN} / {TP + TN + FP + FN}

使用混沌矩阵评价机器学习模型的好坏时,应根据具体的应用场景和业务需求来确定哪些指标更为重要。例如,在医疗诊断领域,通常更关注召回率,以减少漏诊的风险;而在垃圾邮件过滤中,精确度可能更为重要,以避免误将正常邮件归类为垃圾邮件。

还可以通过绘制ROC曲线(Receiver Operating Characteristic Curve)和计算AUC(Area Under the ROC Curve)值来评估分类模型的性能,特别是在类别不平衡的情况下。总之,混沌矩阵是评价机器学习模型性能的重要工具,通过它可以获得多个维度的性能指标,帮助判断模型在实际应用中的适用性和有效性。

ROC(Receiver Operating Characteristic)曲线

用于评估二分类模型的性能。ROC曲线基于不同的阈值,展示了模型在假正例率(False Positive Rate, FPR)和真正例率(True Positive Rate, TPR)之间的权衡。

基本概念:

  • 真正例率(TPR),也称为灵敏度或召回率,表示所有正例中被正确识别的比例。
  • 假正例率(FPR),表示所有负例中被错误识别的比例。

ROC曲线的解读:

  1. 曲线位置:ROC曲线位于坐标系的单位正方形内,其中横轴是FPR,纵轴是TPR。理想的ROC曲线会尽可能地靠近左上角,这意味着模型有很高的TPR和很低的FPR。
  2. 曲线形状:曲线越靠近左上角,模型的性能越好。一个完美的分类器会有一个ROC曲线,它在FPR为0时TPR为1,即模型能够正确识别所有正例而不产生任何假正例。
  3. 曲线下的面积(AUC):ROC曲线下的面积(AUC)是一个量化模型性能的指标,取值范围从0到1。AUC越接近1,模型性能越好;AUC为0.5表示模型的性能和随机猜测一样。
  4. 阈值变化:ROC曲线考虑了所有可能的分类阈值,通过调整阈值,可以在不同的TPR和FPR之间做出权衡。曲线上的每个点对应于一个特定的阈值。
  5. 比较模型:如果有多个模型的ROC曲线,可以通过比较它们的AUC值或者观察ROC曲线之间的相对位置来评估哪个模型更好。

实际应用:

  • 在医疗诊断中,高TPR(减少漏诊)通常比低FPR(减少误诊)更重要,因此ROC曲线会侧重于TPR。
  • 在信用卡欺诈检测中,由于假正例(误诊为欺诈)的成本可能很高,因此可能更关注低FPR。

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

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

相关文章

设计模式在芯片验证中的应用——模板方法

一、模板方法 模板方法(Template Method)设计模式是一种行为设计模式, 它在父类中定义了一个功能的框架, 允许子类在不修改结构的情况下重写功能的特定步骤。也就是模板方法定义了一组有序执行的操作,将一些步骤的实现留给子类,同…

world machine学习笔记(4)

选择设备: select acpect: heading:太阳的方向 elevation:太阳的高度 select colour:选择颜色 select convexity:选择突起(曲率) select height:选择高度 falloff&a…

Celery的Web监控工具Flower

1 简介Flower Flower官网 Flower是一个WEB端的监控工具,可以监控Celery的消费者。但是WEB端的监控对于监控系统来说,有个屁用,有用的是监控告警。还好Flower不是全部是垃圾,它提供的Prometheus的监控端点。然而。。。。。如何保证…

【C语言】二叉树的实现

文章目录 前言⭐一、二叉树的定义🚲二、创建二叉树🎡三、二叉树的销毁🎉四、遍历二叉树1. 前序遍历2. 中序遍历3. 后序遍历4. 层序遍历 🌲五、二叉树的计算1. 计算二叉树结点个数2. 计算二叉树叶子结点的个数3. 计算二叉树的深度4…

Spring Boot Interceptor(拦截器使用及原理)

之前的博客中讲解了关于 Spring AOP的思想和原理,而实际开发中Spring Boot对于AOP的思想的具体实现就是Spring Boot Interceptor。在 Spring Boot 应用程序开发中,拦截器(Interceptor)是一个非常有用的工具。它允许我们在 HTTP 请…

kali基本扫描工具(自带)

免责声明:本文仅做技术交流与学习...请勿非法破坏... 详细用法: 命令 -h/百度/翻译 fping 用法 hostlist 文件里面为ip fping -a -q -f hostlist -a 只看存活的 fping -g 202.100.1.1 202.100.1.255 -a -q > Ahost 输出到Ahost文件上 nping nping -c 1 201.100.2.155-244 …

动态规划之背包问题中如何确定遍历顺序的问题-组合or排列?

关于如何确定遍历顺序 322. 零钱兑换中,本题求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。 所以本题并不强调集合是组合还是排列。 如果求组合数就是外层for循环遍历物品,内层for遍历背包。 如果求…

【数据结构】二叉树的认识与实现

目录 二叉树的概念: 二叉树的应用与实现: 二叉树实现接口: 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 二叉树节点个数​编辑 二叉树叶子节点个数 二叉树第k层节点个数 二叉树查找值为x的节点​编辑 二叉树前序遍…

Day 3:1738. 找出第 K 大的异或坐标值

Leetcode 1738. 找出第 K 大的异或坐标值 给你一个二维矩阵 matrix 和一个整数 k &#xff0c;矩阵大小为 m x n 由非负整数组成。 矩阵中坐标 (a, b) 的 值 可由对所有满足 0 < i < a < m 且 0 < j < b < n 的元素 matrix[i][j]&#xff08;下标从 0 开始计…

【Linux】进程通信实战 —— 进程池项目

送给大家一句话: 没有一颗星&#xff0c;会因为追求梦想而受伤&#xff0c;当你真心渴望某样东西时&#xff0c;整个宇宙都会来帮忙。 – 保罗・戈埃罗 《牧羊少年奇幻之旅》 &#x1f3d5;️&#x1f3d5;️&#x1f3d5;️&#x1f3d5;️&#x1f3d5;️&#x1f3d5;️ &a…

# linux 系统 没有 ifconfig 命令,提示: ifconfig: command not found

sudo ip route add default via 192.168.1.1 dev eth0# linux 系统 没有 ifconfig 命令&#xff0c;提示&#xff1a; ifconfig: command not found 一、问题描述&#xff1a; 有些伙伴在学习 linux 系统时&#xff0c;在 使用 ifconfig 命令 查询 系统 IP 出现 ifconfig: co…

【LakeHouse】Apache Iceberg + Amoro 助力网易构建云原生湖仓

Apache Iceberg Amoro 助力网易构建云原生湖仓 1.云原生湖仓背景与挑战2.Apache Iceberg 、Amoro 与云原生2.1 Apache Iceberg2.2 Amoro 简介 3.Apache Iceberg Amoro 云原生实践3.1 云上湖仓案例一3.2 云上湖仓案例二3.3 云上湖仓案例三 4.Amoro 未来发展规划 出品社区&…

上百个神奇有趣的小工具,总有一款适合你

这几天了不起在逛 GitHub 时&#xff0c;发现了一个有趣的项目——MikuTools。这是一个工具集合的 web 项目&#xff0c;提供了上百个有趣实用神奇的工具。 项目简介 MikuTools 项目主页的介绍很简单&#xff1a;一个轻量的工具集合。确实&#xff0c;项目界面非常简洁&#…

免费图片文字转换成文本,ocr文字识别软件免费版,真的太实用了!

截屏短视频上一段扎心文字&#xff0c;想把它发到朋友圈怎么办&#xff1f;这时候就需要一个OCR识别软件。 它就像一个聪明的小助手&#xff0c;它可以帮助电脑“看懂”书本上或者图片里的字。就像我们用眼睛看字一样&#xff0c;OCR软件用它的“眼睛”扫描图片&#xff0c;识…

企业活动想找媒体报道宣传怎样联系媒体?

在那遥远的公关江湖里,有一个传说,说的是一位勇士,手持鼠标和键盘,踏上了寻找媒体圣杯的征途。这位勇士,就是我们亲爱的市场部门小李,他的任务是为公司即将举行的一场盛大的企业活动找到媒体的聚光灯。 小李的故事,开始于一张空白的Excel表格,上面列着各大媒体的名称,旁边是一片…

面试题·栈和队列的相互实现·详解

A. 用队列实现栈 用队列实现栈 实现代码如下 看着是队列&#xff0c;其实实际实现更接近数组模拟 typedef struct {int* queue1; // 第一个队列int* queue2; // 第二个队列int size; // 栈的大小int front1, rear1, front2, rear2; // 两个队列的首尾指针 } MyS…

gfast:基于全新Go Frame 2.3+Vue3+Element Plus构建的全栈前后端分离管理系统

gfast&#xff1a;基于全新Go Frame 2.3Vue3Element Plus构建的全栈前后端分离管理系统 随着信息技术的飞速发展和数字化转型的深入&#xff0c;后台管理系统在企业信息化建设中扮演着越来越重要的角色。为了满足市场对于高效、灵活、安全后台管理系统的需求&#xff0c;gfast应…

ICQ 将于 6 月关闭,这是一种奇怪的方式,发现它在 2024 年仍然活跃

你知道ICQ还活着吗&#xff1f;不过&#xff0c;不要太兴奋;它将永远消失。 还记得ICQ吗&#xff1f;如果你这样做了&#xff0c;你可能会记得它是AOL在1998年购买的Messenger客户端&#xff0c;就在Yahoo Instant Messager和MSN Messenger加入竞争的时候。然后Skype出现了&…

网络模型-BFD与网络协议联动

一、BFD:双向转发检测 双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 1、BFD优点: 对相邻转发引擎之间的通道提供轻负荷、快速故障检测。这些故障包括接口数据链路&#…

g-h Filter 详细讲解

g-h 过滤器 g-h 滤波器百科介绍。 之前的翻译大家&#xff0c;我看都没什么阅读量&#xff0c;可能大家都不是很想看&#xff08;估计也是我英文太水&#xff09;。那么这篇博客我就先暂停直接翻译原文&#xff0c;而是直接说一下自己的理解。 本文章背后的书的详细介绍可以…