机器学习研究套路: 数据、场景、问题、方法

本文描述机器学习的一些研究套路, 仅代表个人比较偏激的观点. 如果要从事机器学习方面的研究, 可以从本文所指出的任何一个层面着手.

1. 数据 (data)

数据是所有数据挖掘、机器学习的基础. 我们常说的“用数据说话”.

1.1 结构化 (structured data)

结构化数据用对象、属性来描述, 其优点是容易处理, 缺点是数据整理需要花 80% 以上的时间.
结构化数据通常可以用一个 n × m n \times m n×m 的矩阵来描述, 矩阵里面的数据可以有不同的基本类型. 某一个属性是我们想要预测的属性, 则结构化数据被称为决策表 (decision system), 否则被称为信息表 (information system).
为了方便起见, 我们将结构化数据的条件属性值部分既看作一个矩阵, 也看作一个集合, 见 机器学习的数学基础 5: 数据集的混合表示法.

1.1.1 布尔型 (boolean)

二分类问题的决策属性为布尔型, 表示 play/not (ID3 的 golf 示例数据), toxic/edible (mushroom 数据集) 等等.
形式背景 (formal context) 的所有属性都为布尔型.
超市购物清单也可以认为是布尔型 (是否买相应的商品).

1.1.2 名词型 (nominal/symbolic/enumerate)

ID3 决策树、基于规则的学习等都处理枚举型数据, 如天气 (晴、雨、多云), 气温 (高、中、低) 等等.
可以将布尔型看作枚举型的特例.

1.1.3 实型 (numeric)

同样是气温, 也可以使用原始温度, 如 32.5. 这是在实际问题中遇常见的数据类型.

1.1.4 异质型 (heterogeneous)

一个结构化数据中, 包含以上几种基本类型的两种或以上, 就是异质型.

研究思路: 如果别人只做了名词型的, 你就做一个实型的; 如果别人两种都做了, 你就做异质的.


1.2 序列数据 (sequential data)

序列数据存在也很广泛, 而且相对于结构化数据更言, 而贴近数据的原始状态. 时序长度不确定

1.2.1 时间序列 (time series)

股票、气温、水流量都是时间序列. 每个时间点的基础数据类型可以是名词型、实型等.

1.2.2 文本序列 (text sequence)

小说、CSDN贴子都是文本序列. 每个时间点的基础数据类型是名词型.

1.2.3 基因序列 (gene sequence)

基因序列、蛋白质序列. 每个时间点的基础数据类型是名词型.

1.2.4 多元时序 (multivariate time series)

现实生活中我们会关注多个变量. 例如: 某一只股票的交易数据是单时序, 多只股票的就是多时序.
研究思路: 单时序 vs. 多时序, 同步 vs. 异步.


1.3 矩阵数据 (matrix data)

1.3.1 浏览矩阵 (browse matrix)

浏览矩阵里面的数据为布尔值, 表示用户是否浏览该商品.
辨析: 浏览矩阵为一个稀疏矩阵, 其目标通常是缺失值填补. 而结构化数据的目标一般是分类 (有指定的类属性)、聚类.

1.3.2 评分矩阵 (rating matrix)

评分矩阵里的数据一般用 0 表示未知/缺失. 其它值表示满意度.

1.3.3 灰度图 (gray image)

灰度图的每个数据一般为 0–255 的整数.

1.3.4 彩色图 (colored image)

彩色图 (RGB 形成张量 tensor).

1.3.5 视频 (video)

视频可以看作是图片的时序, 但这仅对于早期的胶片电影有效. 现在的视频数据有各种压缩方式, 会比较复杂.

研究思路: 浏览矩阵、评分矩阵,都可以有时间信息.


1.4 图数据 (graph data)

复杂网络, 如社交网络中, 每个节点为一个人, 边为他们之间的联系. 可以是二值的, 表示是否有直接联系; 也可以是实型的, 表示联系的紧密程度.
图是比较复杂的结构, 只要你敢做, 几乎都是前沿.


