离散数学入门级概念:集合、关系、元组

本贴描述离散数学的一些入门级概念, 以及使用过程中容易遇到的坑.

1. 集合

1.1 朴素的定义

Definition 1. A set is a collection of elements, and an element is an object in a set.
集合有两种基本的表示法:

  1. 列举法
    如:
    A = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } \mathbf{A} = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\} A={ 0,1,2,3,4,5,6,7,8,9} 是阿拉伯数字的集合.
    N = { 0 , 1 , 2 , …   } \mathbf{N} = \{0, 1, 2, \dots\} N={ 0,1,2,} 是自然数的集合.
    Ω \Omega Ω = {a, b, … \dots , z} 是英文字母表, 我故意把字母写成非斜体的, 表示不是变量.
  2. 谓词法
    如:
    O = { x ∈ N ∣ x m o d    2 = 1 } \mathbf{O} = \{x \in \mathbf{N} | x \mod 2 = 1\} O={ xNxmod2=1} 是自然奇数的集合. 注意这里的写法, x x x 其实是有两个限定的, 我们习惯于把一个基本的限定放在竖线左边. 当然, 写成 O = { x ∣ x ∈ N , x m o d    2 = 1 } \mathbf{O} = \{x | x \in \mathbf{N}, x \mod 2 = 1\} O={ xxN,xmod2=1} 也行, 就是颜值差点.

还有一些常见的集合, 如实数集 R \mathbb{R} R.

乍一看, Definition 1 没毛病, 也符合我们的认知. 这个定义奇葩之处在于: 你要定义集合, 就需要先说什么是元素; 你要定义元素, 就要先说什么是集合. 这导致了集合悖论 “理发师是给那些不给自己理发的人理发的人”, 我们在这里不详细讨论. 作为搞计算的人, 可以不管它.

1 号坑: 我们通常会指定确定的集合, 如 N \mathbf{N} N, 但泛指其元素时, 可以用 x x x, y y y 或其它符号, 只要说 x ∈ N x \in \mathbf{N} xN 即可, 而不需要对其定义. 换言之, x ∈ N x \in \mathbf{N} xN 这个表达式已经对 x x x 这个变量进行了足够的界定.

习题 1: { 0 , 1 , { 0 , 1 } , { 1 , 2 } } \{0, 1, \{0, 1\}, \{1, 2\}\} { 0,1,{ 0,1},{ 1,2}} 有几个元素? 机器学习中, 这类形式的集合有什么优点和缺点?

1.2 基数

集合 A \mathbf{A} A 的基数,即其元素个数, 记为 ∣ A ∣ |\mathbf{A}| A.
数字集合的基数为 10, 英文字母表的基数为 26 (仅考虑小写), 正整数的基数为可数无穷 N N N, 实数的基数为 (一阶) 不可数无穷. 计算机不搞无穷, 暂时忽略.
2 号坑: 基数符号与绝对值符号相同, 但读的时候, 要念成 “the cadinalty of A”.
习题 2: ∅ \emptyset 的基数是多少? { ∅ } \{\emptyset\} { } 呢?

1.2 笛卡尔积

我们最常使用的是笛卡尔坐标系. 一维数轴可表示为 R \mathbb{R} R, 二维平面可以表示为 R × R = R 2 \mathbb{R} \times \mathbb{R} = \mathbb{R}^2 R×R=R2, n n n 维空间当然就是 R n \mathbb{R}^n Rn 了.
a) 一维数轴上的点就是一个实数 x ∈ R x \in \mathbb{R} xR.
b) 二维数轴上的点就是一对实数 ( x , y ) ∈ R 2 (x, y) \in \mathbb{R}^2 (x,y)R2.
c) n n n 维空间上的点就是一个向量 ( x 1 , x 2 , … , x n ) ∈ R n (x_1, x_2, \dots, x_n) \in \mathbb{R}^n (x1,x2,,xn)Rn.

Definition 2. The Cartesian product of A 1 \mathbf{A}_1 A1, … \dots , A n \mathbf{A}_n An is
A 1 × A 2 … A n = { ( x 1 , … , x n ) ∣ x 1 ∈ A 1 , … , x n ∈ A n } . \mathbf{A}_1 \times \mathbf{A}_2 \dots \mathbf{A}_n = \{(x_1, \dots, x_n) | x_1 \in A_1, \dots, x_n \in A_n\}. A1×A2An={ (x1,,xn)x1A1,,xnAn}.

不同的集合是否可以做笛卡尔积呢? 从 Definition 2 看, 回答是肯定的. 例如, 颜色 C \mathbf{C} C = {Red, Green, Blue}, 形状 S \mathbf{S} S = {Triangle, Rectangle, Circle}, 质量 W = [ 1..100 ] = { 1 , 2 , … , 100 } \mathbf{W} = [1..100] = \{1, 2, \dots, 100\} W=[1..100]={ 1,2,,100}. 则 C × S × W \mathbf{C} \times \mathbf{S} \times \mathbf{W} C×S×W 的元素包括 (Red, Circle, 30) 等等.
3 号坑: [1…100], 这里两个点的用法, 必须配合方括号.

