枯燥乏味之离散数学集合,关系,元组,范数

1. 集合

  话不多说,先甩一张图。
在这里插入图片描述


1.1 集合定义

  由上图可知,集合通常有三种表示方法。

  • 列举法:无疑是最没有技术含量的,一股脑把集合中的元素全部写出来。如: A \Alpha A = {0, 1, 2, 3, 4, 5} 是阿拉伯数字的集合; N \Nu N = {0, 1, 2,…} 是自然数的集合;
  • 描述法:有些地方叫谓词法。如: A \Alpha A = { x x x N \Nu N | x x x mod 2 = 1};
  • 韦恩图:通常用一个圆来代表一个集合;

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

  1. c a r d card card 表示有限集 A \Alpha A 中的元素个数, c a r d card card( A \Alpha A) = 4。
  2. 在机器学习中,我们通常会用自然数表示分类任务中的标签。例如,0 通常表示第一类,1 表示第二类,依次类推。集合 A \Alpha A 通常会被用在多标签分类任务中。一个实例可能有一个或多个标签,类似于选择题中的不定项选择题。对于集合 A \Alpha A,我们可以认为它的标签数目不是固定的,有的一个标签,有的有两个标签,但是标签的总数是固定的,有 3 类。我们在标签编码时,可以使用标签补齐的方法,将缺失的标签全部用 0 标记,这样就不能使用 one-hot 编码了。例如,标签总数为 10,编号 0-9,一张图片中包含 0,3,9 号标签,那么这张图片的标签编码为:1 0 0 1 0 0 0 0 0 1。而且在多标签分类任务中,最后一层的输出就不能看成一个分布了,因为加起来不为 1,可以把输出层每个神经元看作一个二项分布,这相当于将一个多标签问题转化为在每个标签上的二分类问题。

  令 A = { 5 , 6 , 7 , 8 , 9 } \mathbf{A}=\{5,6,7,8,9\} A={5,6,7,8,9},写出 A \mathbf{A} A 的其它两种表示方法。
① 描述法: A = { x ∣ x ∈ N , 4 < x < 10 } \mathbf{A} = \{x \vert x \in \mathbf{N}, 4 < x < 10\} A={xxN,4<x<10}, 源码为 \mathbf{A} = {x \vert x \in \mathbf{N}, 4 < x < 10}。
② 枚举法: [ 5..9 ] = { 5 , 6 , 7 , 8 , 9 } [5..9] = \{5,6,7,8,9\} [5..9]={5,6,7,8,9},源码为 [5…9] = {5,6,7,8,9}.


1.2 基数

