【大数据】机器学习-----模型的评估方法
一、评估方法
- 留出法(Holdout Method):
- 将数据集划分为训练集和测试集两部分,通常按照一定比例(如 70% 训练集,30% 测试集)。训练集用于训练模型,测试集用于评估模型性能。
- 优点:简单易行。
- 缺点:结果依赖于数据集的划分方式,不同的划分可能导致不同的评估结果。
- 交叉验证法(Cross Validation):
- 最常见的是 k 折交叉验证。将数据集分成 k 个大小相似的互斥子集,每次用 k-1 个子集作为训练集,余下的一个作为测试集,进行 k 次训练和测试,最终将 k 次的结果取平均值。
- 优点:能更充分利用数据,结果相对稳定,能降低因数据划分导致的偏差。
- 缺点:计算开销较大,尤其是对于大数据集和复杂模型。
- 例如,5 折交叉验证就是将数据集分成 5 份,每次取 4 份训练,1 份测试,重复 5 次。
- 自助法(Bootstrap Method):
- 从原始数据集中有放回地抽样产生多个新的训练集,每次抽样得到的样本作为一个训练集,未被抽到的样本作为测试集。
- 优点:在数据集较小、难以有效划分训练集和测试集时很有用。
- 缺点:改变了初始数据集的分布,会引入一定的偏差。
二、性能度量
- 分类问题的性能度量:
- 准确率(Accuracy):预测正确的样本数占总样本数的比例,公式为
Accuracy = (TP + TN) / (TP + TN + FP + FN),其中TP是真正例,TN是真反例,FP是假正例,FN是假反例。 - 精确率(Precision):预测为正例的样本中真正例的比例,公式为
Precision = TP / (TP + FP)。 - 召回率(Recall):真正例中被预测为正例的比例,公式为
Recall = TP / (TP + FN)。 - F1 分数:精确率和召回率的调和平均值,公式为
F1 = 2 * (Precision * Recall) / (Precision + Recall)。 - ROC 曲线和 AUC 值:
- ROC 曲线以假正例率(FPR)为横坐标,真正例率(TPR)为纵坐标绘制,通过调整分类阈值得到不同的点连成曲线。
- AUC 值是 ROC 曲线下的面积,范围在 0 到 1 之间,值越大表示模型性能越好。
- 准确率(Accuracy):预测正确的样本数占总样本数的比例,公式为
- 回归问题的性能度量:
- 均方误差(MSE):预测值与真实值差的平方的平均值,公式为
MSE = (1/n) * Σ(y - y_pred)^2,其中y是真实值,y_pred是预测值。 - 平均绝对误差(MAE):预测值与真实值差的绝对值的平均值,公式为
MAE = (1/n) * Σ|y - y_pred|。 - 均方根误差(RMSE):MSE 的平方根,对较大误差更敏感,公式为
RMSE = sqrt(MSE)。
- 均方误差(MSE):预测值与真实值差的平方的平均值,公式为
三、比较检验
- 假设检验:
- 用于比较不同模型性能差异是否显著。
- 例如,使用 t 检验或 McNemar 检验。
- t 检验通常用于比较两个模型在同一数据集上的性能是否有显著差异,基于样本均值和标准差。
- McNemar 检验用于比较两种分类算法在同一测试集上的差异,主要关注两种算法的分类结果不一致的部分。
- 交叉验证 t 检验:
- 结合了交叉验证和 t 检验,用于比较多个模型的性能。
- 对于两个模型,分别进行多次交叉验证,得到多个性能度量,然后对这些度量进行 t 检验,以判断它们是否有显著差异。
四、偏差与方差
- 偏差(Bias):
- 反映了模型预测值与真实值的期望之间的差异,描述了模型的准确性。
- 高偏差意味着模型过于简单,可能导致欠拟合,不能很好地拟合训练数据,也不能很好地泛化到新数据。
- 方差(Variance):
- 反映了模型在不同训练集上的预测值的变化程度,描述了模型的稳定性。
- 高方差意味着模型对训练数据的微小变化非常敏感,可能导致过拟合,在训练集上表现好,但在新数据上表现差。
- 偏差-方差权衡:
- 模型的泛化误差可以分解为偏差、方差和噪声。通常,简单模型偏差大、方差小,复杂模型偏差小、方差大,需要找到一个平衡,使泛化误差最小。

