分类模型的算法性能评价

一、概述

  分类模型是机器学习中一种最常见的问题模型,在许多问题场景中有着广泛的运用,是模式识别问题中一种主要的实现手段。分类问题概况起来就是,对一堆高度抽象了的样本,由经验标定了每个样本所属的实际类别,由特定算法训练得到一个分类器,输入样本属性即自动计算出其所属类别,从而完成特定的识别任务。依实现原理的不同,分类算法有很多种,常见的如支持向量机、决策树、k近邻、朴素贝叶斯…,以及设计了的各种人工神经网络等。在特定问题中,算法性能的评价是一个重要的方面,它一般由学习器在测试数据中的性能表现来直接衡定,常见的评价指标有准确率、精准度(查准率)、召回率(查全率)、F1值、ROC-AUC值、Kappa系数等。

二、评价指标——二分类情形

  二分类模型是较常见和较一般化的情形,它预测的混淆矩阵可表示为
在这里插入图片描述
其中,
  TP(True Positive,真正例)为被正确划分为正例的样本数;
  FP(False Positive,假正例)为被错误划分为正例的样本数;
  TN(True Negative,真负例)为被正确划分为负例的样本数;
  FN(False Negative,假负例)为被错误划分为负例的样本数。

1.准确率(accuracy)

  准确率是被预测正确的样本数与样本总数 N N N的比值,比较直观地反映了学习器的性能。表达式为
A c c u r a c y = T P + T N N Accuracy=\frac{TP+TN}{N} Accuracy=NTP+TN

2. 精准度(precision)

   精准度是TP(真正例)占预测为正例样本数的百分比,它表征了预测的正例中有多少有效成分,也叫做查准率。表达式为
p r e c i s i o n = T P T P + F P precision=\frac{TP}{TP+FP} precision=TP+FPTP

3. 召回率(recall)

  召回率是TP(真正例)与真实正样本数的比值,它表征了所有的有效内容有多少被检测了出来,也叫做查全率、灵敏度(sensitive)。表达式为
r e c a l l = T P T P + F N recall=\frac{TP}{TP+FN} recall=TP+FNTP
在这里插入图片描述

4. F度量(F-Measure, F-Score)

  我们希望学习器的查准率和查全率都高,而查准率和查全率往往是一对矛盾的度量,查准率高时,查全率往往偏低;查全率高时,查准率往往偏低。此时可以用F度量来综合评估精准度(查准率)和召回率(查全率),数值越高学习器越理想。它的一般形式记作 F β F_\beta Fβ,表达式为
F β = ( 1 + β 2 ) ⋅ p r e c i s i o n ⋅ r e c a l l β 2 ⋅ p r e c i s i o n + r e c a l l F_\beta=\frac{(1+\beta^2)\cdot precision\cdot recall}{\beta^2\cdot precision + recall} Fβ=β2precision+recall(1+β2)precisionrecall
  式中的 β \beta β 值能够表达出对查准率/查全率的不同偏好,如F1分数认为召回率和精准度同等重要,F2分数认为召回率的重要程度是精准度的两倍,而F0.5分数认为召回率的重要程度是精准度的一半。其中,F1度量是最常用的一种,表达式为
F 1 = 2 ⋅ p r e c i s i o n ⋅ r e c a l l p r e c i s i o n + r e c a l l F_1=\frac{2\cdot precision\cdot recall}{precision+recall} F1=precision+recall2precisionrecall

注:
F1由调和平均进行定义: 1 F 1 = 1 2 ( 1 p r e c i s i o n + 1 r e c a l l ) \frac{1}{F_1}=\frac{1}{2}\left( \frac{1}{precision}+\frac{1}{recall} \right) F11=21(precision1+recall1) F β F_\beta Fβ由加权调和平均进行定义:
1 F β = 1 1 + β 2 ( 1 p r e c i s i o n + β 2 r e c a l l ) \frac{1}{F_\beta}=\frac{1}{1+\beta^2 }\left( \frac{1}{precision}+\frac{\beta^2}{recall} \right) Fβ1=1+β21(precision1+recallβ2)

5.ROC曲线与AUC值

  ROC(Receiver Operating Characteristic,受试者工作特征)曲线是以真正率(TPR)为纵轴、假正率(FPR)为横轴绘制的曲线,AUC(Area Under ROC Curve)是ROC曲线下的面积,它们能够在一定程度上衡量分类器的性能,示意图如图所示。