1.2.1 无穷集合比较大小

  说到基数,先提一下无穷集合比较大小。

  首先提出一个问题 “自然数的个数和正偶数的个数哪个多呢?” 有人说,当然是自然数的个数多,因为自然数包括正偶数;也有人说这两类数的个数都是无穷大,所以应该是一样多。

  这里面引出来一个很本质的问题,到底比较两个集合元素个数多少的标准是什么?虽然我们还是孩子的时候,就知道自己分了一个苹果而其他小朋友分到了两个苹果是不公平的,但是直到19世纪末,才由伟大的集合论开创者康托尔提出集合元素个数之间严格比较大小的标准。

  我们平时一般靠数数来记录一个集合元素的个数,再比较这两个数字大小来确定两个集合之间谁的元素更多,实际上这是在拿一个集合的元素去与自然数集合的元素做对应。如果某个集合中的元素能够与从小到大排列的自然数某个子集建立一一对应,那么就认为这个集合中元素的个数就是自然数子集中最大的那个数。

  再提出一个问题?下面的两条线段哪一条中包含的点更多?
          在这里插入图片描述
  我第一次看到这个问题就觉得肯定有鬼。肯定不是下面这条长,应该是一样长,但是又不知道为什么它们一样长。我的导师直接画了两条线,我就恍然大悟了。
          在这里插入图片描述
  下面那条线中的任一点总能在上面那一条线找到一一对应的点。这就是康托尔提出集合之间元素个数多少的判定标准,集合之间元素个数多少的比较,本质上在于集合间的对应(映射)。

  如果两个集合 A 和 B 之间能够建立一一对应(集合论中将这种对应叫做双射),那么就说这两个集合的元素个数一样多,记作 ∣ A ∣ |\Alpha| A = ∣ B ∣ |\Beta| B;如果能够建立 A 到 B 的单射(指每个 A 中的元素都对应一个 B 中的元素,且不同的 A 中元素对应的B中元素也不同),那么就说集合 B 的元素个数不少于 A 的元素个数,记作 ∣ A ∣ ≤ |\Alpha| \leq A ∣ B ∣ |\Beta| B ∣ B ∣ ≥ |\Beta| \geq B ∣ A ∣ |\Alpha| A

  对于元素个数有限的有限集来说,这种判定标准与日常人们熟悉的“数数”判定标准是一样的。一个有着100个元素的集合肯定能够与另外一个也有着100个元素的集合建立一一对应,但是绝不能与一个有着101个元素的集合建立起一一对应。

  设 N \Nu N = {1, 2, 3, …} 是自然数集合, E \Epsilon E = {2, 4, 6,…} 是正偶数集合, n ∈ n ∈ n N \Nu N e ∈ e ∈ e E \Epsilon E,则建立集合 N \Nu N E \Epsilon E 之间的映射 f f f N \Nu N → \to E \Epsilon E e = f ( n ) = 2 n e = f(n) = 2n e=f(n)=2n。由此我们知道了,自然数的个数与正偶数的个数是一样多的


1.2.2 基数

  有了前面关于集合元素个数比较大小的标准,我们就可以定义一个概念 —— 集合的基数。作为普及性文章,我们没有必要给出严格的基数定义,描述性的来说,

基数就是一个集合元素的个数(集合的基数有时也被叫做集合的势)。

  显然,对于有限集合来说,其基数就是这个集合的元素的个数,必然是一个自然数。但是对于无限集合来说,由于其元素个数无穷多,没有一个自然数能够表示,我们需要定义一些新的 “数”。我们首先定义自然数的个数是 ℵ₀ (这个符号来自于希伯来字母,可以读作阿列夫,自然数的个数就是阿列夫零)。显然,我们知道有理数、整数、奇数、偶数、代数数的个数都是 ℵ₀ 。

  那么问题来了,∅ 的基数是多少? { ∅ } 呢?

   c a r d ( ∅ ) card(∅) card() = 0; c a r d card card( {∅} ) = 1


1.3 笛卡尔积

  我们最常用的是笛卡尔坐标系,一维数轴可表示为 R \Bbb{R} R,二维平面可表示为 R \Bbb{R} R × \times × R \Bbb{R} R = R 2 \Bbb{R}^2 R2 n n n 维空间当然就是 R n \Bbb{R}^n Rn 了。

一维数轴上的点就是一个实数 x x x R \Bbb{R} R
二维数轴上的点就是一个实数对 ( x , y ) (x, y) (x,y) R 2 \Bbb{R}^2 R2
一维数轴上的点就是一个向量( x 1 , x 2 , . . . , x n ) x_1, x_2,..., x_n) x1,x2,...,xn) R n \Bbb{R}^n Rn

  设 A \Alpha A B \Beta B 是两个集合,称集合 A \Alpha A × \times × B \Beta B = {< x , y x, y x,y> | ( x ∈ x∈ x A \Alpha A) ∧ \wedge ( y ∈ y∈ y B \Beta B) } 为集合 A \Alpha A B \Beta B笛卡尔积