公式
一、分类问题的性能度量公式
-
准确率(Accuracy):
- 公式: Accuracy = T P + T N T P + T N + F P + F N \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} Accuracy=TP+TN+FP+FNTP+TN
- 解释:
- T P TP TP(True Positive):真正例,即实际为正类且被预测为正类的样本数量。
- T N TN TN(True Negative):真反例,即实际为反类且被预测为反类的样本数量。
- F P FP FP(False Positive):假正例,即实际为反类但被预测为正类的样本数量。
- F N FN FN(False Negative):假反例,即实际为正类但被预测为反类的样本数量。
- 该公式计算的是预测正确的样本数(包括正确预测为正类和正确预测为反类)在总样本数中的占比,反映了模型预测的整体准确性。
-
精确率(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):
- 公式: F1 = 2 × Precision × Recall Precision + Recall \text{F1} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1=2×Precision+RecallPrecision×Recall
- 解释:
- F1 分数是精确率和召回率的调和平均值,是一个综合考虑精确率和召回率的指标,用于平衡精确率和召回率之间的关系。当精确率和召回率都很高时,F1 分数会比较高,避免了单独考虑精确率或召回率的片面性。
-
ROC 曲线和 AUC 值:
- ROC 曲线(Receiver Operating Characteristic Curve):
- 绘制方式:通过调整分类器的阈值,得到一系列的真阳性率( T P R TPR TPR)和假阳性率( F P R FPR FPR),以 F P R FPR FPR 为横坐标, T P R TPR TPR 为纵坐标绘制曲线。
- T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP,表示在所有实际正类中被正确预测为正类的比例。
- F P R = F P T N + F P FPR = \frac{FP}{TN + FP} FPR=TN+FPFP,表示在所有实际反类中被错误预测为正类的比例。
- AUC 值(Area Under the Curve):
- 解释:是 ROC 曲线下的面积,范围在 0 到 1 之间。
- AUC 值越大,说明分类器在不同阈值下的性能越好,能够更好地区分正类和反类,当 AUC = 1 时表示完美分类器,AUC = 0.5 表示随机分类器。
- ROC 曲线(Receiver Operating Characteristic Curve):
二、回归问题的性能度量公式
-
均方误差(MSE - Mean Squared Error):
- 公式: MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1∑i=1n(yi−y^i)2
- 解释:
- y i y_i yi 是第 i i i 个样本的真实值, y ^ i \hat{y}_i y^i 是第 i i i 个样本的预测值, n n n 是样本数量。
- MSE 计算的是预测值与真实值差的平方的平均值,对较大误差的惩罚较大,因为误差是平方项,会放大较大误差的影响,常用于评估回归模型的性能。
-
平均绝对误差(MAE - Mean Absolute Error):
- 公式: MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| MAE=n1∑i=1n∣yi−y^i∣
- 解释:
- 计算预测值与真实值差的绝对值的平均值,对所有误差同等对待,不像 MSE 那样对大误差进行平方放大,更直观地反映了预测误差的平均大小。
-
均方根误差(RMSE - Root Mean Squared Error):
- 公式: RMSE = MSE \text{RMSE} = \sqrt{\text{MSE}} RMSE=MSE
- 解释:
- 是 MSE 的平方根,它与预测值和真实值具有相同的量纲,使得结果更具解释性,例如在预测房价时,RMSE 的单位与房价的单位相同。
三、假设检验公式(以 t 检验为例)
- t 检验:
- 公式: t = X 1 ˉ − X 2 ˉ s p 1 n 1 + 1 n 2 t = \frac{\bar{X_1} - \bar{X_2}}{s_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}} t=spn11+n21X1ˉ−X2ˉ
- 解释:
- X 1 ˉ \bar{X_1} X1ˉ 和 X 2 ˉ \bar{X_2} X2ˉ 是两个样本的均值, n 1 n_1 n1 和 n 2 n_2 n2 是两个样本的大小。
- s p s_p sp 是合并标准差,公式为 s p = ( n 1 − 1 ) s 1 2 + ( n 2 − 1 ) s 2 2 n 1 + n 2 − 2 s_p = \sqrt{\frac{(n_1 - 1)s_1^2 + (n_2 - 1)s_2^2}{n_1 + n_2 - 2}} sp=n1+n2−2(n1−1)s12+(n2−1)s22,其中 s 1 2 s_1^2 s12 和 s 2 2 s_2^2 s22 是两个样本的方差。
- t 检验用于检验两个样本的均值是否有显著差异,根据计算得到的 t 值和自由度,查 t 分布表可得到对应的 p 值,若 p 值小于显著性水平(如 0.05),则认为两个样本的均值有显著差异。
四、偏差与方差公式(在平方损失下)
-
偏差(Bias):
- 对于一个模型 f ( x ) f(x) f(x),假设真实的数据生成函数是 y = g ( x ) + ϵ y = g(x) + \epsilon y=g(x)+ϵ,偏差的期望定义为: Bias ( f ^ ( x ) ) = E [ f ^ ( x ) ] − g ( x ) \text{Bias}(\hat{f}(x)) = E[\hat{f}(x)] - g(x) Bias(f^(x))=E[f^(x)]−g(x)
- 解释:
- 偏差反映了模型预测的期望与真实值的差距,衡量了模型对数据的拟合能力,高偏差可能导致欠拟合,即模型过于简单,无法很好地拟合训练数据和潜在的数据模式。
-
方差(Variance):
- 对于一个模型 f ( x ) f(x) f(x),方差定义为: Variance ( f ^ ( x ) ) = E [ ( f ^ ( x ) − E [ f ^ ( x ) ] ) 2 ] \text{Variance}(\hat{f}(x)) = E[(\hat{f}(x) - E[\hat{f}(x)])^2] Variance(f^(x))=E[(f^(x)−E[f^(x)])2]
- 解释:
- 方差反映了模型在不同训练集上预测结果的波动情况,高方差可能导致过拟合,即模型对训练数据过于敏感,在不同训练集上会产生较大的预测差异。
这些公式在评估机器学习模型的性能、比较不同模型以及分析模型的拟合能力等方面都起着至关重要的作用,你可以根据具体的问题和数据类型选择合适的评估指标和检验方法,使用相应的公式进行计算和分析。
Python 的
numpy库来进行向量和矩阵的操作,以方便计算上述公式中的求和、平方、绝对值等操作。,计算 MSE 的
Python 代码如下:
import numpy as npdef mse(y_true, y_pred):return np.mean((y_true - y_pred) ** 2)# 示例使用
y_true = np.array([1, 2, 3, 4, 5])
y_pred = np.array([1.2, 2.1, 2.8, 4.2, 5.1])
print(mse(y_true, y_pred))
代码解释:
- 导入
numpy库,使用numpy的array存储真实值和预测值。 - 定义
mse函数,使用numpy的mean函数计算差值的平方的平均值。 - 最后给出一个示例调用函数,计算并输出 MSE 值。
五、代码示例(Python 实现)
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 留出法示例
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)
accuracy = model.score(X_test, y_test)
print(f"Holdout Method Accuracy: {accuracy}")# 交叉验证示例
model = LogisticRegression()
cv_scores = cross_val_score(model, X, y, cv=5)
print(f"Cross Validation Scores: {cv_scores}")
print(f"Cross Validation Mean Accuracy: {cv_scores.mean()}")# 性能度量示例(使用混淆矩阵计算精确率、召回率和 F1 分数)
from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score
y_pred = model.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
print(f"Confusion Matrix:\n{cm}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1 Score: {f1}")# 比较检验示例(这里简单对比两个不同参数的逻辑回归模型)
model1 = LogisticRegression(C=1.0)
model2 = LogisticRegression(C=0.1)
cv_scores1 = cross_val_score(model1, X, y, cv=5)
cv_scores2 = cross_val_score(model2, X, y, cv=5)
from scipy.stats import ttest_ind
t_stat, p_value = ttest_ind(cv_scores1, cv_scores2)
print(f"T-Test Statistic: {t_stat}, P-Value: {p_value}")# 偏差与方差示例(这里仅为概念说明,实际需要多次实验)
def train_and_predict(X_train, y_train, X_test):model = LogisticRegression()model.fit(X_train, y_train)return model.predict(X_test)# 多次实验观察结果的变化,可判断方差
results = []
for i in range(10):X_train, _, y_train, _ = train_test_split(X, y, test_size=0.3, random_state=i)y_pred = train_and_predict(X_train, y_train, X_test)results.append(y_pred)
代码解释:
- 留出法:
- 使用
train_test_split从iris数据集中划分出训练集和测试集。 - 创建
LogisticRegression模型,在训练集上训练并在测试集上评估准确率。
- 使用
- 交叉验证:
- 直接使用
cross_val_score进行 5 折交叉验证,得到 5 次验证的准确率得分,取平均值。
- 直接使用
- 性能度量:
- 使用
confusion_matrix计算混淆矩阵,进而计算精确率、召回率和 F1 分数。
- 使用
- 比较检验:
- 创建两个不同参数的
LogisticRegression模型,使用cross_val_score得到它们的交叉验证得分。 - 使用
ttest_ind进行 t 检验,得到 t 统计量和 p 值,根据 p 值判断差异是否显著。
- 创建两个不同参数的
- 偏差与方差:
- 定义
train_and_predict函数进行训练和预测。 - 多次不同划分进行实验,观察结果的变化,可定性分析方差。
- 定义
通过上述评估方法、性能度量、比较检验和对偏差与方差的理解,你可以更好地评估和选择机器学习模型,使模型在训练和测试中取得更好的性能,并能有效地比较不同模型的优劣。
阅读代码时,注意
sklearn中函数的参数设置,如train_test_split的test_size决定了测试集比例,cross_val_score的cv
表示交叉验证的折数。。
相关文章:
【大数据】机器学习-----模型的评估方法
一、评估方法 留出法(Holdout Method): 将数据集划分为训练集和测试集两部分,通常按照一定比例(如 70% 训练集,30% 测试集)。训练集用于训练模型,测试集用于评估模型性能。优点&…...
【Excel笔记_3】execl的单元格是#DIV/0!,判断如果是这个,则该单元格等于空
在 Excel 中,可以使用 IF 函数来判断单元格是否是 #DIV/0! 错误,并将其替换为空值(即空字符串 "")。具体公式如下: IF(ISERROR(A1), "", A1)或者,如果只想判断 #DIV/0! 错误ÿ…...
FPGA EDA软件的位流验证
位流验证,对于芯片研发是一个非常重要的测试手段,对于纯软件开发人员,最难理解的就是位流验证。在FPGA芯片研发中,位流验证是在做什么,在哪些阶段需要做位流验证,如何做?都是问题。 我们先整体的…...
信号与系统初识---信号的分类
文章目录 0.引言1.介绍2.信号的分类3.关于周期大小的求解4.实信号和复信号5.奇信号和偶信号6.能量信号和功率信号 0.引言 学习这个自动控制原理一段时间了,但是只写了一篇博客,其实主要是因为最近在打这个华数杯,其次是因为在补这个数学知识…...
信号量机制之苹果-橘子问题
桌上有一空盘,允许存放一种水果。爸爸可向盘中放苹果,也可向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一个水果供吃者取用。 要求:请用信号量机制实现爸爸、儿子、女儿三个并发…...
三相无刷电机控制|FOC理论04 - 克拉克变换 + 帕克变换的最终目标
导言 通过坐标系旋转,将电机中复杂的三相交流信号映射到与转子磁场同步的旋转参考系中,将动态问题转化为静态问题。这种方法的优点在于: 简化了控制逻辑。实现了转矩Iq和磁通Id的解耦。提供了直流量控制的可能性,大大提高了控制效…...
Nacos: 一个动态服务发现与配置管理平台
Nacos: 一个动态服务发现与配置管理平台 引言 在微服务架构日益普及的今天,服务之间的调用和配置管理变得越来越复杂。为了简化这一过程并提高开发效率,阿里巴巴推出了Nacos——一个易于使用的动态服务发现、配置管理和服务管理平台。 Nacos是什么&am…...
认识机器学习中的结构风险最小化准则
上一篇文章我们学习了关于经验风险最小化准则,其核心思想是通过最小化训练数据上的损失函数来优化模型参数,从而提高模型在训练集上的表现。但是这也会导致一个问题,经验风险最小化原则很容易导致模型在训练集上错误率很低,但在未…...
计算机网络 (35)TCP报文段的首部格式
前言 计算机网络中的TCP(传输控制协议)报文段的首部格式是TCP协议的核心组成部分,它包含了控制TCP连接的各种信息和参数。 一、TCP报文段的结构 TCP报文段由首部和数据两部分组成。其中,首部包含了控制TCP连接的各种字段ÿ…...
ubuntu24.04安装docker显卡工具包nvidia-container-toolkit
问题描述 docker 容器启动时如果需要访问 gpu ,需要安装 nvidia-container-toolkit 才行,否则会提示如下错误 sudo docker run --rm -it --gpus all ubuntu:latest docker: Error response from daemon: could not select device driver "" …...
rknn环境搭建之docker篇
目录 1. rknn简介2. 环境搭建2.1 下载 RKNN-Toolkit2 仓库2.2 下载 RKNN Model Zoo 仓库2.3 下载交叉编译器2.4 下载Docker镜像2.5 下载ndk2.5 加载docker镜像2.6 docker run 命令创建并运行 RKNN Toolkit2 容器2.7 安装cmake 3. 模型转换3.1 下载模型3.2 模型转换 4. 编译cdem…...
OpenCV相机标定与3D重建(56)估计物体姿态(即旋转和平移)的函数solvePnPRansac()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用RANSAC方案从3D-2D点对应关系中找到物体的姿态。 cv::solvePnPRansac 是 OpenCV 中用于估计物体姿态(即旋转和平移)的…...
vue倒计时组件封装,根据每个循环项的倒计时是否结束添加新类名。
1.创建countdown.vue文件: <template><p style"font-size: 10px">{{time}}</p> </template> <script>export default{data () {return {time : ,flag : false}},mounted () {let time setInterval(() > {if (this.fla…...
缩放 对内外参的影响
当你对图像进行同比例缩小时,图像的内参需要相应地变化,但外参通常保持不变。 相机内参 相机内参(内参矩阵)描述了相机的固有属性,包括焦距和主点(光轴与图像平面的交点)的坐标。 当你对图像…...
SQL面试题2:留存率问题
引言 场景介绍: 在互联网产品运营中,用户注册量和留存率是衡量产品吸引力和用户粘性的关键指标,直接影响产品的可持续发展和商业价值。通过分析这些数据,企业可以了解用户行为,优化产品策略,提升用户体验…...
晨辉面试抽签和评分管理系统之九:随机编排考生的分组(以教师资格考试面试为例)
晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...
【EtherCATBridge】- KRTS C++示例精讲(9)
EtherCATBridge示例讲解 文章目录 EtherCATBridge示例讲解结构说明代码说明 项目打开请查看【BaseFunction精讲】。 结构说明 EtherCATBridge.h :数据定义 EtherCATBridge.cpp :应用层源码 EtherCATBridge_dll.cpp :内核层源码 其余文件说明…...
C++实现设计模式--- 观察者模式 (Observer)
观察者模式 (Observer) 观察者模式 是一种行为型设计模式,它定义了一种一对多的依赖关系,使得当一个对象的状态发生改变时,其依赖者(观察者)会收到通知并自动更新。 意图 定义对象之间的一对多依赖关系。当一个对象状…...
iOS 解决两个tableView.嵌套滚动手势冲突
我们有这样一个场景,就是页面上有一个大的tableView, 每一个cell都是和屏幕一样高的,然后cell中还有一个可以 tableView,比如直播间的情形,这个时候如果我们拖动 cell里面的tableView滚动的话,如果滚动到内…...
Lianwei 安全周报|2025.1.13
新的一周又开始了,以下是本周「Lianwei周报」,我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件,保证大家不错过本周的每一个重点! 政策/标准/指南最新动态 01 美国国土安全部发布《公共部门生成式人工智能部署手…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...