在这里插入图片描述
  TPR(true positive rate,真正率)、FPR(false positive rate,假正率)表达式为
T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP
F P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP
在这里插入图片描述
  ROC与AUC的度量,对二分类问题来说是更直观的,它直接地关注于正例样本,通过正例样本的整体表现来衡量学习器的性能。而这个正例类的指定,则由实际问题情形而确定。
  ROC曲线的绘制过程为,对测试样本集中的样本,将待考察的类别规定为正例类,学习器计算得到每个样本归属于正例类的概率,对所有样本依概率进行排序,起始时将划分阈值设为最大,即将所有样本划为负样本,此时TPR和FPR均为0,坐标轴上在(0,0)处标定了一个点。然后调整划分阈值,依次将每个样本划为正样本,TPR、FPR值随之增大,连接过程中标定的坐标点即得到ROC曲线。易知,若一个学习器的ROC曲线被另一个学习器的曲线完全包住,则后者的性能优于前者;若两个学习器的曲线发生交叉,则可比较ROC曲线下的面积,即AUC(Area Under ROC Curve),面积越大,性能越好。
  假定ROC曲线由坐标点{(x1,y1),(x2,y2),…,(xn,yn)}按序连接而成,则AUC值估算的表达式为
A U C = 1 2 ∑ i = 1 n − 1 ( x i + 1 − x i ) ⋅ ( y i + y i + 1 ) AUC=\frac{1}{2}\sum_{i=1}^{n-1}{\left( x_{i+1}-x_i \right)\cdot\left( y_i+y_{i+1} \right)} AUC=21i=1n1(xi+1xi)(yi+yi+1)

6.Kappa系数

  Kappa系数是统计分析中一种进行一致性检验的常见方法,能够较大程度上反映出分类算法的性能表现。它的计算同样基于混淆矩阵,反映的是预测结果与实际结果的一致性,其取值范围为[-1,1],值越大说明一致性越高,性能越好;反之性能越差。假设样本总数为N,Kappa系数定义为
k a p p a = p o − p e 1 − p e kappa=\frac{p_o-p_e}{1-p_e} kappa=1pepope
  其中, p o = 1 N ( T P + T N ) p_o=\frac{1}{N}\left( TP+TN \right) po=N1(TP+TN)是整体准确率,
      p e = 1 N 2 [ ( T P + F N ) ⋅ ( T P + F P ) + ( F P + T N ) ⋅ ( F N + T N ) ] p_e=\frac{1}{N^2}\left[ \left( TP+FN \right)\cdot \left( TP+FP \right)+\left( FP+TN \right)\cdot \left( FN+TN \right) \right] pe=N21[(TP+FN)(TP+FP)+(FP+TN)(FN+TN)]表偶然一致性。

三、评价指标——多分类情形

  多分类情形下的混淆矩阵表示为
在这里插入图片描述
  多分类问题往往能够转化为多个二分类问题,对它们性能的评价可通过宏计算或微计算的方式进行。

1.准确率(accuracy)

  准确率即混淆矩阵主对角线上的值之和与样本总数N的比值
A c c u r a c y = 1 N ∑ i = 1 K x i i Accuracy=\frac{1}{N}\sum_{i=1}^{K}{x_{ii}} Accuracy=N1i=1Kxii

2.精准度、召回率、F1值

  对于多分类任务,各个类别两两之间即对应了一个混淆矩阵,计算查准率、查全率、F1值的方式有两种,一种是对各混淆矩阵计算得到的指标值对应求平均,得到宏查准率(macro-P)、宏查全率(macro-R)和宏F1值(macro-F1);另一种是将各混淆矩阵对应位置处的值求平均,记为 T P ˉ \bar{TP} TPˉ F P ˉ \bar{FP} FPˉ T N ˉ \bar{TN} TNˉ F N ˉ \bar{FN} FNˉ,由这些平均的值计算得到微查准率(micro-P)、微查全率(micro-R)和微F1值(micro-F1)。假设共有K个类别,那么混淆矩阵数量为 C K 2 = K ⋅ ( K − 1 ) 2 C_{K}^{2}=\frac{K\cdot(K-1)}{2} CK2=2K(K1),记为n,则
  宏计算的指标值表示为
