勘探开发人工智能技术:机器学习(1)

news2024/11/16 11:03:40

0 提纲

2.1 什么是机器学习
2.2 不确定性
2.3 数据类型
2.4 分类、回归、聚类
2.5 分类问题的训练与测试
2.6 性能评价指标

1 什么是机器学习

对于西瓜这个抽象类来说,它具有“色泽”,“根蒂”,“敲声”三个属性:
在这里插入图片描述
通过观察这个简单的由四个西瓜组成的数据集,可以得到如下假设:

  • “敲声=浊响”的西瓜是好瓜;
  • “根蒂=蜷缩”的西瓜是好瓜;
  • “敲声=浊响”并且“根蒂=蜷缩”的西瓜是好瓜。

这是我们人为逻辑推理得到的假设,这些假设就是机器学习需要学到的**“模型(model)”**。

如果想让机器去“学习”这些假设,该怎么做?最基本的想法是为机器提供所有的假设,对每个假设进行验证,一旦发现不符合数据的假设,就剔除。

  1. 构建假设空间:假设“色泽”、“根蒂”、“敲声”分别有2、3、3种可能取值,同时还要考虑可以取任意值,比如无论色泽如何,“敲声=浊响”并且“根蒂=蜷缩”的西瓜是好瓜,所以共产生3 × 4 × 4 = 48种假设。西瓜问题的假设空间如下:
    在这里插入图片描述

  2. 构建版本空间:(1)列出所有假设空间;(2)删除与正例不一样的假设,和与反例一致的假设。
    在这里插入图片描述
    最后剩余2,5,6:

  • 2.色泽= * 根蒂 = * 敲声 = 浊响
  • 5.色泽=* 根蒂=蜷缩 敲声=*
  • 6.色泽=* 根蒂=蜷缩 敲声=浊响
    在这里插入图片描述
    机器学习是一类算法的总称,是从大量历史数据或以往的经验中挖掘出隐含的规律,用于预测或者分类
    机器学习可以看作是寻找一个函数,输入是样本数据,输出是期望的结果,只是这个函数过于复杂,以至于不太方便形式化表达。
    需要注意的是,机器学习的目标是使学到的函数很好地适用于“新样本”,而不仅仅是在训练样本上表现很好。学到的函数适用于新样本的能力,称为泛化(Generalization)能力

机器学习的研究方向

  • 传统机器学习的研究:主要包括决策树、随机森林、人工神经网络、贝叶斯学习等方面的研究;
  • 大数据环境下机器学习的研究:大数据时代,数据的体量有了前所未有的增长。如何基于机器学习对复杂多样的数据进行深层次的分析,更高效地利用信息,成为当前大数据环境下机器学习研究的主要方向。

机器学习的类型,基于学习方式的分类:

  • 监督学习:输入数据中有“导师”;
  • 无监督学习:输入数据中无“导师”,采用聚类方法,学习结果为类别。典型的无监督学习有发现学习、聚类分析、竞争学习等;
  • 半监督学习:输入数据中有的数据有标签,有的数据没有标签;
  • 强化学习:以环境反馈(奖/惩信号)作为输入,以统计和动态规划技术作为指导的一种学习方法。算法根据当前的环境状态确定下一个动作,目标是让得到的收益最大化。

机器学习的类型,基于数据形式的分类

  • 结构化学习:以结构化数据为输入,以数值计算或符号推演为方法。典型的结构化学习有神经网络学习、统计学习、决策树学习、规则学习。
  • 非结构化学习:以非结构化数据为输入,典型的非结构化学习有类比学习、案例学习、解释学习、文本挖掘、图像挖掘、Web 挖掘等。

2 机器学习:不确定性

机器学习不保证 100% 的准确性.

2.1 确定性

机器学习一般用于解决不确定性问题.
现实生活中确定性的例子:

  • 已知我的工作量, 求我本月的收入 (财务处不会搞错);
  • 已知我的各科成绩, 求总分 (老师不会搞错);
  • 已知二哈撕了沙发, 求它是否将拥有完整的汪生 (主人不会惯着)。

2.2 不确定性

现实生活有更多不确定性的例子:

  • 如果我去向那个女生表白, 她会同意吗? (Y/N)
  • 哪个国家会夺得下届奥运会团体射击冠军? (中国队/美国队/法国队/…)
  • 根据一张照片判断人的年龄. ([0 , 100])
  • 根据某只股票这段时间的价格波动, 判断明天的涨/跌. ([−10%,+10%])
  • 明天的天气如何? (有雨/无雨, 有风/无风, 有太阳/无太阳, …)
  • 把一大堆照片分成若干小堆, 怎么分最好?