由笛卡尔积定义可以看出:

  1. A \Alpha A, B \Beta B 是任意两个集合,则不一定有 A \Alpha A × \times × B \Beta B = B \Beta B × \times × A \Alpha A,即笛卡尔积不满足交换律;
  2. A \Alpha A × \times × B \Beta B = ∅ 当且仅当 A \Alpha A = ∅ 或者 B \Beta B = ∅;
  3. A \Alpha A, B \Beta B, C C C 是任意三个集合,则不一定有 A \Alpha A × \times × ( B (\Beta (B × \times × C ) C) C) = ( A \Alpha A × \times × B \Beta B) × \times × C C C,即笛卡尔积不满足结合律;
  4. 当集合 A \Alpha A, B \Beta B 都是有限集时, ∣ A |\Alpha A × \times × B ∣ \Beta| B = ∣ B |\Beta B × \times × A ∣ \Alpha| A = ∣ A ∣ |\Alpha| A × \times × ∣ B ∣ |\Beta| B;
  5. 笛卡尔积对并运算和交运算满足分配律。

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

  说到数据集,这里介绍两种表示方法。

  1. 矩阵表示法
    当各个属性都为实型值时,数据集可表示为 D D D R n × m ) \Bbb{R}^{n \times m)} Rn×m) ,它表示每个实际的数据集,都是 n × m n \times m n×m 维空间的一个点而已。如果记 D = ( x 1 , x 2 , . . . , x n ) T D = (x_1, x_2,..., x_n)^T D=(x1,x2,...,xn)T,则 x i x_i xi R m \Bbb{R}^ m Rm;
  2. 集合与向量混合法
    D D D = { x 1 , x 2 , . . . , x n x_1, x_2,..., x_n x1,x2,...,xn},则 x i x_i xi R m \Bbb{R}^ m Rm;

优缺点

  1. 集合与向量混合法中,元素可以随意交换顺序,这与现实数据的独立性一致。
  2. 集合与向量混合法中,不允许两个元素相同,这与现实情况不一致。
  3. 矩阵表示法可以支持矩阵的相乘,,易于表示加权等操作,,用于神经网络, 线性回归时方便。

注意:在机器学习中,经常用一个列向量表示一个实例。


1.4 幂集

  设 A \Alpha A 为任意集合,以 A \Alpha A 的子集为元素所组成的集合,称为 A \Alpha A 的幂集。

P ( A ) = P(\Alpha) = P(A)= { x ∣ x | x x ⊆ A x \subseteq \Alpha xA}; 若 ∣ A ∣ |\Alpha| A = n n n,则 ∣ P ( A ) ∣ = |P(\Alpha)| = P(A)= 2 n 2^n 2n


举例:
P ( ∅ ) P(\emptyset) P() = { ∅ \emptyset }
P P P({ ∅ \emptyset }) = { ∅ \emptyset , { ∅ \emptyset }}
P P P({1, {2, 3}}) = { ∅ \emptyset , {1}, {2,3}, {1, {2, 3}}}
④ 令 A = { 3 , 5 } \mathbf{A}=\{3,5\} A={3,5}, P ( A ) P(A) P(A) = { ∅ \emptyset , {3}, {5}, {3,5}}

  幂集不仅限于有穷集,对于任意无穷集也有效。


2. 二元关系

  二元关系的数学定义:Let A \mathbf{A} A and B \mathbf{B} B be sets. Any R ⊆ \mathbf{R} \subseteq R A × B \mathbf{A} \times \mathbf{B} A×B is called a binary relation.

  其实不用想得太复杂,关系就是关系。比如,1 < 2 是二元关系,我爱学习也是二元关系。我认为如果两个东西之间有联系,并且说明了联系的方式,那就可以称之为关系。

  另外,两个集合的笛卡尔积是遍历了所有的 “对”,之所以是子集是因为上述 “联系的描述” 可能对某些对有效,对某些对无效。

  在平面直角坐标系中, 等于关系就是 45 度方向的一条线 ( x = y x = y x=y);小于关系就是这条线的左上部分 ( x < y x < y x<y);同理,大于关系就是这条线的右下部分 ( x > y x > y x>y)。如果 A \mathbf{A} A = B \mathbf{B} B = N \mathbb{N} N,即它们都为整数集合,则 R = \mathbf{R}^= R= = {(0, 0), (1, 1), (2, 2), … \dots };如果 A \mathbf{A} A = B \mathbf{B} B = R \mathbb{R} R,则 R < \mathbf{R}^< R< = { ( x , y ) ∈ R 2 ∣ x < y (x, y) \in \mathbb{R}^2 \vert x < y (x,y)R2x<y},在二维平面上,它表示 y = x y=x y=x 左上方向的区域。