m a c r o − P = 1 n ∑ i = 1 n p r e c i s i o n i macro_{-}P=\frac{1}{n}\sum_{i=1}^{n}{precision_i} macroP=n1i=1nprecisioni
m a c r o − R = 1 n ∑ i = 1 n r e c a l l i macro_{-}R=\frac{1}{n}\sum_{i=1}^{n}{recall_i} macroR=n1i=1nrecalli
m a c r o x − F 1 = 2 ∗ m a c r o − P ∗ m a c r o − R m a c r o − P + m a c r o − R macrox_{-}F1=\frac{2\ast macro_{-}P\ast macro_{-}R}{macro_{-}P+macro_{-}R} macroxF1=macroP+macroR2macroPmacroR


  微计算的指标值表示为
m i c r o − P = T P ˉ T P ˉ + F P ˉ micro_{-}P=\frac{\bar{TP}}{\bar{TP}+\bar{FP}} microP=TPˉ+FPˉTPˉ
m i c r o − R = T P ˉ T P ˉ + F N ˉ micro_{-}R=\frac{\bar{TP}}{\bar{TP}+\bar{FN}} microR=TPˉ+FNˉTPˉ
m i c r o − F 1 = 2 ∗ m i c r o − P ∗ m i c r o − R m i c r o − P + m i c r o − R micro_{-}F1=\frac{2\ast micro_{-}P \ast micro_{-}R}{micro_{-}P+micro_{-}R} microF1=microP+microR2microPmicroR

3. ROC曲线与AUC值

  多分类情形下的ROC与AUC同样可以以“宏”或“微”的形式进行计算。
方式一:
  对于K(K>2)类分类问题,分别将每一个类别视作正例,其余各类别视作负例,在概率预测矩阵中,按当前类别列下的概率值进行排序,随之调整划分阈值,可得到一条ROC曲线,如此,共可得到K条ROC曲线,对各曲线的坐标点求平均,即绘制出一条“宏计算(macro)”的ROC曲线,并可计算出它对应的AUC值。简单地说就是,概率预测矩阵的每一列值排序后都形成一条ROC曲线,再得到平均后的曲线。

方式二:
  对于K(K>2)类分类问题,首先将样本标签one-hot化,得到一个K列的0和1标识的矩阵,将概率预测矩阵和该矩阵分别按行或按列将各自拼接为一维向量,按此概率向量进行排序,随之调整划分阈值,可得到一条“微计算(micro)”的ROC曲线,并可计算出它对应的AUC值。简单地说就是,概率预测矩阵的所有值排序后直接地形成一条ROC曲线。

4.Kappa系数

  Kappa的计算与二分类是一致的,假设样本类别数为K,总样本数为N,实际为i预测为j的样本数为 a i j a_{ij} aij,有
k a p p a = p o − p e 1 − p e kappa=\frac{p_o-p_e}{1-p_e} kappa=1pepope
  其中, p o = 1 N ∑ i = 1 K a i i p_o=\frac{1}{N}\sum_{i=1}^{K}{a_{ii}} po=N1i=1Kaii是整体准确率, p e = 1 N 2 ∑ i = 1 K a i + ⋅ a + i p_e=\frac{1}{N^2}\sum_{i=1}^{K}{a_{i+}\cdot a_{+i}} pe=N21i=1Kai+a+i 表偶然一致性。

例如,在某分类问题中,样本真实类别和预测类别分别是
   y_true=[‘A’,‘A’,‘C’,‘B’,‘B’,‘A’,‘C’,‘B’];
   y_pred=[‘C’,‘A’,‘C’,‘B’,‘B’,‘A’,‘B’,‘B’],
其对应的混淆矩阵为
在这里插入图片描述
  则 p o = 2 + 3 + 1 8 = 0.75 p_o=\frac{2+3+1}{8}=0.75 po=82+3+1=0.75 p e = 3 × 2 + 3 × 4 + 2 × 2 8 × 8 = 0.3438 p_e=\frac{3\times 2+3\times 4+2\times 2}{8\times 8}=0.3438 pe=8×83×2+3×4+2×2=0.3438
  所以 k a p p a = 0.75 − 0.3438 1 − 0.3438 = 0.619 kappa=\frac{0.75-0.3438}{1-0.3438}=0.619 kappa=10.34380.750.3438=0.619

四、Python实现