根据高中阶段获得的排列组合知识可知 ∣ C × S × W ∣ = ∣ C ∣ × ∣ S ∣ × ∣ W ∣ = 3 × 3 × 100 = 900 |\mathbf{C} \times \mathbf{S} \times \mathbf{W}| = |\mathbf{C}| \times |\mathbf{S}| \times |\mathbf{W}| = 3 \times 3 \times 100 = 900 C×S×W=C×S×W=3×3×100=900. 相应规律对于任何笛卡尔积都成立.

这种笛卡尔积在机器学习中最为常见, 可以完美地表示混合类型的数据. 任何实例都可以用这种元素描述, 但反过来, 并非所有的元素都对应于数据集中的一个实例. 以本例来说, 这个笛卡尔积的元素个数 (即基数) 为 900 900 900, 但数据集中通常不会有 900 个元素. 换言之, 数据不会填满整个空间, 甚至通常在这个空间内是非常稀疏的. 找出数据在空间中的分布规律, 这也是数据挖掘的基本意义.

这里又涉及了一个名字: 分布 (distribution), 它是概率方面的知识, 本贴不进一步讨论.

在说到一个数据集的时候,有三种表示法, 本节描述前两种:
a) 矩阵表示法.
当各个属性都为实型值时, 数据集可表示为 D ∈ R n × m \mathbf{D} \in \mathbb{R}^{n \times m} DRn×m, 它表示每个实际的数据集, 都是 n × m n \times m n×m 维空间的一个点而已. 如果把记 D = ( x 1 , x 2 , … , x n ) T \mathbf{D} = (\mathbf{x}_1, \mathbf{x}_2, \dots, \mathbf{x}_n)^{\mathrm{T}} D=(x1,x2,,xn)T, 则 x i ∈ R m \mathbf{x}_i \in \mathbb{R}^m xiRm.
b) 集合与向量混合法
D = { x 1 , x 2 , … , x n } \mathbf{D} = \{\mathbf{x}_1, \mathbf{x}_2, \dots, \mathbf{x}_n\} D={ x1,x2,,xn}, 其中 x i ∈ R m \mathbf{x}_i \in \mathbb{R}^m xiRm.
优缺点对比:
i) 集合与向量混合法中, 元素可以随意交换顺序, 这与现实数据的独立性一致;
ii) 集合与向量混合法中, 不允许两个元素相同, 这与现实情况不一致;
iii) 矩阵表示法可以支持矩阵的相乘, 易于表示加权等操作, 用于神经网络, 线性回归时方便.
4 号坑: 多数文献用一个行向量表示一个对象, 但机器学习中, 经常用一个列向量. 这种情况下, 矩阵表示法中应使用 D = ( x 1 , x 2 , … , x n ) \mathbf{D} = (\mathbf{x}_1, \mathbf{x}_2, \dots, \mathbf{x}_n) D=(x1,x2,,xn), 即不需要转置符号 T \mathrm{T} T.
5 号坑: 矩阵转置是用 mathrm{T}, 为 transpose 的意思; 而不是 top, 符号为 ⊤ \top .

1.3 幂集