二元关系的性质。对于 A \mathbf{A} A 的关系,即 R ⊆ A × A \mathbf{R} \subseteq \mathbf{A} \times \mathbf{A} RA×A.
①自反性:如果 ∀ x ∈ A \forall x \in \mathbf{A} xA,均有 ( x , x ) ∈ R (x, x) \in \mathbf{R} (x,x)R,则称 R \mathbf{R} R 具有自反性。
② 对称性:如果 ∀ ( x , y ) ∈ R \forall (x, y) \in \mathbf{R} (x,y)R,均有 ∀ ( y , x ) ∈ R \forall (y, x) \in \mathbf{R} (y,x)R,则称 R \mathbf{R} R 具有对称性。
③ 传递性:如果 ∀ ( x , y ) , ( y , z ) ∈ R \forall (x, y), (y, z) \in \mathbf{R} (x,y),(y,z)R,均有 ( x , z ) ∈ R (x, z) \in \mathbf{R} (x,z)R,则称 R \mathbf{R} R 具有传递性。

二元关系的运算
给定 A = { a , b , c , d } \mathbf{A} = \{a, b, c, d\} A={a,b,c,d} 上的关系 R 1 = { ( a , b ) , ( a , c ) } \mathbf{R}_1 = \{(a, b), (a, c)\} R1={(a,b),(a,c)} R 2 = { ( a , b ) , ( c , d ) , ( b , d ) } \mathbf{R}_2 = \{(a, b), (c, d), (b, d)\} R2={(a,b),(c,d),(b,d)},则 R 1 R 2 \mathbf{R}_1\mathbf{R}_2 R1R2 = { ( a , d ) (a, d) (a,d)},这个有点像矩阵维度相乘(3x2 的矩阵与 2x4 的矩阵得 3x4 的矩阵),中间得有个媒介。
或者 R 1 R 2 \mathbf{R}_1\mathbf{R}_2 R1R2 = { ( x , y ) ∣ ∃ ( x , z ) ∈ R 1  and  ( z , y ) ∈ R 2 (x, y) \vert \exists(x, z) \in \mathbf{R}_1 \textrm{ and } (z, y) \in \mathbf{R}_2 (x,y)(x,z)R1 and (z,y)R2}.

给定 A = { a , b , c , d } \mathbf{A} = \{a, b, c, d\} A={a,b,c,d} 上的关系 R \mathbf{R} R
① 正闭包: R + = ⋃ i = 1 ∣ A ∣ R i \mathbf{R}^+ = \bigcup_{i=1}^{|\mathbf{A}|} \mathbf{R}^i R+=i=1ARi.
② 克林闭包: R ∗ = R + ∪ A 0 \mathbf{R}^* = \mathbf{R}^+ \cup \mathbf{A}^0 R=R+A0,其中 A 0 = { ( x , x ) ∣ x ∈ A } \mathbf{A}^0 = \{(x, x) \vert x \in \mathbf{A}\} A0={(x,x)xA}

练一练:

  1. A = { 1 , 2 , 5 , 8 , 9 } \mathbf{A} = \{1, 2, 5, 8, 9\} A={1,2,5,8,9},写出 A \mathbf{A} A 上的 “模2同余” 关系及相应的划分。

