第一天:
1.6描述你在学习、使用数学表达式时的困难, 可举例说明.
在看公式比较多的论文时,数学公式表达的准确与否和是否规范难严重影响我们的理解能力,再加上自身的数学功底问题,会经常遇到看不懂的数学公式。久而久之会产生对论文中的数学表达式产生“畏惧”的心态,导致看不下去文献,领会不了文章的主要思想。因此,从头专门学习论文写作数学表达式是很有必要的,也可以重新复习一遍数学知识。
2.6令A={3,5},写出
2
A
2^{\mathbf{A}}
2A
2
A
=
{
∅
,
{
3
}
,
{
5
}
,
{
3
,
5
}
}
2^{\mathbf{A}}= \{ \emptyset ,\{3\},\{5\},\{3,5\}\}
2A={∅,{3},{5},{3,5}}
展开
2
∅
2^{\mathbf{\emptyset}}
2∅
2
∅
=
{
∅
}
2^{\mathbf{\emptyset}}=\{ \emptyset\}
2∅={∅}
令
A
=
{
5
,
6
,
7
,
8
,
9
}
\mathbf{A} = \{5, 6, 7, 8, 9\}
A={5,6,7,8,9},写出
A
\mathbf{A}
A 的其它两种表示法.
A
=
{
5
,
6
,
…
,
9
}
\mathbf{A} = \{5, 6, \dots,9\}
A={5,6,…,9}
A
=
[
5
,
9
]
\mathbf{A} = [5, 9]
A=[5,9]
3.3自己出数据, 做一个
3
×
2
3\times2
3×2 与
2
×
4
2\times4
2×4 与的矩阵乘法.
[
1
1
2
2
3
3
]
×
[
1
2
3
1
4
5
6
1
]
=
[
5
7
9
2
10
14
18
4
15
21
27
6
]
\left [\begin{array}{ccc} 1 & 1 \\ 2 & 2 \\ 3 & 3 \end{array}\right] \times\left [\begin{array}{ccc} 1 & 2 & 3 & 1 \\ 4 & 5 & 6 & 1 \end{array}\right]=\left [\begin{array}{ccc} 5 & 7 & 9 & 2 \\ 10 & 14 & 18 & 4 \\ 15 & 21 & 27& 6 \end{array}\right]
⎣⎡123123⎦⎤×[14253611]=⎣⎡510157142191827246⎦⎤
第二天:
4.6作业
原文链接
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
⟩
∈
R
∣
a
m
o
d
2
=
b
m
o
d
2
}
\mathbf{R} = \{\langle a, b \rangle \in \mathbb{R} \vert a \mod 2 = b \mod 2\}
R={⟨a,b⟩∈R∣amod2=bmod2}.
R
=
{
{
1
,
5
}
,
{
1
,
9
}
,
{
5
,
9
}
,
{
2
,
8
}
}
\mathbf{R} =\{\{1, 5\},\{1, 9\}, \{5, 9\},\{2, 8\}\}
R={{1,5},{1,9},{5,9},{2,8}}
2.
A
=
{
1
,
2
,
5
,
8
,
9
}
\mathbf{A} = \{1, 2, 5, 8, 9\}
A={1,2,5,8,9}, 自己给定两个关系
R
1
\mathbf{R_1}
R1 和
R
2
\mathbf{R_2}
R2 , 并计算
R
1
R
2
\mathbf{R_1}\mathbf{R_2}
R1R2 ,
R
1
+
\mathbf{R_1^+}
R1+,
R
1
∗
\mathbf{R_1^*}
R1∗.
R
1
=
{
(
1
,
5
)
,
(
5
,
8
)
}
,
R
2
=
{
(
5
,
9
)
,
(
2
,
8
)
}
\mathbf{R_1}=\{(1,5),(5,8)\},\mathbf{R_2}=\{(5,9),(2,8)\}
R1={(1,5),(5,8)},R2={(5,9),(2,8)}
R
1
R
2
=
{
(
1
,
9
)
}
\mathbf{R_1}\mathbf{R_2}=\{(1,9)\}
R1R2={(1,9)}
正闭包:
R
+
=
⋃
i
=
1
∣
R
∣
R
i
\mathbf{R^+} = \bigcup_{i = 1}^{\vert \mathbf{R} \vert} \mathbf{R^i}
R+=⋃i=1∣R∣Ri
R
1
+
=
{
(
1
,
5
)
,
(
1
,
8
)
,
(
5
,
8
)
}
\mathbf{R_1^+}=\{(1,5),(1,8),(5,8)\}
R1+={(1,5),(1,8),(5,8)}
克林闭包:
R
∗
=
R
+
∪
R
0
\mathbf{R^ * }= \mathbf{R^ +} \cup \mathbf{R^ 0}
R∗=R+∪R0, 其中
R
0
=
{
(
x
,
x
)
∣
x
∈
R
0
}
\mathbf{R}^0 = \{(x, x) \vert x \in \mathbf{R_0}\}
R0={(x,x)∣x∈R0}
R
1
∗
=
{
(
1
,
5
)
,
(
1
,
8
)
,
(
5
,
8
)
,
(
1
,
1
)
,
(
2
,
2
)
,
(
5
,
5
)
,
(
8
,
8
)
,
(
9
,
9
)
}
\mathbf{R_1^ *}=\{(1,5),(1,8),(5,8),(1,1),(2,2),(5,5),(8,8),(9,9)\}
R1∗={(1,5),(1,8),(5,8),(1,1),(2,2),(5,5),(8,8),(9,9)}
3.查阅粗糙集上下近似的定义并大致描述.
下面讨论上下近似的概念。假设给定了一个
A
\mathbf{A}
A上的子集合
X
=
{
x
2
,
x
5
,
x
7
}
\mathbf{X}=\{x_2,x_5,x_7\}
X={x2,x5,x7},那么用知识库中的知识应该怎样描述它呢?无论是单属性知识还是由几个知识进行交、并运算合成的知识,都不能得到这个新的集合
X
\mathbf{X}
X,也就是在所有的现有知识里面找出跟他最像的两个一个作为下近似,一个作为上近似。可以选择“蓝色的大方块或者蓝色的小圆形”这个概念:
{
x
5
,
x
7
}
\{x_5,x_7\}
{x5,x7}作为
X
\mathbf{X}
X的下近似。选择“三角形或者蓝色的”
{
x
1
,
x
2
,
x
5
,
x
7
,
x
8
}
\{x_1,x_2,x_5,x_7,x_8\}
{x1,x2,x5,x7,x8}作为上近似,值得注意的是,下近似集是在那些所有的包含于
X
\mathbf{X}
X的知识库中的集合中求交得到的,而上近似则是将那些包含
X
\mathbf{X}
X的知识库中的集合求并得到的。
5.5 作业
原文链接
举例说明你对函数的认识.
从英语原词function来理解,函数就是一个实现某种功能的工具(盒子),用图表示会更加直观:
6.5 作业
原文链接
自己给定一个矩阵并计算其各种范数
对于矩阵:
[
1
1
2
2
]
\left[\begin{array}{ll} 1 & 1 \\ 2 & 2 \end{array}\right]
[1212]
l
0
范
数
:
∣
∣
X
∣
∣
0
=
4
l_0范数: ||\mathbf{X}||_0=4
l0范数:∣∣X∣∣0=4. 语义: 非零项个数.
l
1
范
数
:
∣
∣
X
∣
∣
1
=
1
+
1
+
2
+
2
=
6
l_1范数: ||\mathbf{X}||_1=1+1+2+2=6
l1范数:∣∣X∣∣1=1+1+2+2=6. 语义: 绝对值之和,常用于计算绝对误差.
l
2
范
数
:
∣
∣
X
∣
∣
2
=
1
2
+
1
2
+
2
2
+
2
2
=
3.162
l_2范数: ||\mathbf{X}||_2=\sqrt{1^2+1^2+2^2+2^2}=3.162
l2范数:∣∣X∣∣2=12+12+22+22=3.162. 语义: 平方和,常用于计算平方误差.
7.3 作业
原文链接
解释 推荐系统: 问题、算法与研究思路 2.1 中的优化目标
min
∑
(
i
,
j
)
∈
Ω
(
f
(
x
i
,
t
j
)
−
r
i
j
)
2
\min\displaystyle\sum_{(i,j)\in\Omega}(f(\mathbf{x}_i, \mathbf{t}_j)-r_{ij})^2
min(i,j)∈Ω∑(f(xi,tj)−rij)2
各符号及含义.
x
i
\mathbf{x}_i
xi 表示用户
i
i
i 的信息,
t
j
\mathbf{t}_j
tj表示商品
j
j
j的信息,
r
i
j
r_{ij}
rij 表示用户
i
i
i 对商品
j
j
j的浏览情况,
r
i
j
r_{ij}
rij=0表示浏览过,
r
i
j
r_{ij}
rij=1表示未浏览过,
n
n
n个用户对
m
m
m个商品的浏览情况组成评分表
R
=
(
r
i
j
)
n
×
m
\mathbf{R} = (r_{ij}) _{n\times m}
R=(rij)n×m,
Ω
\Omega
Ω代表评分表
R
\mathbf{R}
R中非零元素对应的位置集合,函数
f
:
R
d
u
×
R
d
t
→
R
f: R^{d_u} \times R^{ d_t} \rightarrow R
f:Rdu×Rdt→R为要学习的目标。
优化目标为最小化训练集上的 MSE,使得
f
(
x
i
,
t
j
)
f(\mathbf{x}_i, \mathbf{t}_j)
f(xi,tj)与
r
i
j
r_{ij}
rij平均差距尽可能小,学习到能够根据用户和商品信息来预测浏览情况的函数,为用户推荐喜欢的商品。
第三天:
8.4 作业
原文链接
1.将向量下标为偶数的分量 (x2, x4, …) 累加, 写出相应表达式.
∑
i
=
2
,
4
,
…
x
i
\displaystyle\sum_{i=2,4,\dots}xi
i=2,4,…∑xi
2.各出一道累加、累乘、积分表达式的习题, 并给出标准答案.
计算:
1
+
2
+
⋯
+
10
1 + 2 + \dots + 10
1+2+⋯+10
∑
i
=
1
10
i
=
55
\sum_{i = 1}^{10} i=55
∑i=110i=55
计算:
1
×
2
×
⋯
×
10
1 \times 2 \times\dots\times10
1×2×⋯×10
∏
i
=
1
10
i
=
3628800
\prod_{i = 1}^{10} i=3628800
∏i=110i=3628800
计算:
∫
0
10
x
2
+
x
+
1
d
x
=
1180
/
3
\int_{0}^{10} x^2 + x + 1 \mathrm{d}x=1180/3
∫010x2+x+1dx=1180/3
3.你使用过三重累加吗? 描述一下其应用.
没使用过,但据说可以用来求时间复杂度。
4.给一个常用的定积分, 将手算结果与程序结果对比
计算:
∫
0
10
x
+
1
d
x
=
60
\int_{0}^{10} x + 1 \mathrm{d}x=60
∫010x+1dx=60
代码:
double integration = 0;
double delta = 0.01;
for (int x = 0; x <= 10; x += delta)
integeration += (x + 1) * delta;
运行结果:60.06
9.3 作业
原文链接
自己写一个小例子,来验证最小二乘法.
%原始数据
X=[163 123 150 123 141];
Y=[186 126 172 125 148];
n=5; %一共5个变量
x2=sum(X.^2); % 求Σ(xi^2)
x1=sum(X); % 求Σ(xi)
x1y1=sum(X.*Y); % 求Σ(xi*yi)
y1=sum(Y); % 求Σ(yi)
a=(n*x1y1-x1*y1)/(n*x2-x1*x1); %解出直线斜率b=(y1-a*x1)/n
b=(y1-a*x1)/n; %解出直线截距
%作图
% 先把原始数据点用蓝色十字描出来
figure
plot(X,Y,'+');
hold on
% 用红色绘制拟合出的直线
px=linspace(120,165,45);
py=a*px+b;
plot(px,py,'r');
结果 a=1.5555 b=-66.365
10.6 作业
原文链接
自己推导一遍Logistic回归, 并描述这个方法的特点 (不少于 5 条).
分割超平面
线性分类模型的目标, 是找到一个超平面, 把正例、负例分割.
问题: 如何评价每个超平面的性能?
方案之一, 是最小化错分对象的数量, 但如果多个超平面都满足条件怎么办?
哪个超平面是最优的, 就体现不同算法的设计理念.
方案方二, 就是根据每个对象到超平面的距离, 来计算其损失. 如果正确分类, 则离超平面越远越好; 如果错误分类, 则离超平面越近越好.
点到直线的距离
在m 维空间上, m 维向量
w
\mathbf{w}
w 确定了一条直线.
为方便起见, 令
w
\mathbf{w}
w 为列向量.
点
x
\mathbf{x}
x 与
w
\mathbf{w}
w 的距离为
x
w
\mathbf{xw}
xw
这个距离带符号. 正号代表
x
\mathbf{x}
x 在
w
\mathbf{w}
w的某一边, 负号则表示另一边.
参见《高等数学》.
sigmoid 函数
x
\mathbf{x}
x到超平面的距离 (带符号) 取值范围为
(
−
∞
,
+
∞
)
(-\infty, +\infty)
(−∞,+∞), 希望将其转成概率.
如果距离为负而且离超平面很远, 则它为正例的概率就接近 0;
如果距离为正而且离超平面很远, 则它为正例的概率就接近 1.
使用 sigmoid 函数将距离转成 (我们以为的) 概率
p
(
y
=
1
∣
x
;
w
)
=
1
1
+
e
−
x
w
p(y = 1 \vert \mathbf{x}; \mathbf{w}) = \frac{1}{1 + e^{-\mathbf{xw}}}
p(y=1∣x;w)=1+e−xw1
优化目标
统一
y
i
y_i
yi不同取值 (0 或 1)
arg
max
w
L
(
w
)
=
∏
i
=
1
n
p
(
y
i
∣
x
i
;
w
)
\displaystyle\arg\max_wL(\mathbf{w})=\prod_{i = 1}^{n}p(y_i \vert \mathbf{x}_i; \mathbf{w})
argwmaxL(w)=i=1∏np(yi∣xi;w)
求解
相乘计算困难, 将其求一个对数, 不改变单调性
log
L
(
w
)
=
∑
i
=
1
n
log
P
(
y
i
∣
x
i
;
w
)
\log L(\mathbf{w}) = \sum_{i = 1}^n \log P(y_i \vert \mathbf{x}i; \mathbf{w})
logL(w)=∑i=1nlogP(yi∣xi;w)
=
∑
i
=
1
n
y
i
log
P
(
y
i
=
1
∣
x
i
;
w
)
+
(
1
−
y
i
)
log
(
1
−
P
(
y
i
=
1
∣
x
i
;
w
)
)
= \sum{i = 1}^n y_i \log P(y_i = 1 \vert \mathbf{x}_i; \mathbf{w}) + (1 - y_i) \log(1 - P(y_i = 1 \vert \mathbf{x}i; \mathbf{w}))
=∑i=1nyilogP(yi=1∣xi;w)+(1−yi)log(1−P(yi=1∣xi;w))
=
∑
i
=
1
n
y
i
log
P
(
y
i
=
1
∣
x
i
;
w
)
1
−
P
(
y
i
=
1
∣
x
i
;
w
)
+
log
(
1
−
P
(
y
i
=
1
∣
x
i
;
w
)
)
= \sum{i = 1}^n y_i \log \frac{P(y_i = 1 \vert \mathbf{x}_i; \mathbf{w})}{1 - P(y_i = 1 \vert \mathbf{x}_i; \mathbf{w})} + \log (1 - P(y_i = 1 \vert \mathbf{x}i; \mathbf{w}))
=∑i=1nyilog1−P(yi=1∣xi;w)P(yi=1∣xi;w)+log(1−P(yi=1∣xi;w))
=
∑
i
=
1
n
y
i
x
i
w
−
log
(
1
+
e
x
i
w
)
= \sum{i = 1}^n y_i \mathbf{x}_i \mathbf{w} - \log (1 + e^{\mathbf{x}_i \mathbf{w}})
=∑i=1nyixiw−log(1+exiw)
对
w
\mathbf{w}
w求偏导
∂
log
L
(
w
)
∂
w
=
∑
i
=
1
n
y
i
x
i
−
e
x
i
w
1
+
e
x
i
w
x
\frac{\partial \log L(\mathbf{w})}{\partial \mathbf{w}} = \sum_{i = 1}^n y_i \mathbf{x}_i - \frac{e^{\mathbf{x}_i \mathbf{w}}}{1 + e^{\mathbf{x}_i \mathbf{w}}} \mathbf{x}
∂w∂logL(w)=∑i=1nyixi−1+exiwexiwx
=
∑
i
=
1
n
(
y
i
−
e
x
i
w
1
+
e
x
i
w
)
x
i
= \sum{i = 1}^n \left(y_i - \frac{e^{\mathbf{x}_i \mathbf{w}}}{1 + e^{\mathbf{x}_i \mathbf{w}}}\right) \mathbf{x}_i
=∑i=1n(yi−1+exiwexiw)xi
令该偏导为 0, 无法获得解析式, 因此用梯度下降.
w
t
+
1
=
w
t
−
α
×
∂
log
L
(
w
)
∂
w
\mathbf{w}_{t+1}=\mathbf{w}_t-\alpha\times\frac{\partial \log L(\mathbf{w})}{\partial \mathbf{w}}
wt+1=wt−α×∂w∂logL(w)
优点:
(模型)模型清晰,背后的概率推导经得住推敲。
(输出)输出值自然地落在0到1之间,并且有概率意义。
(参数)参数代表每个特征对输出的影响,可解释性强。
(简单高效)实施简单,非常高效(计算量小、存储占用低),可以在大数据场景中使用。
(可扩展)可以使用online learning的方式更新轻松更新参数,不需要重新训练整个模型。
(过拟合)解决过拟合的方法很多,如L1、L2正则化。
(多重共线性)L2正则化就可以解决多重共线性问题。
第四天:
原文链接:https://blog.csdn.net/minfanphd/article/details/119255667?spm=1001.2014.3001.5501
1.写出下面图的邻接矩阵。
邻接矩阵:
E
=
[
0
1
1
1
1
0
1
0
1
1
0
1
1
0
1
0
]
\mathbf{E}=\left [\begin{array}{ccc} 0 & 1 & 1& 1\\ 1& 0& 1 & 0 \\ 1 & 1 & 0& 1\\ 1& 0& 1 & 0 \end{array}\right]
E=⎣⎢⎢⎡0111101011011010⎦⎥⎥⎤
2.定义无向网络.
Definition: A undirected net is a tuple
G
=
(
V
,
w
)
G=(\mathbf{V}, w)
G=(V,w), where
V
\mathbf{V}
V is the set of nodes;
w
:
V
×
V
→
R
w:\mathbf{V}\times\mathbf{V}\to\mathbb{R}
w:V×V→R is the weight function where
w
(
⟨
v
i
,
v
j
⟩
)
w(\lang v_i,v_j\rang)
w(⟨vi,vj⟩) is the weight of the arc
⟨
v
i
,
v
j
⟩
\lang v_i,v_j\rang
⟨vi,vj⟩
w
(
⟨
v
i
,
v
j
⟩
)
=
w
(
⟨
v
j
,
v
i
⟩
)
w(\lang v_i,v_j\rang) = w(\lang v_j,v_i\rang)
w(⟨vi,vj⟩)=w(⟨vj,vi⟩)
原文链接:https://blog.csdn.net/minfanphd/article/details/119278510?spm=1001.2014.3001.5501
3.自己画一棵树, 将其元组各部分写出来 (特别是函数
p
p
p).
T
=
(
V
,
r
,
p
)
T=(V,r,p)
T=(V,r,p)
V
=
{
v
0
,
v
1
,
…
,
v
4
}
V=\{v_0,v_1,\dots,v_4\}
V={v0,v1,…,v4}
r
=
v
0
r=v_0
r=v0
p
(
v
0
)
=
ϕ
p(v_0)=ϕ
p(v0)=ϕ
p
(
v
1
)
=
v
0
p ( v_1 ) = v_0
p(v1)=v0
p
(
v
1
)
=
v
0
p(v_1)=v_0
p(v1)=v0
p
(
v
2
)
=
v
0
p
p(v_2)=v_0p
p(v2)=v0p
p
(
v
3
)
=
v
1
p
p(v_3)=v_1p
p(v3)=v1p
p
(
v
4
)
=
v
2
p(v_4)=v_2
p(v4)=v2
4.针对该树, 将代码中的变量值写出来 (特别是 parent 数组).
public class Tree {
/**
* 节点数. 表示节点 v_0 至 v_{n-1}.
*/
int n;
/**
* 根节点. 0 至 n-1.
*/
int root;
/**
* 父节点.
*/
int[] parent;
/**
* 构造一棵树, 第一个节点为根节点, 其余节点均为其直接子节点, 也均为叶节点.
*/
public Tree(int paraN) {
n = paraN;
parent = new int[n];
parent[0] = -1; // -1 即 \phi
}// Of the constructor
}//Of class Tree
值如下:
n = 5;
root = 0;
parent = {-1, 0, 0, 1, 2}
原文链接:https://blog.csdn.net/minfanphd/article/details/119290634
5.画一棵三叉树, 并写出它的 child 数组.
child数组:
{
{
1
,
2
,
−
1
}
,
{
3
,
4
,
5
}
,
{
−
1
,
−
1
,
−
1
}
,
{
−
1
,
−
1
,
−
1
}
,
{
−
1
,
−
1
,
−
1
}
,
{
−
1
,
−
1
,
−
1
}
}
\{\{1,2,-1\}, \{3,4,5\},\{-1,-1,-1\},\{-1,-1,-1\},\{-1,-1,-1\},\{-1,-1,-1\}\}
{{1,2,−1},{3,4,5},{−1,−1,−1},{−1,−1,−1},{−1,−1,−1},{−1,−1,−1}}
6.按照本贴风格, 重新定义树. 提示: 还是应该定义 parent 函数, 字母表里面只有一个元素.
Let ϕ \phi ϕ be the empty node, a tree is a quadruple T = ( V , r , Σ , p ) T=(\mathbf{V},r,\Sigma,p) T=(V,r,Σ,p) where
V
≠
∅
\mathbf{V} \neq \emptyset
V=∅ is the set of nodes;
r
∈
V
r\in \mathbf{V}
r∈Vis the root node;
Σ
=
{
t
o
p
}
\Sigma=\{\mathrm{top}\}
Σ={top};
p
:
V
→
V
∪
{
ϕ
}
p:\mathbf{V}\to\mathbf{V}\cup\{\phi\}
p:V→V∪{ϕ} is the parent mapping satisfying
when
v
=
r
,
∃
1
s
∈
Σ
v=r,\exists1s\in \Sigma
v=r,∃1s∈Σ , st.
p
(
r
,
s
)
=
ϕ
p(r,s) = \phi
p(r,s)=ϕ;
∀
v
∈
V
\forall v\in \mathbf{V}
∀v∈V,
∃
1
n
≥
0
a
n
d
1
s
∈
Σ
\exists1n\geq 0 and 1s\in \Sigma
∃1n≥0and1s∈Σ, st.
p
(
n
)
(
v
,
s
)
=
r
p^{(n)}(v,s)=r
p(n)(v,s)=r
7.根据图、树、m mm-叉树的学习, 谈谈你对元组的理解.
元组就是一行数据,在一个二维数组中,一行就是一个元组,元组也类似于字符串。
第五天:
原文链接:https://blog.csdn.net/minfanphd/article/details/119296101
定义一个标签分布系统, 即各标签的值不是 0/1, 而是
[
0
,
1
]
[0,1]
[0,1] 区间的实数, 且同一对象的标签和为 1.
Definition. A label distribution system is a tuple
S
=
(
X
,
Y
)
S = (\mathbf{X},\mathbf{Y})
S=(X,Y)where
X
=
[
x
i
j
]
n
×
m
∈
R
n
×
m
X=[x_{ij} ]_{n\times m}\in R^{n\times m}
X=[xij]n×m∈Rn×m is the data matrix;
Y
=
[
y
i
k
]
n
×
l
∈
[
0
,
1
]
n
×
l
\mathbf{Y} = [y_{ik}]_{n\times l}\in [0,1]^{n\times l}
Y=[yik]n×l∈[0,1]n×l is the label matrix, satisfying
∀
y
i
∈
Y
\forall y_i \in \mathbf{Y}
∀yi∈Yst.
∑
k
=
1
l
y
i
k
=
1
\sum_{k=1}^{l}y_{ik}=1
∑k=1lyik=1
n
n
n is the number of instances;
m
m
m mm is the number of features;
l
l
l ll is the number of labels,