二分类情形

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from sklearn.metrics import cohen_kappa_score## 1.定义数据集# 训练数据
train_x = [[4.8,3,1.4,0.3],[5.1,3.8,1.6,0.2],[4.6,3.2,1.4,0.2],[5.3,3.7,1.5,0.2],[5,3.3,1.4,0.2],[7,3.2,4.7,1.4],[6.4,3.2,4.5,1.5],[6.9,3.1,4.9,1.5],[5.5,2.3,4,1.3],[6.5,2.8,4.6,1.5]
]# 训练数据标签
train_y = ['A','A','A','A','A','B','B','B','B','B'
]# 测试数据
test_x = [[3.1,3.5,1.4,0.2],[4.9,3,1.4,0.2],[5.1,2.5,3,1.1],[6.2,3.6,3.4,1.3]
]# 测试数据标签
test_y = ['A','A','B','B'
]train_x = np.array(train_x)
train_y = np.array(train_y)
test_x = np.array(test_x)
test_y = np.array(test_y)## 2.训练分类器
clf_dt = DecisionTreeClassifier(max_depth=None, min_samples_split=2)  # 定义决策树学习器
rclf_dt = clf_dt.fit(train_x,train_y)  # 训练## 3.数据计算
pre_y = rclf_dt.predict(test_x)
pre_y_proba = rclf_dt.predict_proba(test_x)[:,0] # 预测为类'A'的概率## 4.性能评价
# (1) 准确率
accuracy = metrics.accuracy_score(test_y,pre_y)# (2) 精确度(查准率)
precision = metrics.precision_score(test_y,pre_y,pos_label='A') # pos_label指定正例类# (3) 召回率(查全率)
recall = metrics.recall_score(test_y,pre_y,pos_label='A')# (4) F1度量
F1 = metrics.f1_score(test_y,pre_y,pos_label='A')# (5) ROC-AUC值
fpr,tpr,threshold = metrics.roc_curve(test_y,pre_y_proba,pos_label='A')
AUC = metrics.auc(fpr,tpr)# (6) Kappa系数
kappa = cohen_kappa_score(test_y, pre_y)## 5.结果输出
print('\naccuracy:', accuracy)
print('\nprecision:', precision)
print('recall:', recall)
print('F1:', F1)
print('\nAUC:', AUC)
print('\nkappa:', kappa)# ROC曲线绘图
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % AUC)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Binary Classify ROC')
plt.legend(loc="lower right")
plt.show()

在这里插入图片描述
在这里插入图片描述

多分类情形

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics
from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics import cohen_kappa_score## 1.定义数据集# 训练数据
train_x = [[4.8,3,1.4,0.3],[5.1,3.8,1.6,0.2],[4.6,3.2,1.4,0.2],[5.3,3.7,1.5,0.2],[5,3.3,1.4,0.2],[7,3.2,4.7,1.4],[6.4,3.2,4.5,1.5],[6.9,3.1,4.9,1.5],[5.5,2.3,4,1.3],[6.5,2.8,4.6,1.5],[6.3,3.3,6,2.5],[5.8,2.7,5.1,1.9],[7.1,3,5.9,2.1],[6.3,2.9,5.6,1.8],[6.5,3,5.8,2.2]
]# 训练数据标签
train_y = ['A','A','A','A','A','B','B','B','B','B','C','C','C','C','C'
]# 测试数据
test_x = [[5.1,3.5,1.4,0.2],[4.9,3,1.4,0.2],[5.1,2.5,3,1.1],[5.7,2.8,4.1,1.3],[6.2,3.4,5.4,2.3],[5.9,3,5.1,1.8]
]# 测试数据标签
test_y = ['A','A','C','B','C','C'
]train_x = np.array(train_x)
train_y = np.array(train_y)
test_x = np.array(test_x)
test_y = np.array(test_y)## 2.训练分类器
clf_dt = DecisionTreeClassifier(max_depth=None, min_samples_split=2)  # 定义决策树学习器
rclf_dt = clf_dt.fit(train_x,train_y)  # 训练## 3.数据计算
pre_y = rclf_dt.predict(test_x)
pre_y_proba = rclf_dt.predict_proba(test_x)## 4.性能评价
# (1) 准确率
accuracy = metrics.accuracy_score(test_y,pre_y)# (2) P-R度量
precision_macro = metrics.precision_score(test_y,pre_y,average='macro')  #宏精确度(查准率)
recall_macro = metrics.recall_score(test_y,pre_y,average='macro')  #宏召回率(查全率)
F1_macro = metrics.f1_score(test_y,pre_y,average='macro')  #宏F1度量precision_micro = metrics.precision_score(test_y,pre_y,average='micro')  #微精确度(查准率)
recall_micro = metrics.recall_score(test_y,pre_y,average='micro')  #微召回率(查全率)
F1_micro = metrics.f1_score(test_y,pre_y,average='micro')  #微F1度量# (3)ROC-AUC值
encoder = OneHotEncoder(sparse_output=False)  # 创建一个OneHotEncoder对象
onehot_test_y = encoder.fit_transform(test_y.reshape(-1, 1)) # 对整数数组进行one-hot编码
AUC_macro = metrics.roc_auc_score(onehot_test_y,pre_y_proba, average='macro', sample_weight=None)
AUC_micro = metrics.roc_auc_score(onehot_test_y,pre_y_proba, average='micro', sample_weight=None)# (4) Kappa系数
kappa = cohen_kappa_score(test_y, pre_y)## 5.结果输出
print('\naccuracy: ', accuracy)
print('\nprecision_macro: ',precision_macro)
print('recall_macro:',recall_macro)
print('F1_macro:',F1_macro)
print('\nprecision_micro:',precision_micro)
print('recall_micro:',recall_micro)
print('F1_micro:',F1_micro)
print('\nAUC_macro: ',AUC_macro)
print('AUC_micro:',AUC_micro)
print('\nKappa: ',kappa)