R = { ( a , b ) ∈ A × A ∣ a  mod  2 = b  mod  2 } \mathbf{R} = \{(a, b) \in \mathbf{A} \times \mathbf{A} \vert a \textrm{ mod } 2 = b \textrm{ mod } 2\} R={(a,b)A×Aa mod 2=b mod 2}.
可将其划分为:
P = { { 2 , 8 } , { 1 , 5 , 9 } } \mathcal{P} = \{\{2, 8\}, \{1, 5, 9\}\} P={{2,8},{1,5,9}}

  1. 给定 A = { 1 , 2 , 5 , 8 , 9 } \mathbf{A} = \{1, 2, 5, 8, 9\} A={1,2,5,8,9} 上的关系 R 1 = { ( 1 , 2 ) , ( 5 , 8 ) } \mathbf{R}_1 = \{(1, 2), (5, 8)\} R1={(1,2),(5,8)} R 2 = { ( 2 , 8 ) , ( 8 , 9 ) , ( 2 , 5 ) } \mathbf{R}_2 = \{(2, 8), (8, 9), (2, 5)\} R2={(2,8),(8,9),(2,5)},则

R 1 R 2 \mathbf{R}_1\mathbf{R}_2 R1R2 = { ( 1 , 8 ) , ( 1 , 5 ) , ( 5 , 9 ) } \{(1, 8), (1, 5), (5, 9)\} {(1,8),(1,5),(5,9)}.
R 1 + \mathbf{R}_1^+ R1+ = ⋃ i = 1 i R i \bigcup_{i=1}^i \mathbf{R}_i i=1iRi = { ( 1 , 2 ) , ( 5 , 8 ) } \{(1, 2), (5, 8)\} {(1,2),(5,8)}.
R 1 ∗ \mathbf{R}_1^* R1 = R 1 + ⋃ A 0 \mathbf{R}_1^+\bigcup \mathbf{A^0} R1+A0 = { ( 1 , 2 ) , ( 5 , 8 ) , ( 1 , 1 ) , ( 2 , 2 ) , ( 5 , 5 ) , ( 8 , 8 ) } \{(1, 2), (5, 8), (1, 1), (2, 2), (5, 5), (8, 8)\} {(1,2),(5,8),(1,1),(2,2),(5,5),(8,8)}.


3. 函数

  函数也叫映射、变换或对应。但是我们需要区别函数与方程的区别以及与关系的区别。

  函数定义:设 f f f 是集合 A \Alpha A B \Beta B 的关系,如果对每个 x ∈ A x ∈ \Alpha xA,都存在唯一的 y ∈ B y ∈ \Beta yB,使得 < x , y x, y x,y> ∈ f f f,则称关系 f f f A \Alpha A B \Beta B 的函数,记作 f f f: A → B \Alpha \to \Beta AB A \Alpha A 为函数 f f f 的定义域, f ( A ) f(\Alpha) f(A) 为函数 f f f 的值域。

注意

  1. f ( x ) f(x) f(x) 表示一个变值, f f f 代表一个集合。因此 f ≠ f ( x ) f \neq f(x) f=f(x)
  2. f ( x ) f(x) f(x) B \Beta B 的子集,即 B \Beta B 中有些元素跟 A \Alpha A 不对应也可以。
  3. 如果存在元素 a ∈ A a ∈ \Alpha aA,在 B \Beta B 中没有对应元素,那么关系 f f f 就不是函数。
  4. 如果存在元素 a ∈ A a ∈ \Alpha aA,在 B \Beta B 中有两个或两个以上对应的元素,那么关系 f f f 就不是函数。

辨别函数与方程:从本质上,方程就是一个等式,而函数是一个对应关系。