所谓不确定性, 是指我们在进行预测的时候, 不能够保证 100% 的准确.

  • 机器学习的本质, 就是 “猜”, 谁猜得更好, 谁就赢了.
  • 机器学习有时也做一些确定性问题. 但这些问题的复杂度过高, 求最优解从计算上来说不可行 (一般是 NP 难问题之类), 所以使用启发式算法之类求次优解.

不确定性产生的原因:

  • 信息不足. 按理说那个女生要答应我的, 但我不知道她刚挂科心情不好, 贸然行动导致被拒. 只考虑股价而不关心政策的变化, 注定要被深度套牢.
  • 噪音. 照片太模糊, 粉丝都无法区分是张曼玉还是王祖贤。

3 机器学习:数据类型

当前机器学习能处理的 (输入) 数据包括结构化数据、序列、图片、图等等.

3.1 基本数据元素类型

基本数据元素 (data item) 的类型:布尔型、枚举型、实型等。

  • 布尔型有两种取值, 如: Yes/No, Pass/Fail.
  • 枚举型有多种取值, 如: 颜色有红/黄/绿, 形状有方/圆/梯. 这些值之间一般没有大小关系.
  • 实型如: 人的身高, 体重. 简便起见整型一般也当成实型, 而不是枚举型来处理.

3.2 其它类型

结构化数据是指每个实例/instance (样本/sample)用同一组特征/feature (属性/attribute) 进行描述.

  • 例: 每个就诊者的检测报告包括: 性别、年龄、血压、红细胞数量、血小板数量共 5 个特征.
  • 某些机器学习方法 (如决策树) 处理枚举型数据; 有些方法则只处理实型数据, 这时一个实例可以表示为一个向量.
  • 如果数据的特征既有枚举型的, 又有实型的 (或其它类型), 就可以称为 异构数据 (heterogeneous data).

图像数据本身可以用一个矩阵来表示.
序列数据由枚举型或实型组成.

  • 它与结构化数据的区别在于: 不可以混用枚举型与实型, 长度不是固定的.
  • 例如: 股票价格数据, 温度数据, 文本数据 (小说).
    在这里插入图片描述
    在这里插入图片描述

视频数据则是图像组成的序列数据.
图数据是指数据用结点和边表示. 如社交网络中, 结点表示人 (有性别、学历等特征), 边表示人与人之间的关系 (父女, 朋友等).

4 机器学习:分类、回归、聚类

分类与回归具有不同的预测数据类型, 聚类本身没有标签.

4.1 分类

数据类型从输入数据的角度来进行讨论, 这里从输出数据, 或者目标的角度来讨论.
分类是指将一个样本预测为给定类别之一. 也称为该样本打标签.

  • 例 1: 如果我去向那个女生表白, 她会同意吗? (Y/N)
  • 由于可能的类别只有两种, 这被称为二分类问题;
  • 例 2: 哪个国家会夺得下届奥运会团体射击冠军? (中国队/美国队/法国队/…)
  • 由于可能的类别有多种, 这被称为多分类问题.

多标签分类是指类别之间没有互斥性.

  • 例 3: 明天的天气如何? (有雨/无雨, 有风/无风, 有太阳/无太阳, …) 明天可以既刮风又下雨, 甚至边下雨边出太阳.

4.2 回归

回归是指为一个输出为实型值的预测.

  • 例 4: 根据一张照片判断人的年龄. ([0,100])
  • 由于人的年龄是实型 (虽然这里是整型, 但它的值可以比较大小, 也可以当成实型对待)
  • 例 5: 根据某只股票这段时间的价格波动, 判断明天的涨/跌. ([−10%,+10%])
  • 由于它的输入数据是前面若干天的数据, 而不是当天的数据, 这被称为时序回归问题.

4.3 聚类

聚类是指根据样本的属性, 把给定的样本集合划分为若干个子集.

  • 例 6: 把一大堆照片分成若干小堆. 如果能够获得关于这个划分良好的解释更好.
  • 聚类与分类 (回归) 之间存在本质的区别, 它进行新样本的预测. 这是迫不得已的事情, 因为很多数据并没有人类先给的标签, 导致缺乏一个确定的目标, 机器只有根据自己理解来划分.

