1.看你用到了textgrocery,能简单描述一下它的原理吗?
TextGrocery是一个基于LibLinear和jieba的线性分类器,支持L1与L2正则化。特点是高效易用,适用于短文本分类,同时支持中文和英文语料;
LibLinear主要特征包括:和libsvm一样的数据格式和相似使用方式,都是svm分类器,多分类器;支持模型交叉验证;增加了不平衡数据的权重。
何时用LIBLINEAR,而不是LIBSVM:
liblinear是为大数据而生的,解决大规模数据的线性模型;速度快,尤其是对稀疏的特征。缺点就是太吃内存了,10G的数据量需要接近50G的内存。
ibsvm解决通用典型的分类问题,如果数据集不大并且是初学者,推荐libsvm。
另外,对于多分类问题以及核函数的选取,以下经验规则可以借鉴:
如果如果特征数远远大于样本数的情况下,使用线性核就可以了.
如果特征数和样本数都很大,例如文档分类,一般使用线性核, LIBLINEAR比LIBSVM速度要快很多.
如果特征数远小于样本数,这种情况一般使用RBF.但是如果一定要用线性核,则选择LIBLINEAR较好,而且使用-s 2选项。
RBF是什么?
Radial basis function(径向基函数)——离某个点距离的实值函数,采用欧式距离公式或其他距离公式
RBF (Radial Basis Function)可以看作是一个高维空间中的曲面拟合(逼近)问题,学习是为了在多维空间中寻找一个能够最佳匹配训练数据的曲面,然后来一批新的数据,用刚才训练的那个曲面来处理(比如分类、回归)。RBF的本质思想是反向传播学习算法应用递归技术,这种技术在统计学中被称为随机逼近。
径向基函数是一个取值仅仅依赖于离原点距离的实值函数,也就是Φ(x)=Φ(‖x‖),或者还可以是到任意一点c的距离,c点成为中心点,也就是Φ(x,c)=Φ(‖x-c‖)。任意一个满足Φ(x)=Φ(‖x‖)特性的函数Φ都叫做径向量函数,标准的一般使用欧氏距离,尽管其他距离函数也是可以的。
RBF网络能够逼近任意的非线性函数,具有良好的泛化能力和学习收敛速度。
结构由:输入层、隐层、输出层 三层组成。
输入层: 与外界环境连结起来。 隐层: 从输入空间到隐空间之间进行非线性变换; 输出层: 是线性的,为输入层的输入模式提供响应。
隐层的非线性变换的基本理论:1.一个分类问题如果映射到一个高维空间将会比映射到一个低维空间更可能实现线性可分; 2. 隐空间的维数越高,逼近就越精确。
注意与CRF区分开:
Conditional Random Field:条件随机场,一种机器学习模型
CRF分词原理
1. CRF把分词当做字的词位分类问题,通常定义字的词位信息如下:
词首B;词中M;词尾E;单子词S
2. CRF分词的过程就是对词位标注后,将B和E之间的字,以及S单字构成分词
CRF比较 HMM,MEMM
SVM原理、核函数、textgrocery用到的核函数。
SVM就是在n维空间上找到一个超平面,将空间上的点分类,这个超平面上的所有点就叫做支持向量。
定义点与超平面的最大间隔,引入两个概念:函数间隔和几何间隔。
函数间隔:r=y(wx+b), 几何间隔:r=y(wx+b)/||w||,线性可分支持向量最优化问题:
max(r/||w||) y(wx+b)>=r
=> min(||w||||w||/2) y(wx+b)>=1
=>根据拉格朗日对偶性自然引入核函数,进而推广到非线性分类问题。L(w,b,a)=||w||||w||/2-求和(ay(wx+b)) + 求和(a)
SVM区别于感知机:二者虽然都是找到一组超平面,感知机是误分类点驱动的,采用随机梯度下降法,超平面有多个;支持向量要求超平面间隔最大化,还包括核技巧,超平面只有一个。
2.有了解过松弛变量吗?
松弛变量允许一部分点游离在超平面的另一侧(如何设置?经验值是多少?)
线性不可分意味着某些点不能满足间隔大于等于1的约束条件,可以对每个样本点引入一个松弛变量E,使得函数间隔加上松弛变量大于等于1
y(wx+b)>=1-E
3.分类分19个大类,也是二值区分,判断是还是否是吗?
SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:
一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;
另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。
a.一对多法(one-versus-rest,简称1-v-r SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。
b.一对一法(one-versus-one,简称1-v-1 SVMs)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。
c.层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。
svm多分类效果不佳,目前是svm研究的热点之一。libsvm用的是one- versus-one法。.一对一法(one-versus-one,简称OVO SVMs或者pairwise)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本 进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。
还是假设有四类A,B,C,D 四类。在训练的时候我选择A,B; A,C; A,D; B,C; B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结 果。
投票是这样的.
A=B=C=D=0;
(A, B)-classifier 如果是A win,则A=A+1;otherwise,B=B+1;
(A,C)-classifer 如果是A win,则A=A+1;otherwise, C=C+1;
...
(C,D)-classifer 如果是A win,则C=C+1;otherwise,D=D+1;
The decision is the Max(A,B,C,D)
4.看你用到了HMM模型,有了解过CRF吗?
首先,CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像分词、词性标注,以及命名实体标注。
隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择。
最大熵隐马模型则解决了隐马的问题,可以任意选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题,即凡是训练语料中未出现的情况全都忽略掉。
条件随机场则很好的解决了这一问题,他并不在每一个节点进行归一化,而是所有特征进行全局归一化,因此可以求得全局的最优值。
CRF其实是HMM的一种改进。
5.有些redis和nosql技术,讲一下。
noSQL数据库技术:相对于关系型sql语句,noSQL(not only sql)是非关系型数据库语句。常见的有:redis、menchache、mongdb。
前者适用于结构化数据、结构化查询语言SQL、事物遵循ACID原则、存在主键;后者存储非结构化和不可预知的数据、没有声明性查询语言、事物遵循最终一致性、键 - 值对存储+列存储+文档存储+图形数据库。
noSQL优点:灵活、简单、高可扩展、分布式计算。缺点:没有标准化、有限的查询、最终一致是不直观的程序。
Hbase:按列存储;
MongoDB:文档存储json;
MemcacheDB、Redis:key+value存储
6.了解过网络社团划分算法没有?
在社区划分问题中,存在着很多的算法,总的来说,主要分为两大类算法。
凝聚方法(agglomerative method):添加边
分裂方法(divisive method):移除边
社区划分的评价标准:模块度社区划分的目标是使得划分后的社区内部的连接较为紧密,而在社区之间的连接较为稀疏,通过模块度的可以刻画这样的划分的优劣,模块度越大,则社区划分的效果越好 。
典型的网络社区识别算法
(1) Kernighan-Lin 算法(KL算法)
Kernighan-Lin算法是一种试探优化法。它是利用贪婪算法将复杂网络划分为两个社团的二分法。该算法引入增益值P,并将P定义两个社团内部的边数减去连接两个社团之间的边数,然后再寻找使 P值最大的划分方法。整个算法可描述如下
首先,将网络中的节点随机地划分为已知大小的两个社团。在此基础上,考虑所有可能的节点对,其中每个节点对的节点分别来自两个社团。对每个节点对,计算如果交换这两个节点可能得到的P的增益ΔP=P交换后-P交换前,然后交换最大的ΔP对应的节点对,同时记录交换以后的 P值。规定每个节点只能交换一次。重复这个交换过程,直到某个社团内所有的节点都被交换一次为止。需要注意的是,在节点对交换的过程中,P值并不一定是单调增加的。不过,即使某一步的交换会使P值有所下降,仍然可能在其后的步骤中出现一个更大的P值。当交换完毕后,便找到上述交换过程中所记录的最大的P值。这时对应的社团结构就认为是该网络实际的社团结构。
(2) 基于Laplace图特征值的谱二分法(谱二分法)
关键词:laplace矩阵,对角矩阵,观察非零特征值的特征向量给你,特征元素正负
该算法利用网络结构的Laplace矩阵中不为零的特征值所对应的特征向量和同一个社区内的节点对应的元素近似值相等的原理对网络社区进行划分。该算法过程如下:
设图G是一个具有n个节点的无向图,G的Laplace矩阵L是一个n×n的对称矩阵。L的对角线元素Lii是节点i的度,非对角线元素Lij表示节点i和节点j的连接关系,当节点i和节点j之间有边连接时,则 Lij = -1,否则为Lij = 0。容易验证,L的每一行的和以及每一列的和均为0。因而,向量I=(1,1,l……1)'是L相应于特征值0的特征向量。
如果图G可以被分解成g个互不重叠、互不相连的子图Gk,则其Laplace矩阵L就是一个分成g块的对角矩阵块,每个对角矩阵块就是相应的分支子图的Laplace矩阵。显然,此时L存在g个与特征值0对应的特征向量v(k),k=1,2,···,gGN算法,当节点i属于该社团时,vi(k)=1,否则vi(k)=0。
如果图G可以被分解成g个子图,但子图之间存在少量连接时,其相应的Laplace矩阵L就不再是一个分成g块的对角阵。此时,对应0这个特征值就只有一个特征向量I。但是,在0的附近还有g-1个比零稍大的特征值,并且这g-1个特征值相应的特征向量可以近似地看成上述特征向量v(k)的线性组合。因此,从理论上来说,只要找到Laplace矩阵中比零稍大的那些特征值,并且对其特征向量进行线性组合,就可以近似的得到这些子图[5]。
考虑一个例子,即将图G分割成2个子图。由于对称矩阵的任意两个2个特征值所对应的特征向量相互正交,因此Laplace矩阵L的任意对应于非零特征值的特征向量均正交于向量I=(1,1,l……1)',从而所有非零特征值的特征向量必须具有正分量和负分量。如果图G可以分解为2个子图使得这2个子图之间仅存在很少的连接,则必存在一个特征向量,其特征值近似于0;该特征向量的正分量对应于一个子图,负分量对应于另一个子图。因此,可以通过观察最小非零特征值所对应的特征向量,根据特征值元素的正负将一个网络分解成2个社区,该方法称为谱二分法[6-7]。
(3) GN算法
GN算法是一种分裂方法。其基本思想是不断的从网络中移除介数最大的边。边介数定义为网络中经过每条边的最短路径的数目。具体算法如下:
①计算网络中所有边的介数。
②移除介数最高的边。
③重新计算所有受影响的边的介数。
④重复步骤②,直到每个节点就是一个退化社团为止。
3三种算法的对比分析
从上述三种算法的过程来看,Laplace图特征值谱二分法,Kernighan-Lin算法和GN算法计算简洁,都易于程序实现。Kernighan-Lin算法的时间复杂度较小,但准确度不高,适用于小规模网络社区划分。而Laplace图特征值谱二分法和GN算法则适合于较大网络的社区划分。其中,Laplace图特征值谱二分法仅适用于由2个社团组成的大网络结构GN算法,其时间复杂度比GN算法要大些。而GN算法在对网络社区进行划分时必须事先知道网络中存在的社团个数,如表1所示。
总之,三种社区划分算法各有优缺点,在实际应用时,可根据所要划分的网络特点,选择单独一种算法或综合多种算法对网络进行划分,以使划分结果更接近于网络社区实际状况。
表1 三种社区划分算法比较
算法名称 |
时间 复杂度 |
优点 |
缺点 |
Kernighan- Lin算法 |
O(n2) |
计算简单,易于划分 |
准确度不高,且必须事先知道网络中社团规模大小,适用于小规模网络 |
Laplace图特征值谱二分法 |
O(n3) |
计算简单,易于程序实现 |
仅适用于由2个社团组成的网络结构,时间复杂度较大 |
GN算法 |
O(m2n) |
考虑网络全局,划分社区准确度较高 |
对网络社团结构缺少量的定义,事先知道社团个数 |
注:n ,m分别为网络中的节点数和边数
7.决策树的剪枝策略
PrePrune:预剪枝,及早的停止树增长,方法可以参考见上面树停止增长的方法。
PostPrune:后剪枝,在已生成过拟合决策树上进行剪枝,可以得到简化版的剪枝决策树。
该剪枝方法考虑将书上的每个节点作为修剪的候选对象,决定是否修剪这个结点有如下步骤组成:
1:删除以此结点为根的子树
2:使其成为叶子结点
3:赋予该结点关联的训练数据的最常见分类
4:当修剪后的树对于验证集合的性能不会比原来的树差时,才真正删除该结点
L1,L2正则项;early-stopping(预剪枝)、dropout(后剪枝)