辨别函数与关系的联系与区别

  1. 在离散数学中,函数可以看作是一种特殊的二元关系
  2. A \Alpha A B \Beta B 的不同的关系有 2| A \Alpha A|| B \Beta B|个,但从 A \Alpha A B \Beta B 不同的函数却只有 | A \Alpha A|| B \Beta B| 个。(每个 B \Beta B 中的元素都可以有 ∣ A ∣ |\Alpha| A A \Alpha A 中元素匹配)。
  3. 关系的第一个元素可以相同;函数的第一个元素一定是互不相同的。

  举个栗子,令函数的定义域为 D D D, 值域为 V V V,可以认为函数 D × V D \times V D×V 的子集,也就是一种特殊的关系。如 x 2 + y 2 = 1 x^2 + y^2 = 1 x2+y2=1,它是二维平面 R 2 \Bbb{R}^2 R2 中的一个单位圆,为若干平面中的元素 (点) 所构成, 因此为 R \Bbb{R} R 上(即定义域、值域均为 R \Bbb{R} R)的二元关系。但它不是一个函数。 y = 1 − x 2 y = \sqrt{1 - x^2} y=1x2 就既是函数,也是二元关系。

  在机器学习中,单标签任务学习器可以看做一个函数(毫无疑问)。对于多标签分类器,一个实例 x x x 虽然同时拥有多个标签,但是可以把多个标签看作一个标签组合,每个实例对应的标签组合是唯一的,所以多标签分类器仍然是一个函数。

举例说明你对函数的认识。.
  我们先从理解最简单地例子开始: f ( x ) = x + 1 f (x) = x + 1 f(x)=x+1 给定一个 x x x 的值,那么右边的式子的值为 2,那么 f ( x ) f(x) f(x) 就是2。 f f f 就是连接1 和 2 的一个函数。 f f f 除了连接1 和 2 的关系,也同时可以连接 1.1 和 2.1 等等。

  但是你以为你见到上面的例子就理解函数概念了么?没有! 比方说你知道西瓜是绿色的,也是圆的。但是给你一个绿色的圆的东西,你就能一定知道是西瓜么?不行!所以你必须多看不同种类的西瓜,也看看冬瓜,南瓜这种相似的物种,然后你西瓜的概念就清晰起来。函数的种类是很多的,可以是用式子表示,也可以用图表表示。广义一点,输入可以是数,也可以是任何东西。我可以说函数 f ( x ) f(x) f(x) = “智商的大小”,x表示人。那么 f f f 就相当于给出对应每个人,即 x x x 的智商大小。函数(英文:function),实际就是一种关系的连接,数学上称之为映射。也就是说如果你要用非数学的语言,给一个完全不懂数学概念的人讲解函数,那么就给出各种对应关系。慢慢的他脑中就会模模糊糊有一种感觉,好像这样子就是一个函数。如果真让他说什么是函数,那就说不出来。

  这时候定义就有用了!我们再回顾下函数的概念。“给定一个数集 A \mathbf{A} A,对 A \mathbf{A} A 施加对应法则 f f f,记作 f ( A ) f(\mathbf{A}) f(A),得到另一数集 B \mathbf{B} B,也就是 B = f ( A ) \mathbf{B} = f(\mathbf{A}) B=f(A).那么这个关系式就叫函数关系式,简称函数。

  下图能在你理解了函数基础上更加强你的理解。

                在这里插入图片描述


4. 元组(tuple)

  百度百科中提到。元组是关系库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。在二维表中,元组也称为行或记录。

  但是离散数学中的元组又与之不同,图(Graph)是最经典的元组,图可分为有向图和无向图。图的数学定义如下:

(1)A directed graph is a tuple G d = ( V , E ) G_d = (\bm{V}, \bm{E}) Gd=(V,E), where V \bm{V} V = { v 1 , … , v n v_1, \dots, v_n v1,,vn} is the set of nodes, and E ⊆ V × V \bm{E} \subseteq \bm{V} \times \bm{V} EV×V is the set of edges.
(2)A undirected graph is a tuple G u = ( V , E ) G_u = (\bm{V}, \bm{E}) Gu=(V,E), where V \bm{V} V = { v 1 , … , v n v_1, \dots, v_n v1,,vn} is the set of nodes, and E ⊆ V × V \bm{E} \subseteq \bm{V} \times \bm{V} EV×V is the set of edges, and $\langle v_i, v_j \rangle ∈ \bm{E} iff ⟨ v j , v i ⟩ ∈ E \langle v_j, v_i \rangle ∈ \bm{E} vj,viE.
iff 是 if and only if (当且仅当) 的缩写, 更多细节参考 mf 的博客

  图又可以根据是否有权值分为带权有向图和带权无向图。其数学定义如下:

(1)A weighted directed graph is a tuple G w d = ( V , w ) G_{wd} = (\bm{V}, w) Gwd=(V,w), where V \bm{V} V = { v 1 , … , v n v_1, \dots, v_n v1,,vn} is the set of nodes, and w : V × V → R + ∪ w: \bm{V} \times \bm{V} \to \Bbb{R}^+ \cup w:V×VR+ { 0 0 0} is the edge weight function.
(2)A weighted undirected graph is a tuple G w u = ( V , w ) G_{wu} = (\bm{V}, w) Gwu=(V,w), where V \bm{V} V = { v 1 , … , v n v_1, \dots, v_n v1,,vn} is the set of nodes, and w : V × V → R + ∪ w: \bm{V} \times \bm{V} \to \Bbb{R}^+ \cup w:V×VR+ { 0 0 0} is the edge weight function, and w ( v i , v j ) w(v_i, v_j) w(vi,vj) = w ( v j , v i ) w(v_j, v_i) w(vj,vi).

  元组的数学定义请参考 mf 的博客 的 Definition 6.

  以 Python 为例。元组也是一种序列,元组使用小括号表示,元素中各元素之间用逗号隔开。元组不支持修改或删除其所包含的元素。这也是与列表最本质的区别,列表是动态数组,如果想要修改元组中的元素,可先将其转换成列表。

  C++中也引入了元组 tuple, 可以定义任意多个类型的对象的组合,下面是 C++ tuple 的栗子。

#include <iostream>  
#include <vector>  
#include <string>  
#include <tuple>  
  
using namespace std;  
  
std::tuple<std::string, int>  
giveName(void)  
{  
    std::string cw("Caroline");  
    int a(2013);  
    std::tuple<std::string, int> t = std::make_tuple(cw, a);  
    return t;  
}  
  
int main()  
{  
    std::tuple<int, double, std::string> t(64, 128.0, "Caroline");  
    std::tuple<std::string, std::string, int> t2 =  
            std::make_tuple("Caroline", "Wendy", 1992);  
  
    //返回元素个数  
    size_t num = std::tuple_size<decltype(t)>::value;  
    std::cout << "num = " << num << std::endl;  
  
    //获取第1个值的元素类型  
    std::tuple_element<1, decltype(t)>::type cnt = std::get<1>(t);  
    std::cout << "cnt = " << cnt << std::endl;  
  
    //比较  
    std::tuple<int, int> ti(24, 48);  
    std::tuple<double, double> td(28.0, 56.0);  
    bool b = (ti < td);  
    std::cout << "b = " << b << std::endl;  
  
    //tuple作为返回值  
    auto a = giveName();  
    std::cout << "name: " << get<0>(a)  
            << " years: " << get<1>(a) << std::endl;  
  
    return 0;  
} 

输出结果:

num = 3  
cnt = 128  
b = 1  
name: Caroline years: 2013  

5. 范数

给定矩阵 X = [ x i j ] n × m \mathbf{X} = [x_{ij}]_{n \times m} X=[xij]n×m,其 l p l_p lp 范数定义为

∥ X ∥ p = ( ∑ i j ∣ x i j ∣ p ) 1 p (1) \|\mathbf{X}\|_p = \left (\sum_{ij} \vert x_{ij} \vert ^p \right)^{\frac{1}{p} \tag{1}} Xp=(ijxijp)p1(1)

源码:|\mathbf{X}|p = \left (\sum{ij} \vert x_{ij} \vert ^p \right)^{\frac{1}{p} \tag{1}}

5.1 l 0 l_0 l0 范数

计算非零项个数。