1.5 标签信息 (label information)

以前人们只考虑单标签, 即仅注重某一个具体任务.
多标签顾名思议就是有多个标签, 如猫、狗、蓝天、白云. 默认是布尔型的.
也有人进一步扩展, 将标签值定义为 [ 0 , 1 ] [0, 1] [0,1] 区间的实数. 如果同一对象不同标签值之和为 1, 可以认为是标签分布.
研究思路:

  1. 可以认为标签之不一定为 1, 就可以用模糊之类来解释. 我查了下, fuzzy multi-label 还没人做, 想灌水的速度上!
  2. 标签信息与前面的信息都正交, 所以可以做任意的结合.

1.6 数据质量

在真实世界中, 并非所有数据都可用、可靠. 有时候, 其可靠性还可能比较低.

1.6.1 缺值 (missing value)

缺值也是很多数据所具有的特点. 有些数据缺失很严重, 有的问题甚至本身就是缺失值填补 (如推荐系统).

1.6.2 噪音 (noise)

噪音广泛存在. 你可以不理它, 也可以想办法去除它.

研究思路: 什么数据都是可以有缺值的, 也是可以有噪音的. 可以在完备数据集中抠掉一些造成缺值, 也可以在干净数据集中加入噪音.


1.5 附加信息 (additional information)

数据可能还有一些附加信息.

1.5.1 代价 (cost)

代价有很多: 测试代价 (test cost), 误分类代价 (misclassification cost), 标记代价 (label cost) 等等.
还可分为时间代价 (time cost), 金钱代价 (money cost), 带宽代价 (bandwidth cost)等. 一般而言, cost 默认是 money cost.

1.5.2 对象关联性 (sample correlation)

不同对象不一定独立. 如果知道对象关联性, 应该可以为学习提供帮助.
传统机器学习要求数据独立同分布, 而最近人们一直想降低这个要求.
多示例 (multi-instance) 也可能算作对象有关联性. 数据集有若干个包, 每个包有若干个对象. 也就是说, 数据是分两级组织起来的.

研究思路:

  1. 代价与其它信息也是正交的, 甚至于不同代价之间也可能是正交的.
  2. 在数据层面的创新, 一定是本质的创新.

2. 场景 Scenario

在机器学习领域, 同一个名词可能同时代表了场景、问题和方法. 但我们还是应该尽可能把这几者区分开来.
用一个例子来说明几个场景.

2.1 无监督学习 (unsupervised learning)

上午医院内科来了 n n n 个人就诊, 按照流程进行了 m m m 项检查. 需要根据检查指标将这些人分成几堆 (簇, cluster), 同一个簇的人越相似越好, 不同簇的人越不相似越好.
说明: 无监督学习看起来奇奇怪怪的, 把这些人分成几堆有什么意义呢? 但这正是我们机器学习所最常遇到的场景.

2.2 监督学习 (supervised learning)

上午医院内科来了 n n n 个人就诊, 按照流程进行了 m m m 项检查, 医生给出了正确的诊断结果 (标签值: 流感/非流感), 并把数据交给实习生, 但并不会告诉他自己是如何获得结果的 (有数据, 无知识). 下午内科依次又来了 n ′ n' n 个人就诊. 实习生根据从上午的数据学习总结知识, 进行诊断 (分类 classify、预测 predict) 并给出结果.

2.3 半监督学习 (semi-supervised learning)

医院内科来了 n n n 个人就诊, 按照流程进行了 m m m 项检查, 医生对其中 n ′ n' n 个给出了正确的诊断结果 (流感/非流感), 并把数据交给实习生, 但并不会告诉他自己是如何获得结果的 (有数据, 无知识). 实习生需要对余下的 n − n ′ n - n' nn 个就诊者进行诊断 (classify, predict) 并给出结果.
辨析: 半监督学习中, 有标签与无标签样本是同时给的, 所以可以利用无标签样本所包含的数据分布信息进行学习. 当有标签样本数量相同时, 半监督学习有天然优势.

2.4 主动学习 (active learning)