5 机器学习:分类问题的训练与测试

训练是做题, 验证是小考, 测试是高考, 高考成绩好的学生被选拔出来.

5.1 基本概念

上午来了 60 个患者, 根据他们的各项检测指标 (即数据), 主治医生给出了诊断结论 (如是否患病, 以及患哪种病), 但不会告诉实习生诊断的方法.
实习生根据这 60 条数据, 归纳总结出了诊断模型 (方法), 这是一个从数据中学习的过程.
下午来了 40 个患者, 根据他们的各项检测指标, 以及自己的诊断模型, 实习生给出了诊断结论.
主治医生比对实习生的结论与标准答案, 对实习生的学习能力进行评价. 例如, 实习生弄错了 5 个, 则其错误率为 5/40 = 12.5%, 准确率则为 87.5%.

  • 上午 60 条数据是主治医生给定的, 因此称为训练集(split-in-two).
  • 下午 40 条数据是用于考实习生的, 因此称为测试集(split-in-two).
  • 让计算机作为实习生, 就称为机器学习.
  • 由于主治医生 (supervisor) 给定了训练集的所有标签, 因此称为监督学习 (supervised learning).

5.2 训练、测试的不同方案

不同学习方法可能对于不同的训练数据的适应性也不同, 例如, 使用 1-60 号训练, 61-100 号测试的时候, A 学习器优于 B 学习器; 但使用 41-100 号训练, 1-40 号测试的时候, B 优于 A. 为弥补这种数据集划分导致的不公平, 可以使用如下方式:

  • 多次随机划分训练集与测试集 (random splitting). 将 split-in-two 重复 10 次, 每次随机进行训练集与测试集的划分. 获得 10 个错误率后, 可以求其均值与方差. 这是论文结果中 82.5 ±0.4 这类准确率的来历.
  • 交叉验证 (cross validation). 数据集中有 100 条数据. 将其分为 5 份, 即每份 20 条数据. 每次选择其中 4 份 (即 80 数据) 进行训练, 其它 1 份 (即 20 条数据) 进行测试. 这样, 所有的数据都被测试过一次. 这种方案被称为 5 折交叉验证 (5 folds cross validation, 5-cv).
  • 留一法 (leave-one-out). 这是交叉验证的极端情况. 将数据分为 100 份, 即每份只有一条数据. 这种方式最为公平, 但也最为耗时, 因为要训练-测试 100 次.
  • 另一种极端的方案被称为使用训练集进行测试 (use training set). 主治医生给了实习生 100 条带标签的数据, 实习生学习到诊断模型后, 使用它对这同样的100 条数据进行分类. 这也是有意义的.

5.3 拟合能力与泛化能力

当测试集与训练集相同时, 考查的是模型的拟合能力.
很多机器学习模型本质上从输入数据到输出标签的一个函数 (映射). 从理论上讲, 训练的过程, 就是从函数簇中选择对训练数据拟合得最好的那个函数. 从实践上讲, 训练就是构造该函数的过程.
当测试集与训练集不同时, 考查的是模型的泛化能力. 提升泛化能力 (更好地为其他就诊者服务) 才是机器学习的真正目的.

如果实习生在老师教的那些样本上表现非常好, 但在新的样本上表现比较差, 就是产生了 过拟合 (over-fitting).
如何防止过拟合, 适当降低拟合能力以获得更好的泛化能力, 是机器学习的核心.

5.4 验证集

数据集中有 100 条数据. 其中 70 条构成训练集, 20 条作为验证集, 10 条作为测试集. 根据训练集获得一个模型, 在验证集中看效果, 如果不行的话, 就再构建另一个模型, 直到获得满意的模型. 最终仍然在测试集上评估预测模型性能.
可以通过如下例子进行理解:

  • 训练集相当于平时的例题, 直接提供标准答案.
  • 验证集相当于平时的习题/测验题, 做完题后给你看标准答案.
  • 测试集相当于高考题, 只会告诉你考分, 不需要告诉你答案.

5.5 其它说明

测试集仅仅是对模型的预测能力进行一定的评估. 现实生活中, 用于预测的数据, 我们很可能永远得不到标准答案.
回归问题与分类问题同理.
时序回归问题稍有不同. 例如, 使用第 1-100 天的股价, 预测第 101 天的股价; 然后使用第 2-101 天的股价, 预测第 102 天的股价, 以此类推.
基本聚类问题就没有训练/测试的概念.