∥ X ∥ 0 = ∣ { ( i , j ) ∣ x i j ≠ 0 } \|\mathbf{X}\|_0 = \vert \{(i, j) \vert x_{ij} \neq 0\} X0={(i,j)xij=0}

5.2 l 1 l_1 l1 范数

计算绝对值之和。

∥ X ∥ 1 = ∑ i j ∣ x i j ∣ \|\mathbf{X}\|_1 = \sum_{ij} \vert x_{ij} \vert X1=ijxij

5.3 l 2 l_2 l2 范数

计算平方和。

∥ X ∥ 2 2 = ∑ i j x i j 2 \|\mathbf{X}\|_2^2 = \sum_{ij} x_{ij}^2 X22=ijxij2

5.4 l ∞ l_\infty l 范数

∥ X ∥ ∞ = max ⁡ i j ∣ x i j ∣ \|\mathbf{X}\|_\infty = \max_{ij} \vert x_{ij} \vert X=ijmaxxij
∥ X ∥ − ∞ = min ⁡ i j ∣ x i j ∣ \|\mathbf{X}\|_-\infty = \min_{ij} \vert x_{ij} \vert X=ijminxij

源码:||\mathbf{X}||{\infty} = \max{i, j} \vert x_{ij} \vert \tag{6}.

题目:假设矩阵 A \mathbf{A} A,计算各个范数。

[ 1 0 2 3 − 1 − 3 ] \left[ \begin{matrix} 1 & 0 & 2 \\ 3 & -1 & -3 \end{matrix} \right] [130123]

l 0 l_0 l0 = 5;
l 1 l_1 l1 = 1 + 2 + 3 + 1 + 3 = 13;
l 2 = 1 + 4 + 9 + 1 + 9 = 24 = 2 6 l_2 = \sqrt{1 + 4 + 9 + 1 + 9} = \sqrt{24} = 2\sqrt{6} l2=1+4+9+1+9 =24 =26 ;
l ∞ l_\infty l = 3;
l − ∞ l_{-\infty} l = 0;

原文链接:向量/矩阵的范数


6. min 与 argmin

原文链接: 7. min 与 argmin

  min 即获得集合中的最小值,argmin 即获取函数取最小值时的参数

  在基于用户、商品信息的评分预测任务中,有评分矩阵 R \mathbf{R} R,用户信息表 X = [ x 1 , … , x n ] T = [ x i j ] n × d u \mathbf{X} = [\mathbf{x}_1, \dots, \mathbf{x_n}]^\mathrm{T} = [x_{ij}]_{n \times d_u} X=[x1,,xn]T=[xij]n×du,商品信息表 T = [ t 1 , … , t m ] T = [ t i j ] m × d t \mathbf{T} = [\mathbf{t}_1, \dots, \mathbf{t_m}]^\mathrm{T} = [t_{ij}]_{m \times d_t} T=[t1,,tm]T=[tij]m×dt,其中 d u d_u du 是用户的属性数, d t d_t dt 是商品属性数。输出函数 f : R d u × R d t → R f: R^{d_u} \times R^{d_t} \to R f:Rdu×RdtR
有以下优化目标:
min ⁡ ∑ ( i , j ) ∈ Ω ( f ( x i , t i ) − r i j ) 2 \min \sum_{(i,j) \in \Omega} \left(f(\mathbf{x}_i, \mathbf{t}_i ) - r_{ij} \right)^2 min(i,j)Ω(f(xi,ti)rij)2

  其中对象个数为 ∣ Ω ∣ \vert \Omega \vert Ω,条件属性个数为 d u + d t d_u + d_t du+dt,该优化函数使用 l 2 l_2 l2 范数, r i j r_{ij} rij 为真实的评分, f ( x i , t i ) f(\mathbf{x}_i, \mathbf{t}_i) f(xi,ti) 为预测的评分,其优化目标就是最小化预测评分和实际评分的差值和的平方。


  想了解更专业的离散数学集合、关系、元组相关概念,请移步 minfanphd的博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值