医院内科来了 n n n 个人就诊, 按照流程进行了 m m m 项检查. 实习生对医生说: “不要着急, 等我先看看”. 然后实习生挑出一个 (或多个) 样本要求医生给出正确结果, 医生照办后, 实习生又挑出一个 (或多个) 样本要标签. 这个过程持续到标签限额 ( N N N 个) 达到. 之后医生拒绝再给标签, 由实习生对剩下的 n − N n - N nN 个样本进行诊断.
辨析: 同时拥有有标签样本和无标签样本, 所以主动学习可以看作半监督学习的一种. 主动学习允许实习生挑选样本, 与我们在课常上向老师请教问题类似, 可以避免学习我们已经知道的知识导致时间 (标签) 的浪费, 因此具有更多的优势.

2.5 封闭世界与开放世界 (close-world vs. open-world)

对于半监督学习 (含主动学习) 还有一个封闭世界 (close world) 和开放世界 (open world) 的区分.

  1. close world 是指所有样本一起给定, 对其中的无标签样本进行分类即可, 可以称为直推学习 (transductive learning). 2.4 节描述的就是这种情况.
  2. open world 是指在当天给定的 N N N 个有标签、 n − N n - N nN 无标签数据集上训练, 而是需要对第二天的 n ′ n' n 个无标签样本进行分类.

2.6 强化学习 (reinforcement learning)

延迟奖励: 有可能在最后才收到奖励.
棋类游戏, AlphaGo 井字棋 (含代码分析).
迷宫问题 (含代码分析)

3. 问题 (Problem)

多数机器学习问题可以描述为约束满足问题,包括如下几个方面: 输入、输出、优化目标、约束条件. 为评估学习效果, 还需要评价指标.
对于预测问题 (包括分类与回归等), 优化目标使用训练集来计算, 评价指标则使用测试集来计算. 在第 4 部分, 会进一步讨论这个事情.

3.1 分类

问题 3.1.1 实型数据的二分类问题.
输入: 条件属性矩阵 X = [ x i j ] n × m \mathbf{X} = [x_{ij}]_{n \times m} X=[xij]n×m, 同时看作 X = { x i } i = 1 n \mathbf{X} = \{\mathbf{x}_i\}_{i = 1}^n X={xi}i=1n, 标签向量 Y = [ y 1 , … , y n ] \mathbf{Y} = [y_1, \dots, y_n] Y=[y1,,yn];
输出: 函数 f : R m → { 0 , 1 } f: R^{m} \rightarrow \{0, 1\} f:Rm{0,1};
优化目标: l ( f ( X ) , Y ) \mathcal{l}(f(\mathbf{X}), \mathbf{Y}) l(f(X),Y).
说明:

  1. 学习器可以看作是一个函数 f f f, 机器学习可以看作是函数拟合问题;
  2. l \mathcal{l} l 为损失函数, 在二分类问题上, 这里对应于准确率.
  3. f ( X ) = [ f ( x 1 ) , … , f ( x n ) ] f(\mathbf{X}) = [f(\mathbf{x}_1), \dots, f(\mathbf{x}_n)] f(X)=[f(x1),,f(xn)].