6 机器学习:性能评价指标

性能评价指标对应于体育项目的评分标准.

6.1 性能评价指标

性能评价是不同方法 PK 的基础. 要清楚裁判的标准, 才能当好一名运动员.
性能评价指标多数时候是比较直观的, 需要足够的合理性, 才能获得大家的认同. 比如, 短跑比拼的是时间, 谁用时少谁就获胜. 如果你制定一个指标, 谁跑的姿式更优美, 就不合适. 当然, 新开发一个项目, 跳健美操, 就是比姿式了.
有些人专门研究性能评价指标, 很有意义. 但相应的论文不多, 毕竟项目的个数要远远少于运动员的人数.

6.2 分类问题评价指标

准确率 Accuracy:100 个测试样本, 预测正确 95 个, 则准确率为 95%.

  • 如果是二分类问题, 准确率低于 50% 毫无意义.
  • 如果是多分类问题, 准确率低于 50% 也行.

F-measure:对于二分类问题, 我们更关注的可能是其中一类. 如根据症状判断是否流感. 将就诊者称为样本, 患流感称为正例, 否则为负例.

在这里插入图片描述

  • 实际的正例有 15 + 5 = 20 个; 实际的负例有 20 + 60 = 80 个;
  • 本身是正例, 判断正确 (也为正例) 有TP=15 (true positive) 个;
  • 本身是正例, 判断错误 (弄成负例) 有FN=5 (false negative) 个;
  • 本身是负例, 判断错误 (弄成正例) 有FP=20 (false positive) 个;
  • 本身是负例, 判断正确 (也为负例) 有 TN=60 (true negative) 个.

这样可以计算四个评价指标:

  • 精度:表示判断为正例的样本中, 有多大比例是正确的. 这适合于推荐系统等应用, 你推荐的电影, 要观众喜欢才行.
    P = T P T P + F P = 15 15 + 20 P = \frac{TP}{TP+FP} = \frac{15}{15+20} P=TP+FPTP=15+2015
  • 召回率:表示被找出来的样本比例有多大. 这适合于流行病检测等应用, 不要有新冠患者被漏掉.
    R = T P T P + F N = 15 15 + 5 R = \frac{TP}{TP+FN} = \frac{15}{15+5} R=TP+FNTP=15+515
  • 准确率:针对二分类问题时, 准确率可以写为:
    A c c = T P + T N T P + F N + F P + T N = 15 + 60 15 + 5 + 20 + 60 Acc = \frac{TP + TN}{TP+FN+FP+TN} = \frac{15+60}{15+5+20+60} Acc=TP+FN+FP+TNTP+TN=15+5+20+6015+60
  • F1-measure: F 1 = 2 ∗ P ∗ R P + R F_1 = \frac{2*P*R}{P +R} F1=P+R2PR是一个比较综合的评价指标. 当 P = R = 1 P = R = 1 P=R=1时, F 1 = 1 F_1=1 F1=1. 这适合于同时考虑精度与召回率的应用: 如果要精度高, 就尽可能判断样本是负的; 如果要召回率高, 就尽可能判断样本是正的; 而如果要 F 1 F_1 F1高, 则进行了良好的折中.

6.3 ROC曲线

有时候我们并不直接判断某个样本是正是负, 而是给出一些实数值的预测. 例如, 样本 1 为正的可能性为 0.6, 而样本 2 为正的可能性为 0.7. 也就是说, 样本 2 更可能为正. 然后根据设定的阈值来判断是正是负.

  • 真阳性率(True Positive Rate,简称TPR):TP/(TP+FN),代表的含义是:实际观测为阳的样本中,模型能够正确识别出来的比例。
  • 真阴性率(True Negative Rate,简称TNR):TN/(FP+TN),代表的含义是:实际观测为阴的样本中,模型能够正确识别出来的比例。
  • 假阳性率(False Positive Rate,简称FPR):FP/(FP+TN),代表的含义是:实际观测为阴的样本中,被模型错误地划分成阳性的比例。FPR=1-TNR。

我们可以同时使用TPR和FPR来评价一个模型的预测能力。TPR越高、FPR越低,说明模型的预测能力越好。
在这里插入图片描述

6.4 从ROC到AUC