在这里插入图片描述


End.


参考:
  周志华. 机器学习. 清华大学出版社.


全文pdf下载

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

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

相关文章

Type-C/DP1.4到HDMI2.0替代龙讯LT8711HE,集睿智远CS5262

NCS8622是一款高性能低功耗的Type-C/DP1.4到HDMI2.0转换器,设计为连接USB Type-C源或DP1.4源到HDMI2.0。 NCS8622集成了符合DP1.4标准的接收器,以及符合HDMI2.0标准的发射器。此外,CC控制器用于将CC通信到实现DP Alt模式。DP接收器集成了HDCP…

什么是数据同步服务RSYNC?

大家好呀!这里是码农后端。今天来介绍一下数据同步服务RSYNC,作为Linux/Unix系统中远程或本地复制同步(复制)文件和目录最常用的命令,相比于scp命令,其具有增量备份、数据同步时保持文件的原有属性等优点。…

在Linux上安装和配置RocketMQ:保姆级教程

感谢您阅读本文,欢迎“一键三连”。作者定会不负众望,按时按量创作出更优质的内容。 ❤️ 1. 毕业设计专栏,毕业季咱们不慌,上千款毕业设计等你来选。 当安装RocketMQ时,确保遵循以下步骤: 步骤概述 安装 …

flask模块化、封装使用缓存cache(flask_caching)

1.安装flask_caching库 pip install flask_caching 2.创建utils Python 软件包以及cache_helper.py 2.1cache_helper.py代码 from flask_caching import Cachecache Cache()class CacheHelper:def __init__(self, app, config):cache.init_app(app, config)staticmethoddef…

基于swagger插件的方式推送接口文档至torna

目录 一、前言二、登录torna三、创建/选择空间四、创建/选择项目五、创建/选择应用六、获取应用的token七、服务推送7.1 引入maven依赖7.2 test下面按照如下方式新建文件 一、前言 Torna作为一款企业级文档管理系统,支持了很多种接口文档的推送方式。官方比较推荐的…

防火墙安全策略与用户认证综合实验

一、实验拓扑 二、实验需求 1.DMZ区内的服务器&#xff0c;办公区仅能在办公时间内<9:00-18:00>可以访问&#xff0c;生产区的设备全天可以访问 2.办公区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3.办公区设备10.0.2.10不充许访问DMZ区的FTP服务器和HT…

【java计算机毕设】个人理财管理系统MySQL springboot html maven小组设计项目源码代码

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】个人理财管理系统MySQL springboot html maven小组设计项目源码代码 2项目介绍 系统功能&#xff1a; 个人理财管理系统包括管理员、用户两种角色。 管理员功能&#xff1a; 用户信息管理&#xff08;…

ns3学习笔记(四):路由概述

基于官网文档的 Routing Overview 部分详细研究一下ns3中路由是怎么工作的 文档链接16.4. Routing overview — Model Library 一、概述 NS3整体的工作架构如下&#xff1a; 路由部分的工作架构如下&#xff1a; 路由部分目前大多数用到的算法都包含在Ipv4RoutingProtocol部分…