常用评价指标:
令测试集的条件属性矩阵 (也看作对象集合) 为 X ′ = { x i ′ } i = 1 n ′ \mathbf{X}' = \{\mathbf{x}_i'\}_{i = 1}^{n'} X={xi}i=1n, 标签向量为 Y ′ = [ y 1 ′ , … , y n ′ ′ ] \mathbf{Y}' = [y'_1, \dots, y'_{n'}] Y=[y1,,yn].

  1. 准确率 (accuracy): a c c ( f ( X ′ ) , Y ′ ) = ∣ { 1 ≤ i ≤ n ′ ∣ f ( x i ′ ) = y i ′ } ∣ n ′ (1) acc(f(\mathbf{X}'), \mathbf{Y}') = \frac{|\{1 \le i \le n' | f(\mathbf{x}_i') = y_i'\}|}{n'} \tag{1} acc(f(X),Y)=n{1inf(xi)=yi}(1)
    它对于多分类问题也成立.
  2. 精度 (precision): 针对二分类. 预测为正例的样本, 实际也为正例的比例.
  3. 召回率 (recall): 针对二分类. 实际为正例的样本, 预测也为正例的比例.
  4. F1-指标 (F1-measure): 精度与召回率的融合.
    对于 precision, recall, F1-measure 的具体描述网上很多, 如: 准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure.

3.2 回归

问题 3.2.1 实型数据的回归问题.
输入: 条件属性矩阵 X = ( x i j ) n × m \mathbf{X} = (x_{ij})_{n \times m} X=(xij)n×m, 标签向量 Y = ( y 1 , … y n ) \mathbf{Y} = (y_1, \dots y_n) Y=(y1,yn);
输出: 函数 f : R m → R f: R^{m} \rightarrow R f:RmR;
优化目标: l ( f ( X ) , Y ) \mathcal{l}(f(\mathbf{X}), \mathbf{Y}) l(f(X),Y).
说明:

  1. 与二分类问题相比, 函数值域发生了变化;
  2. 可以用 l 1 l_1 l1 损失, l 2 l_2 l2 损失等等, 相应地优化 MAE, RSME.

与分类问题相同, 令测试集的条件属性矩阵 (也看作对象集合) 为 X ′ = { x i ′ } i = 1 n ′ \mathbf{X}' = \{\mathbf{x}_i'\}_{i = 1}^{n'} X={xi}i=1n, 标签向量为 Y ′ = [ y 1 ′ , … , y n ′ ′ ] \mathbf{Y}' = [y'_1, \dots, y'_{n'}] Y=[y1,,yn].

常用评价指标:

  1. 平均绝对误差 (mean absolute error, MAE)
    m a e ( f ( X ′ ) , Y ′ ) = ∑ i = 1 n ′ ∣ f ( x i ′ ) − y i ′ ∣ n ′ (2) mae(f(\mathbf{X}'), \mathbf{Y}') = \frac{\sum_{i = 1}^{n'} |f(\mathbf{x}'_i) - y'_i|}{n'} \tag{2} mae(f(X),Y)=ni=1nf(xi)yi(2)
  2. 均方误差 (mean square error, MSE)
    m s e ( f ( X ′ ) , Y ′ ) = ∑ i = 1 n ′ ( f ( x i ′ ) − y i ′ ) 2 n ′ (3) mse(f(\mathbf{X}'), \mathbf{Y}') = \frac{\sum_{i = 1}^{n'} (f(\mathbf{x}'_i) - y'_i)^2}{n'} \tag{3} mse(f(X),Y)=ni=1n(f(xi)yi)2(3)
  3. 均方根误差 (root mean square error, RMSE)
    将式 (3) 取根号即可.
    问题 3.2.2 时序数据的回归问题.
    输入: 时序数据 S = ( s 1 , s 2 , … , s n ) \mathbf{S} = (s_1, s_2, \dots, s_n) S=(s1,s2,,sn), 其中 s i ∈ R s_i \in R siR, 滑动窗口大小 N N N;
    输出: 函数 f : R N → R f: R^N \rightarrow R f:RNR;
    优化目标: ∑ i = 1 n − N l ( f ( s i , s i + 1 , … , s i + N − 1 ) , s i + N ) \sum_{i = 1}^{n - N} \mathcal{l}(f(s_i, s_{i + 1}, \dots, s_{i + N - 1}), s_{i + N}) i=1nNl(f(si,si+1,,si+N1),si+N).
    说明:
  1. 这里使用一个滑动窗口的数据来预测下一时刻的数据;
  2. 实际问题中, 也可以用所有的历史数据.

3.3 聚类

问题 3.3.1 实型数据的聚类问题.
输入: 数据矩阵 X = ( x i j ) n × m \mathbf{X} = (x_{ij})_{n \times m} X=(xij)n×m, 聚类簇数 k k k;
输出: f : [ 1.. n ] → [ 1.. k ] f: [1 .. n] \rightarrow [1 .. k] f:[1..n][1..k];
优化目标: min ⁡ ∑ f ( i ) = f ( j ) d ( i , j ) − λ ∑ f ( i ) ≠ f ( j ) d ( i , j ) \min \sum_{f(i) = f(j)}d(i, j) - \lambda \sum_{f(i) \neq f(j)}d(i, j) minf(i)=f(j)d(i,j)λf(i)=f(j)d(i,j).
说明:

  1. 函数 f f f 的输入为一个实例的下标, 输出为该实例的簇号;
  2. 默认 i , j ∈ [ 1.. n ] i, j \in [1..n] i,j[1..n];
  3. 第一个部分表示簇内数据的距离尽可能小, 第二部分表示簇间数据的距离尽可能大. 由于希望将多目标做成单目标, 所以使用带权和, 引用了调节系数 λ \lambda λ.

常用评价指标:

  1. 外部指标. 通过标签来评价.
  2. 内部指标. 通过簇内、簇间距离来评价.
    一搜一大堆, 参见 聚类评价指标

3.4 缺失值填补

问题 3.4.1 缺失值填补问题.
输入: 数据矩阵 X = ( x i j ) n × m \mathbf{X} = (x_{ij})_{n \times m} X=(xij)n×m, 其中某个特殊值 (如0, -999) 表示缺值;
输出: f : R n × m → R n × m f: R^{n \times m} \rightarrow R^{n \times m} f:Rn×mRn×m;
优化目标: l ( f ( X ) , X ) \mathcal{l}(f(\mathbf{X}), \mathbf{X}) l(f(X),X).
说明:

  1. 本问题的场景实际上是封闭世界的半监督学习.
  2. 优化目标使用非缺值 (训练集) 来计算/验证.
  3. 缺值部分即测试集. 但部分测试集的数据也有可能对于裁判也未知, 就只能忽略它们了.

常用评价指标:

  1. 如果基本数据类型为布尔型, 则可以用二分类的评价指标.
  2. 如果基本数据类型为实型, 则可以用回归问题的评价指标.
  3. 如果基本数据类型为实型, 但预测数据类型为布尔型 (如推荐/不推荐), 则还是使用二分类的评价指标.

3.5 模式识别

包括:序列模式识别,如频繁项集挖掘、关键词提取;图像识别等等。

3.6 去噪

去除噪音点,以更好地进行学习.
图像去噪、地震波去噪、评分数据去噪.

3.7 数据增强

可以增加分辨率 (如图片与视频恢复、二维码恢复), 增加数据的数量 (和质量).

3.8 属性选择与提取

属性选择: 选择一个属性子集, 相当于数据降维;
属性提取: 获得一些新的属性, 相当于映射到其它的空间.

4. 方法 (method)

机器学习方法设计时, 通常要应对经验误差与泛化误差之间的差距. 所谓经验误差 (训练误差), 就是在训练集中的误差; 所谓泛化误差 (测试误差), 就是在新样本中的误差. 有些同学平时成绩好, 考试成绩差很多, 就是泛化性不好; 反之, 考试成绩与平时成绩差距小, 就是泛化性好. 由于实际应用中的最终评价指标是泛化误差, 如何避免 过拟合 就是机器学习的核心问题.

4.1 堕性学习 (lazy learning)

堕性学习的意思就是: 我不学习, 考试的时候翻书.
最有代表性的是 k k k近邻 ( k k k nearest neighors, k k kNN) 算法, 对于每一个新样本执行如下操作:

  1. 找到与其距离最近的 k k k 个样本, 可采用不同的距离, 如闵氏 (闵可夫斯基) 距离;
  2. 根据 k k k 个样本对新样本进行预测. 如果是分类问题, 则使用投票方式获得新样本的类别, 如果是回归问题, 就采用求平均值的方式获得预测值.

说明:

  1. k k kNN 的核心是相似性: 条件属性相似的实例, 决策属性也应该一致. 大道至简, k k kNN 抓住了世界一个本源. 已经证明: 当数据量足够大时, k k kNN 的误差上届, 仅仅是贝叶斯误差的 2 倍. 也就是说, 如果数据分布导致的误差为 1%, 则 k k kNN 的误差不超过 2%. 换言之, 真正的大数据, 用这种最简单的算法就够了. 贝叶斯误差的讨论见 https://zhuanlan.zhihu.com/p/114609537;
  2. k k kNN 对很多机器学习问题都适用, 通常作为一种基础算法而存在. 其它算法都应与它比较, 如果比它差, 也就没太多存在价值了. 然而, 要在所有的数据集上打败 k k kNN, 并非容易的事情;
  3. 采用闵氏距离时, 最好先将数据归一化;
  4. 当数据量很大时, 测试数据要逐一与训练数据计算距离, 时间开销太大. 这也是 k k kNN 的最大弊端;
  5. 要把 k k kNN 描述清楚并没有相像的那么简单, 见 kNN 的数学表达式.

4.2 基于规则的学习 (rule-based learning)

决策表的每一行都可以读成一条规则, 例:
IF outlook = overcast & humidity = high & temperature = low THEN play golf
基于规则的学习, 就是把这些原始规则进行合并、裁剪, 获得更短的、覆盖面更大的规则. 例如, 上面这个规则如果能简化为
IF outlook = overcast THEN play golf
则覆盖面就很大.
人们还喜欢把规则用树的方式组织起来, 构成决策树 (decision tree). CART, ID3, C4.5 都是有名的决策树生成算法. 它可以理解为一列 IF-THEN- ELSE 的嵌套.
说明:

  1. 决策树易于理解, 可解释性好, 但超过一张 A4 纸的决策树意义就不大了;
  2. 生成决策树的基本原则是: 树越小越好, 根据 Occam 剃刀原理, 这表示泛化性能好;
  3. 决策树使用启发式信息 (信息增益, Gini 指数等) 来进行当前属性的选择;

4.3 线性模型 (linear model)

线性模型使用一个权值向量或矩阵来表达模型.

  1. 对于回归问题, 有线性回归及其变种 (岭回归、局部线性回归);
  2. 对于分类问题, 有 Logistic 回归 (注意这是分类), 基础 SVM 等;

4.4 核方法 (kernel method)

核方法的思想是: 在原始空间线性不可分的数据, 映射到高维空间可能就线性可分了. 常见的有高斯核等. 这真是一个奇葩的想法: 别人 PCA 都想着方法来降维, 核方法居然去升维, 而且效果还很好.
核方法来源于 SVM, 但后来发现可以自成一体, 所以就独立出来.

研究思路:
在 2000 年左右, 设计一个新的核函数, 找几个数据集做实验, 就可以写一篇高级别论文.

4.5 集成学习 (ensemble learning)

集成学习的基本思想是: 用一系列弱分类器, 构建一个与强分类器性能相当的模型. 其理论意义在于: 弱分类器等价于强分类器.
AdaBoosting 是集成学习的一个经典算法. 代码见 日撸代码300行(61-70天,决策树与集成学习).

4.6 迁移学习 (transfer learning)

我实在搞不清楚迁移学习算是问题还是方法.

  1. 从问题层面, 迁移学习指数据未满足独立同分布, 需要在新的环境下进行改变;
  2. 从方法层面, 迁移学习是指学习算法具有适应能力.

4.7 度量学习 (metric learning)

开发新的度量, 相当于将数据映射到一个新的空间.

4.8 人工神经网络 (artificial neural network)

网络够深了, 就称为深度学习.
ANN, CNN, LSTM, GAN, GAT, Transformer, 在这个人工神经网络一统江湖的时代, 还有什么任务是它不能干的呢?
ANN 与 CNN 的 C++代码
ANN 的 java 代码
CNN 的 java 代码
神经网络的本质是属性提取.

5. 其它

未完待续


欢迎拍砖!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值