Definition 2. The power set of A \mathbf{A} A is given by
2 A = { B ∣ B ⊆ A } . 2^\mathbf{A} = \{\mathbf{B} | \mathbf{B} \subseteq \mathbf{A}\}. 2A={ BBA}.
例: A = { 1 , 2 , 3 } \mathbf{A} = \{1, 2, 3\} A={ 1,2,3}, 2 A = { ∅ 2^\mathbf{A} = \{\emptyset 2A={ , {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}. 因此, 幂集是的每个元素都是一个集合. 另外, ∣ 2 A ∣ = 2 ∣ A ∣ = 2 3 = 8 |2^\mathbf{A}| = 2^{|\mathbf{A}|} = 2^3 = 8 2A=2A=23=8. 这个定理还是可以使用高中排列组合知识证明.
幂集不仅限于有穷集,对于任意无穷集也有效.
6 号坑: 为了理解集合的元素可以是集合这件事, 有一个直观的方法. 想像集合就是一个塑料袋, 里面放若干塑料袋当然没毛病. 关于这个事情还有个头疼的问题: 所有集合的集合, 是否包含它自己? 这个又不关我们计算机界啥事儿.
7 号坑: 有时 B ⊆ A \mathbf{B} \subseteq \mathbf{A} BA 可以直接表达我们的需求. 但有时必须用到幂集. 例如: 信息增益函数 f : 2 A × A → R f: 2^\mathbf{A} \times \mathbf{A} \rightarrow \mathbb{R} f:2A×AR 的两个参数, 依次是一个属性子集和一个属性. 即: 对于任意 B ∈ 2 A \mathbf{B} \in 2^\mathbf{A} B2A a ∈ A a \in A aA, 都可获得唯一的信息增益值.

2. 二元关系

Definition 3. Let A \mathbf{A} A and B \mathbf{B} B be two sets. Any R ⊆ A × B \mathbf{R} \subseteq \mathbf{A} \times \mathbf{B} RA×B is a binray relation.
从定义来看, 关系非常简单. 理解了笛卡尔积就很容易理解它. 令 A = B = R \mathbf{A} = \mathbf{B} = \mathbb{R} A=B=R, 现在来看我们常见的几个二元关系.
等 于 : = { ( x , y ) ∈ R 2 ∣ x = y } 等于 := \{(x, y) \in \mathbb{R}^2| x = y\} :={ (x,y)R2x=y}
小 于 : = { ( x , y ) ∈ R 2 ∣ x < y } 小于 := \{(x, y) \in \mathbb{R}^2| x < y\} :={ (x,y)R2x<y}
这里 : = := := 读作 “定义为”。
在平面直角坐标系中, 等于关系就是 45 度方向的一条线; 小于关系就是这条线的左上部分 (不包括它).
8 号坑: 关系的本质居然是集合, 从数学上来看简直完美, 初学者理解起来可能稍微有点不适.

3. 函数

函数有定义域和值域, 在声明一个函数的时候应该给出. 给个机器学习的例子吧.
Definition 4. Let V 1 , … , V m \mathbf{V}_1, \dots, \mathbf{V}_m V1,,Vm be the domain of conditional attribute a 1 , … , a m a_1, \dots, a_m a1,,am, respectively, and L \mathbf{L} L be the set of classes. A classifier is a function f : V 1 × ⋯ × V m → L f: \mathbf{V_1} \times \dots \times \mathbf{V_m} \rightarrow \mathbf{L} f:V1××VmL.
几点注意:
a) 函数的定义域、值域都是集合. 定义域可以是最基本的集合如 R \mathbb{R} R, 也可以是笛卡尔集, 如 Definition 4 所示, 甚至该定义中的单个属性的定义域也可以是幂集.
b) 对于函数定义域上的每个点, 均在值域中有一个唯一的点与之对之. 反之不然. 因此, 函数的逆函数不一定存在. 如果逆函数存在, 就是一一映射了.
9 号坑: 函数是否是关系呢? 令函数的定义域为 D \mathbf{D} D, 值域为 V \mathbf{V} V, 可以认为, 函数为 D × V \mathbf{D} \times \mathbf{V} D×V 的子集, 也就是一种特殊的关系. 如 x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1, 它是二维平面 R 2 \mathbb{R}^2 R2 中的一个单位圆, 为若干平面中的元素 (点) 所构成, 因此为 R \mathbb{R} R 上 (即定义域、值域均为 R \mathbb{R} R) 的二元关系. 但它不是一个函数, y = 1 − x 2 y = \sqrt{1 - x^2} y=1x2 就既是函数, 也是二元关系.
习题 5: 多标签学习中, 输出为一个向量,相应的学习器算不算函数呢?

4. 元组

我们要对数据进行建模型的时候, 元组就派上大用场了. 这里以最经典的元组为例.
Definition 5. A graph is a tuple G = ( V , E ) G = (\mathbf{V}, \mathbf{E}) G=(V,E), where V = { v 1 , … , v n } \mathbf{V} = \{v_1, \dots, v_n\} V={ v1,,vn} is the set of nodes, and E ⊆ V × V \mathbf{E} \subseteq \mathbf{V} \times \mathbf{V} EV×V is the set of edges.
10 号坑: 元组用小括号, 向量既可以用小括号,也可以用中括号. 大括号是集合专用.
元组的各个部分, 既可以是一个集合, 也可以是一个基本元素.
从数据结构的角度, 元组就是抽象数据类型; 从面向程序设计的角度, 元组就是一个类. 当我们定义一个类的时候, 它有 k k k 个成员变量, 就是 k k k 元组. 各个成员变量可以取不同的定义域, 可以是数值、字符、集合,甚至元组.
Definition 6. A decision table is a 5-tuple S = ( U , C , D , V , f ) S = (\mathbf{U}, \mathbf{C}, \mathbf{D}, \mathbf{V}, f) S=(U,C,D,V,f), where U = { x 1 , … , x n } \mathbf{U} = \{x_1, \dots, x_n\} U={ x1,,xn} is the set of instances, C = { a 1 , … , a m } \mathbf{C} = \{a_1, \dots, a_m\} C={ a1,,am} is the set of conditional attributes, D = { d 1 , … , d p } \mathbf{D} = \{d_1, \dots, d_p\} D={ d1,,dp} is the set of decisions, V = ∪ a ∈ C ∪ D V a \mathbf{V} = \cup_{a \in \mathbf{C} \cup \mathbf{D}} {V}_a V=aCDVa is set of values, and f : U × ( C ∪ D ) → V f: \mathbf{U} \times (\mathbf{C} \cup \mathbf{D}) \rightarrow \mathbf{V} f:U×(CD)V is the value mapping function.
在这里, f ( x 3 , a 5 ) f(x_3, a_5) f(x3,a5) 表示对象 x 3 x_3 x3 在属性 a 5 a_5 a5 上的取值.
习题 6: 元组只能表达对象的数据部分, 还是可以完整地表达? 用一个具体的程序来说明.


未完待续. 静等意见.

你可能感兴趣的:(数据挖掘)