将格内多行文字展开成多格

表格的A列是分类&#xff0c;B列由多行文字组成&#xff0c;即分隔符是换行符。 AB1Account NumberInteraction21Jan 1,2023 - Hello.32Jan 2, 2023 - Good morning. Jan 3, 2023 - Good night. Jan 4, 20 Jan 5, 2023 - Good night. Jan 6, 2023 - Good afternoon.43Jan 1,20…

基于Java技术的网上图书商城系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术、SpringBoot框架 工具&#xff1a;Eclipse、Navicat、Maven 系统展示 首页 用户注册界面…

1996-2023年各省农村居民人均消费支出数据(无缺失)

1996-2023年各省农村居民人均消费支出数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1996-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;农村居民人均消费支出 4、范围&#xff1a;31省 5、缺失情况&#xff1a;无缺失 6、指标解释&…

视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是何原因?

安防监控EasyCVR视频汇聚平台可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时监控、云端录像、回看、告警、平台级联以及多视频流格式分发等视…

Java中的公平锁和非公平锁

1、什么是公平锁和非公平锁 公平锁和非公平锁是指在多线程环境下&#xff0c;如何对锁进行获取的顺序和策略的不同。 公平锁是指多个线程按照申请锁的顺序来获取锁&#xff0c;即先到先得的策略。当一个线程释放锁之后&#xff0c;等待时间最长的线程将获得锁。公平锁的优点是保…

Redis主从部署

文章目录 Redis主从部署1.下载安装Redis2.单点双副本主从配置1.修改配置信息2.修改配置文件redis.conf3.拷贝配置文件到每一个实例文件夹里4.修改每一个实例的端口和工作目录5.配置主从关系6.检查效果 3.哨兵模式监控主从1.创建实例目录2.复制配置文件并进行修改3.启动并测试 4…

微信定时推送LeetCode每日一题,再也不怕没人喊你刷题了

前段时间发过一篇关于微信机器人开发的文章&#xff0c;讲述了如何快速开发一个微信机器人&#xff0c;本篇文章就来实现一个最近开发的一个功能案例&#xff0c;在这个案例中会遇到了各种问题&#xff0c;可以帮助大家减少自己去踩坑的时间。通过此案例也可以帮助你去扩想一些…

Profibus_DP转ModbusTCP网关模块连马保与上位机通讯

Profibus转ModbusTCP网关模块&#xff08;XD-ETHPB20&#xff09;广泛应用于工业自动化领域。例如&#xff0c;可以将Profibus网络中的传感器数据转换为ModbusTCP协议&#xff0c;实现数据的实时监控和远程控制。本文介绍了如何利用Profibus转ModbusTCP网关&#xff08;XD-ETHP…

【AMBA】AHB总线中的HTRANS、HSIZE、HBURST以及1K边界问题

HTRANS、HSIZE和HBURST共同决定下一次数据传输的地址。 HTRANS[1:0]定义传输类型 HTRANS[1:0]主机传输状态描述00IDLE空闲表示没有进行数据传输&#xff0c;默认状态。主设备虽然可能已经占用了总线&#xff0c;但是还没有开始传输数据。从设备需要返回OKAY响应01BUSY忙主设备…

前端面试39(关于git)

针对前端开发者的Git面试题可以覆盖Git的基础概念、常用命令、工作流程、团队协作、以及解决冲突等方面。以下是一些具体的Git面试 Git基础知识 什么是Git&#xff1f; Git是一个分布式版本控制系统&#xff0c;用于跟踪计算机文件的更改&#xff0c;并协调多个人共同在一个项…

基于视觉的具身导航

基于视觉的具身导航 背景 什么是&#xff08;视觉的&#xff1f;&#xff09;具身导航 输入机器人观测的当前图像 o t o_t ot​和目标图像 o G o_G oG​&#xff0c;输出当前时间步的控制动作 u t u_t ut​&#xff0c;最终到达指定地点的算法流程。 通用的评价指标 性能指…

Git常见命令和用法

Git 文件状态 Git 文件 2 种状态: 未跟踪:新文件&#xff0c;从未被 Git 管理过已跟踪:Git 已经知道和管理的文件 常用命令 命令作用注意git -v查看 git 版本git init初始化 git 仓库初始化之后有工作区、暂存区(本地库)、版本库git add 文件标识暂存某个文件文件标识以终…