除了用于阈值的选择,ROC曲线还可以用于不同模型的比较。下图中有三条 ROC 曲线,A 模型比 B 和 C 都要好。
在这里插入图片描述
也可以计算出ROC曲线下方的面积,计算出来的面积就是AUC的值了。AUC,即Area Under Curve(ROC曲线下的面积)。
在这里插入图片描述
AUC 同样可以用于判断分类器(预测模型)优劣,一般来说,AUC 的值越大越好。

6.5 回归问题评价指标

n n n 个测试样本, 第 i i i 个的真实标签值为 y i y_i yi, 预测标签值为 y i ′ y_i' yi.

  • 平均绝对误差 Mean Absolute Error:
    M A E = ∑ i = 1 n ∣ y i − y i ′ ∣ n MAE = \frac{\sum_{i = 1}^{n}|y_i - y_i'|}{n} MAE=ni=1nyiyi
    错了多少, 就受多大的惩罚
  • 均方根误差 Root Mean Squared Error:
    R M S E = ∑ i = 1 n ( y i − y i ′ ) 2 n RMSE = \sqrt{\frac{\sum_{i = 1}^{n}(y_i - y_i')^2}{n}} RMSE=ni=1n(yiyi)2
    有一个平方, 导致误差大的预测受到更严厉惩罚

6.6 聚类问题评价指标

聚类没有一个可参考的客观标准, 所以评价指标很凌乱.

  • 内部评价指标: 紧密度 (Compactness) 计算每个样本点到它对应的聚类中心的距离, 然后将它们加起来求平均.
  • 外部评价指标: 借助于数据的标签. 但这事情比较扯: 数据本身是没有标签的, 聚类结果你爱怎么解释都行, 从逻辑上无法引入客观的一个标签.
    关于聚类, 更多指标参见: https://blog.csdn.net/kfnorthwind/article/details/109362011

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

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

相关文章

值得尝试的进销存软件,新手使用也轻松!

作为一名小老板,我曾经非常担心在操作进销存软件时出现故障,因为这会直接影响到我们的业务开展。然而,在操作管家婆云辉煌的过程中,我发现这种担忧是没有必要的。 管家婆云辉煌的稳定性非常高,几乎不会出现软件故障。 …

软件测试目的和原则

一、软件测试的目的 1)软件测试是为了发现错误而执行程序的过程。 2)测试是为了证明程序有错,而不是证明程序无错。(发现错误不是唯一目的) 3)一个好的测试用例在于它发现至今未发现的错误。 4&#xf…

uni-app微信小程序开发自定义select下拉多选内容篇

分享-2023年高级前端进阶:前端登顶之巅-最全面的前端知识点总结站点 *分享一个使用比较久的🪜 技术框架公司的选型:uni-app uni-ui vue3 vite4 ts 需求分析:微信小程序-uni-ui内容 1、创建一个自定义的下拉,支持多…

浏览器多管闲事之跨域

年少时的梦想就是买一台小霸王游戏机 当时的宣传语就是小霸王其乐无穷~。 大些了,攒够了零花钱,在家长的带领下终于买到了 那一刻我感觉就是最幸福的人 风都是甜的! 哪成想... 刚到家就被家长扣下了 “”禁止未成年人玩游戏机 (问过卖家了&a…

AWS中Lambda集成SNS

1.创建Lambda 在Lambda中,创建名为AWSSNSDemo的函数 use strict console.log(loading function); var aws require(aws-sdk); var docClient new aws.DynamoDB.DocumentClient(); aws.config.regionap-southeast-1;exports.handler function(event,context,cal…

C语言实现选择排序

什么是选择排序? 选择排序是一种简单直观的排序算法,它的核心思想是每次从未排序的元素中选择最小(或最大)的元素,然后将其放到已排序序列的末尾。通过重复这个过程,直到所有元素都排好序为止。 选择排序…

IntelliJ IDEA如何重新弹出git身份验证窗口

1、点击File菜单—>点击Settings—>点击Appearance & Behavior—>点击System Settings—>点击Passwords—>选中Do not save, forget passwords after restart—>点击Apply—>点击OK,如下所示: 2、重启IntelliJ IDEA—>通过g…

idea集成svn

一、注意 安装svn客户端的时候一定要勾选,否则在idea上集成svn的时候会找不到 svn.exe 而报错。 如果当初安装时忘记勾选,重新运行安装包,选择modify,勾选command line client tools项中的内容。 二、配置idea集成svn 三、检出(c…

生产车间SOP+电子作业指导书系统解决方案

为了提高生产效率,许多企业开始使用SOP电子作业指导书系统来统一管理和快速发布工作指导书。这种系统不仅能够实现无纸化办公,节省企业资源,还能集成生产管理看板系统和安灯呼叫系统,实现生产现场数据的目视化管理。 一、SOP系统拓…

简单数据类型

目录 前言 一.变量 1.1 变量命名 2.1 变量定义 二.类型 2.1 字符串 2.1.1 定义 2.1.2 操作 2.1.3 python2中的print语句 2.2 整数 2.2.1 运算 2.2.2 浮点数 2.2.3 str()函数 2.3 列表 2.3.1 访问和使用列表元素 2.3.2 在列表中添加元素 2.3.3 从列表中删除元素 2.3.4 组织列表…

LangChain源码逐行解密之LLMs(二)

LangChain源码逐行解密之LLMs(二) 18.3 base.py源码逐行剖析 现在我们要聚焦于源代码中的大语言模型部分。如图18-3所示,LangChain提供了许多语言模型的选择。 Gavin大咖微信:NLP_Matrix_Space 图18- 3 LangChain的llms目录 如图18-4所示,整个LangChain的模块化设计非常出…

最小花费 c++详解

最小花费 c详解 最小花费题目描述输入格式输出格式样例样例输入样例输出 提示 解法代码 最小花费 题目描述 在 n n n 个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费&…

如何实现电子合同管理系统与其他企业应用的无缝对接?

电子合同管理系统是一种利用信息技术来管理和执行合同的系统。随着企业数字化转型的推进,电子合同管理系统已经成为许多企业必备的工具之一。然而,要实现电子合同管理系统与其他企业应用的无缝对接,并不是一件容易的事情。 实现电子合同管理…

深度解读|一站式ABI平台 Smartbi Insight V11 能力再升级

纵观过去,我们发现汽车和BI的发展有异曲同工之妙。 100来年,汽车的动力从蒸汽到燃油再到新能源,汽车的操控方式从手动到自动再到智能无人驾驶。而在BI领域,自1958年BI的概念提出后,底层数据准备从报表开发、Cube多维模…

图像的缩放之c++实现(qt + 不调包)

1.基本原理 图像的缩放一般使用插值算法,而本章将介绍两种常用插值算法:最临近插值法和双线性插值法 1.最临近插值法 将浮点数的位置坐标,进行四舍五入找到原图像的整型坐标即可,具体操作可见下面的公式,其中原图像坐标…

MES系统在机器人行业生产管理种的运用

机器人的智能水平也伴随技术的迭代不断攀升。 2021年的春晚舞台上,来自全球领先工业机器人企业abb的全球首款双臂协作机器人yumi,轻松自如地表演了一出写“福”字,赢得了全国观众的赞叹。 在汽车装配领域,一台机器人可以自主完成一…

【笔记】线段树

【笔记】线段树 目录 简介定义建树更新例题1: 单点修改,区间查询单点修改区间查询本题完整代码 例题2: 区间修改,单点查询思路本题完整代码 例题3: 区间修改,区间查询懒标记基本思想应用 区间修改本题完整代码 简介 线段树是一棵二叉树。如果…

带团队后的日常思考

一、日常问题 1)补充产品文档 最近版本迭代,其中涉及一块举报流程的优化,其实会涉及管理后台发送站内信。 刚开始,大家都没怎么在意这个需求,但是在执行时才发现有许多细节没有考虑到。 管理后台的举报页面是在 2018 …

【C++技能树】一文看懂模板匹配

Halo,这里是Ppeua。平时主要更新C,数据结构算法,Linux与ROS…感兴趣就关注我bua! 文章目录 0.泛型编程1.模板2 函数模板:2.1函数模板的特化 3. 类模板3.1 非类型模板参数3.2 类的模板刻画3.2.1 全特化3.2.2 偏特化 0.泛型编程 假…

在Microsoft SQL Server 2008中,语法生成错误“并行数据仓库(PDW)功能未启用“

案例: 原表有两列,分别为月份、月份销售额,而需要一条 SQL 语句实现统计出每个月份以及当前月以前月份销售额和 sql 测试数据准备: DECLARE Temp Table ( monthNo INT, --- 月份 MoneyData Float --- 金额 ) insert INTO TEM…