《数据挖掘》课程简易复习提纲,主要根据 PPT 整理。时间仓促,不排除存在部分内容爆炸。
Intro
Data Mining: process of semi-automaticlly analyzing large databases to find patterns that are:
- Valid: hold on new data with certainty
- Novel: non-obvious to the system
- Useful: should be possible to act on the item
- Understandable: humans should be able to interpret the pattern
Data Exploration
数据具有属性(attribute/feature),属性可以分为Norminal、Binary、Ordinal或者Numeric的,也可以分为连续的或离散的。
度量数据
度量中心
度量中心的方式包括Mean平均数,Medium中位数和众数Mode。根据这三种数的位置关系可以分为symmetric和asymmetric(Positively skew和Negatively skew)两种
度量离散程度
Quantile,常用的有四分位数,把Q3-Q1定义为IQR(Interquartile range)。
在作业中还提到了absolute deviation,表示到中心点(median、mean、mode)的度量,等于
1nn∑i=1|xi−m(X)|
数据可视化
包括直方图、Box Plots、散点图、康托图、Parallel Coordinates、Star Plots、Chernoff Faces
Box Plots
包含Upper/Lower Extreme、Upper/Lower Quartile、Median、Outlier和Whicker。Outlier离群点在后面会有专门一章讨论
Parallel Coordinates
平行坐标将高维数据映射到一个N个纵坐标轴的折线,用于高维数据。类似的有Star Plots。
Dissimilarity matrix
相异度矩阵
对Nominal而言
d(i,j)=total−matchtotal
对Binary而言
令q=(1,1),r=(1,0),s=(0,1),t=(0,0),分别表示对象A、B中属性值出现的四种对应情况的计数。
dissimilarity=r+stotalasymmetricBinaryDissimilarity=r+sq+r+sJaccard=1−asymmetricBinaryDissimilarity
原因是(1,1)和(0,0)有时不能同等看待,例如有时(1,1)非常罕见。
对Numeric而言
曼哈顿距离(L1范数)和欧几里得距离(L2范数)分别是k为1和2的闵可夫斯基距离。k→∞是切比雪夫距离。
对Ordinal而言
首先进行排序,得到xi,feature对应的排行ranki,feature(从1开始),然后把排行归一化。
zi,feature=ranki,feature−1totalfeature−1
混合属性
d(i,j)=∑featureexsiti,jdi,j∑featureexsiti,j
其中di,j:
对Numeric是,相当于做个归一化
|xi,feature−xj,feature|maxh(h,feature)−minh(h,feature)
对Nominal是根据xi,feature和xj,feature是否相等取0或者1
对于Ordinal是先根据排名进行标准化,再按照Numeric的方法计算
Data Preprocessing
data cleaning、data integration、data reduction和data transformation是数据预处理的基本任务。
数据清洗包括缺失值、噪声、离群点和不一致问题的处理。数据集成包括对多种来源数据进行合并(实体识别),并处理其中的非一致和冗余数据。数据归约包含对维数和数量的归约。数据变换包括归一化、离散化和Concept Hierarchy Generation。
数据清洗
处理缺失值
忽略、人工填充、常数、填入全体中位数或均值、填入同类的中位数或均值、使用最可能的值填充(回归、贝叶斯算法等)。
处理噪声
根据分箱(binning)、回归、聚类(检测离群点)
分箱要求首先对数据排序,再划分为等频的箱,然后选择使用均值光滑(用均值替换箱中所有点)、边界光滑(用离自己最近的边界值替换)、中位数光滑等。
这些光滑噪声的手段常也被用作离散化和数据归约。
数据集成
可以通过相关性分析来检查数据冗余,例如对Nominal数据有χ2检验,对于Numeric数据有协方差和相关系数
χ2检验
卡方检验可以描述两个向量A[1..m]和B[1..n]的相似程度。
卡方检验的第一步是有一个数据集矩阵M,M中的元素Mij,表示同时满足Ai和Bi性质的样本个数
将矩阵填入一张表中,在表的最右端和最下端扩充一列/行,用来记录对应行/列的总和
首先计算eij,也就是对应的列和乘以行和除以总数
eij=sum(B=bi)∗sum(A=aj)sum(all)
将它填在括号里面,再对于矩阵中所有的单元格计算
χ2=∑m∑n(xij−eij)2eij
皮尔逊相关系数
协方差可以衡量两个变量的总体误差,方差可以看做两个变量相同时协方差的特例
对于实数X、Y,定义协方差为
Cov(X,Y)=E((X−E(X))(Y−E(Y)))
对于向量A、B,定义协方差为
Cov(A,B)=E((A−ˉA)(B−ˉB))=∑ni=1(Ai−ˉA)(Bi−ˉB)n=E(A∗B)−ˉAˉB
皮尔逊相关系数为
rA,B=Cov(A,B)σAσB
注意这里分母标准差和分子期望中的n被约掉了,取值范围为[−1,1],等于0时变量独立,大于0时正相关,小于0负相关。
注意相关性不暗示因果性。
数据归约
小波分析
主成分分析
选取的主成分对应的坐标轴应当追求方差尽可能大
- 规范化数据
- 计算k个正交向量,即主成分。该过程可以对协方差矩阵求特征值和特征矩阵。
- 取出对应特征值最大的k个向量
标准化方法
- min-max:
v′i=vi−minAmaxA−minA(newMaxA−newMinA)+newMinA - Z-score:
这里ˉA也可以替换成medoid或者mode等中心度量值,σA也可替换成absolute deviations等离散程度度量值
v′i=vi−ˉAσA - demical scaling:
v′i=vi10jwhereargminj(max(|v′i|)<1)
Frequent Itemsets
Frequent Pattterns are patterns that appear frequently in a dataset
support:A和B同时出现的概率p(A∩B),可以是绝对的即出现次数,可以是相对的,再除以事务数
confidence:p(B|A) = c(A∩B)/c(A)
频繁项集指的是支持度满足最小支持度阈值minsup的项集
闭频繁项集:X的任意超集Y的支持度不等于(小于)X的支持度
极大频繁项集:X是频繁的,并且没有任何X的超集Y是频繁的
下面使用Apriori算法和FP-Growth算法来发现频繁k项集,注意我们不关注频繁k+1项集,尽管在过程中我们可以作为一个子问题得到它。
Apriori算法
Apriori算法基于Apriori性质:频繁项集的子集一定是频繁的
使用Apriori生成频繁项集
使用频繁项集生成关联项集
- 对于所有的频繁项集l,生成l所有的非空子集
- 对于l的每个非空子集s,输出规则s→(l−s),如果满足p(l|s)≥min_conf
Apriori优化方法
- Hash-based itemset counting:hash到多个桶里进行初步删选
- Transaction reduction:删去不包含任何k项集的事务
- Partitioning:任何在DB中可能频繁的项集,至少在一个DB分区中是频繁的
这个性质很有意思,假设将数据集D分成了n个不重叠的部分D1,..Dn,下面证明任何在D中频繁(相对最小支持度为s)的项至少在D的一个部分Di中频繁。
使用反证法证明。设有一个项集x在D中频繁。则有
support_count(x∈D)/|D|≥s
而x在D1,..Dn都不频繁,则有
support_count(x∈Di)|Di|<s
有
n∑i=1support_count(x∈Di)<s,n∑i=1|Di|
即
n∑i=1support_count(x∈Di)|D|<s
上面的式子就是
n∗support_count(x∈D)/|D|<n∗s
与假设矛盾 - Sampling:在给定数据集的子集中挖掘,降低支持度要求,并采用一些方法确定其完整性
- Dynamic itemset couting:
FP-Growth
利用FP-Tree生成频繁项集
在建成FP-Tree后,从后往前生成频繁项集。以《数据挖掘:概念与技术(第3版)》为例,考虑最后的节点I5:
构造I5的条件模式基(prefix path sub-tree ending in e)
首先从I5的所有节点(可以是叶子节点也可以是内部节点,这里I5就都是叶子节点,而I1就有一个内部节点)往树根找到一条树链,将树链上的所有节点的支持度改为等于叶子节点I5的支持度1
2<I2, I1, I5 : 1>
<I2, I1, I3, I5 : 1>接着提取出前缀路径,即条件模式基
1
2<I2, I1: 1>
<I2, I1, I3 : 1>使用条件模式基构造条件FP树
I5的条件FP树可以看做是原事务集中含有I5的所有项组成的集合,然后把里面的I5全部去掉
因此可以使用和构造FP树相同的办法1
<I2, I1: 1>
注意此时I3被去掉了,因为它在条件FP树上的的支持度为1,不满足2的最小支持度。实际上指的是(I2,I3,I5)这个项集的支持度不足。
查看I5是否是频繁项集(可以由简单计数得到)
如果I5是频繁的,找到所有以I5结尾的频繁项集
Basic Classification
基本概念
训练集、测试集
决策树
决策树分为树枝,表示对特征测试的结果,由此产生子节点。子节点分为内部节点和叶子节点,叶子节点展示所属类的标签,内部节点展示被测试的特征
决策树不需要领域知识和数值参数,能够处理多维数据,学习结果直观
在设计决策树算法时需要考虑:如何确定特征测试条件(二类划分还是多类划分等)从而获得最佳切分(考量homogeneous/purity),什么时候可以终止切分(同类、早停)
如果决策树的一个节点下只有一个类,这个节点就是pure的
节点的信息熵
假设数据集D可被分为类[1..n],定义节点t下的数据属于类j的条件概率是p(j|t),即
P(X=j)=p(j|t)
由此可以定义信息熵为
info(t)=entropy(t)=H(t)=−n∑j=1p(j|t),log,p(j|t)
信息熵能够描述节点的homogeneity,当熵最大(=log,n)时意味着随机性越大,信息也就越少;当熵最小(=0)则相反。
所有数据从根节点可以通过所属的类分为n部分,这种关于类别的信息熵称为数据集的经验熵,如果不利用特征建立决策树,我们只能根据经验熵得到一个数据所属类别的概率。
Hj(D)=−p(j),log,p(j)H(D)=n∑j=1Hj(D)
也可以定义关于特征A的信息熵,其中特征A取值为[1..nA]
HA(D)=nA∑j=1Hj(D)
信息增益、信息增益比和基尼指数
决策树生成是一个递归的过程,通过测试父节点t的特征A,将其划分为k个子节点,其得到的经验条件熵要小于等于父节点集合的经验熵,产生的差值为信息增益。这是符合直觉的,特征A的信息应当能够减少分类的不确定程度。其中ni表示特征A取值为第i种时对应的数据集大小,也可写作|Di|,显然D1+D2+..+Dn
Gainsplit=H(t)−k∑i=1ninH(i)
不过信息增益容易将结果分为很多个小类,因此提出了信息增益比的概念
GainRatiosplit=GainsplitHA(D)
基尼指数是用来度量impurity的,例如在节点t上。基尼系数熵之半的函数图像差别不大,但是计算要简单很多,所以很常用
Gini=1−k∑j=1p(j|t)2
使用基尼系数分类具有相似的规则,同样是为了使得“增益最大”,所以可以求下面式子的argmax
Ginisplit=Gini(t)−k∑i=1ninGini(i)
但通常而言是直接求argmin
Ginisplit=k∑i=1ninGini(i)
当数据是均匀分布在所有类上时,基尼系数取最大值1−1/n,当数据值集中在一个类上时(更为有趣的信息),基尼系数取最小值0。
决策树训练
由周志华教授的《机器学习》P77,当信息增益出现平票时可以任意选择。此外还有一种情况,当最后没有其他属性,只能进行多数表决时,出现平票也是随便选。
欠拟合与过拟合
欠拟合表现为模型太简单,训练集误差(Re-substitution errors)和泛化误差(Generalization errors)都很大。
过拟合表现为模型对新数据的泛化能力较弱,模型过于复杂。
为了估算泛化误差,可以使用Reduced error pruning方法,即使用验证集来估算。
奥卡姆剃刀法则,复杂的模型有更大的几率是拟合了数据里面的误差,因此在选择模型时应当考虑模型复杂度。
常用的解决过拟合的办法有早停策略,对于决策树来说可以在决策树彻底生成前停止算法,即预剪枝;还可以在决策树生成后进行处理,例如后剪枝。
缺失值处理
贝叶斯分类器
朴素贝叶斯算法相对决策树和部分神经网络算法要快,对于大数据更准确,基于贝叶斯定理
P(H|X)=P(X,H)P(X)=P(X|H)P(H)P(X)
其中X=(x1,…,xn)是数据集中的一个向量,H是有关分类的假设,例如P(Ci|X),i∈[1,m]表示X为类Ci的概率。P(H|X)是后验概率,P(H)是先验概率。
对于未知向量X,朴素贝叶斯算法要求找到最大化P(Ci|X)的类Ci
P(Ci|X)=P(X|Ci)P(Ci)P(X)for,i∈[1,m]
其中P(Ci)来自先验假设或根据数量统计得到,P(X)也是先验的,是个常数,所以有的时候并不考虑这个分母。
在Class conditional independence假设下,P(X|Ci)计算变得简单很多,只需要对X中的每个属性xk分别计算即可
P(X|Ci)=n∏k=1P(xk|Ci)
例如计算P([rain,hot,high]|Yes),就可以计算
P(rain|Yes),P(hot|Yes),P(high|Yes)
然后可以得到
P(Yes|[rain,hot,high])∝(P(rain|Yes),P(hot|Yes),P(high|Yes))P(Yes)
分类评估
我们定义TP、TN、FP、FN分别为真正例、真反例、假正例、假反例。这里T、F表示预测和真实值是否相同,P、N表示我们的预测结果是正例还是反例。令U=TP+TN+FP+FN为样例总数
由此可以派生出一系列评价指标:
accuracy/recognition rate是所有的T比上总数U;error rate是所有的F比上总数U。衡量了整个分类器在正反例上的准确度。
查准率precision是TP比上预测结果中所有的P(=TP+FP),也就是所有预测的正例中正确的比率。
查全率、敏感度recall为TP比上真实情况下所有的P(=TP+FN),也就是所有正例中被预测出的比率
specificity是TN比上真实情况下所有的N,也就是所有反例中被预测出的比率
F1值为precision和recall的调和平均
Holdout方法
包括交叉验证和留一法
Alternative Classification
支持向量机
神经网络
Lazy Learning
集成学习
Basic Clustering
聚类分析包含Partitioning、Hierarchical、Density-based和Grid-based方法。
k-means
k-means的目的是最小化簇内方差
E=k∑i=1∑p∈CiEuclideanDistance(p,ci)2
这个问题是NP难的,k-means使用的贪心的方法不保证最优解,其步骤是:
- 选择k个簇的中心
- 将数据点分配到距离最近的中心对应的簇
- 使用每个簇中点的均值更新中心
- 重复2-3直到收敛
初始值确定
一般可以取k=√n/2,或者使用Elbow method
k值确定后可以使用Sampling或Pick “dispersed” set of points(选择到已选点最小距离最大的点)方法来取出k个中心点
由此可以看出k-means方法对初始化很敏感。并且有的数据是没有定义均值的,这时候可以选择使用k-modes。此外k-means对离群点和噪音和敏感。
对于大数据集,可以采用采样、micro-clusters、additional data structure来实现scalability
k-medoids和PAM方法
由于k-means对噪声很敏感,所以引入了k-medoids,它并不是用均值,而是用数据集中的一个代表点来表示集群的中心
E=k∑i=1∑p∈CiEuclideanDistance(p,oi)2
如上式,oi是簇Ci的代表点。该算法流程如下:
- 选取k个代表点
- 尝试使用非代表对象orandom替换代表点o1..ok,假设正在替换某代表点oj,则更新其代价函数
- 对于所有的对象重新进行分配,并计算交换总代价。如果总代价小于0,则接受这次替换,否则维持oj不变
对于大数据可使用CLARA、CLARANS等方法
agglomerative clustering
dendrogram图,类似一个从底部构建的二叉树。
Hierarchical Clustering的优点是不需要预测簇的数量,并且往往能和一些分类学的知识建立联系。
agglomerative方法是自底而上地不断merge,divisive方法是自定而上的不断split
基础的算法应用一个proximity matrix描述两个簇之间的相似度
agglomerative的方法也有缺陷,例如簇之间merge的结果不能取消,没有像kmeans一样针对目标函数优化,三种簇间距离的度量方法各有缺陷
度量两个簇之间的距离
- 两簇间最相近的两个元素的距离:对噪声和离群点敏感
- 两簇间最相异的两个元素的距离:减少了集群半径的增加,容易打破大的集群
- 每个点对间距离的平均:对噪声和离群点不那么敏感,Biased towards globular clusters
divisive clustering和最小生成树
DBSCAN
DBSCAN是基于密度的方法,将所有的点分为三类
- Core
在集群中,且neighborhood是dense的(Eps-MinPts条件) - Border
在集群中,但neighborhood不dense - Outlier
不在集群中
可以做出下面的讨论
- 从q直接密度可达p
当p在q的Eps-neighborhood内,并且q是一个Core - 从q密度可达p
存在对象链p1,..,pn−1,p,其中pi+1直接密度可达pi - p和q密度连接
存在一点o从p和q都密度可达
因此算法流程如下:
- 标记所有节点为未读
- 选取随机未读节点p并标记
- 如果p是一个Core,则包含所有密度可达p点的点p′建立一个新的簇
如果p′未访问,把p′加入簇,并递归。
如果p′已访问,但不属于任何簇(之前被标记为噪音了),把p′加入簇。
通过以上的两点可以保证点p′如果在Eps-neighborhood内有一个Core点q,那么即使p′本身不是Core,在一开始被划为Noise,最后也能正确地被分到对应的簇中。 - 否则标记p为噪声
- 如果p是一个Core,则包含所有密度可达p点的点p′建立一个新的簇
DBSCAN对参数取值敏感
OPTICS
聚类评估
Clustering Tendency
数据集是否根据一个均匀分布产生的
Hopkin Statistics
Cluster Quality
外在方法
外在方法通过把聚类(cluster, C)和基本事实(catagory, L)比较
- Cluster Homogeneity:簇的纯度
- Cluster Completeness:如果在基于基本事实,两个对象属于同一catagory,那么他们应当属于同一个簇
- Rag bag:翻译叫碎布袋,即一个异类的对象最好放入碎布袋中,而不是放入纯的簇中
- Small cluster preservation:将小catagory再分成碎片是非常有害的,因为它使得这些小簇可能成为噪声
- BCubed precision:
Correctness:等于1如果L(oi)=L(Oj)⇔C(oi)=C(Oj)
BCubed recall
BCubed precision
内在方法
内在方法通过比较簇之间分离的优劣
轮廓系数Silhouette coefficient,定义a(o)为对象o到所属簇中其他对象之间的平均距离,定义b(o)为o到o不属于的所有簇的最小平均距离。则
s(o)=b(o)−a(o)max(a(o),b(o))
Alternative Clustering
高斯混合模型
在Fuzzy clusters和Probabilitic-model based clustering中,一个对象可以属于多个簇,按照对应的概率。
高斯混合分布属于生成模型,它可以描述数据是如何从模型中产生的。
EM算法:E步骤
EM算法:M步骤
Biclustering
对于高维数据,传统的基于距离的方法,例如基于欧几里得距离的方法是不可信的,容易被多个维度的噪音所掩盖。因此高维数据的聚类常常是用一小组属性来定义的。
常见有两种高维聚类的方式,第一类是Subspace clustering methods,在高维数据的一个子空间里面搜索聚类,常见的有Biclustering;第二类是Dimensionality reduction approaches,构造一个更低维数的空间,并且在那个空间里面搜索聚类,例如Spectral Clustering
Clustering with constraints
Outlier Analysis
离群点,相对于normal/expected data,是指距离其他对象显著远的对象。离群点不是噪音,噪音是没有研究价值的,类似于random error或者variance
离群点分为全局离群点(相对于其余数据)、情景离群点(相对于某些特定context的数据)和集体离群点。对集体离群点来说,里面的点单个考虑可能就不是离群点了。
统计学方法
参数法之Univariate Outlier Detection
Univariate Outlier Detection假设数据仅对一个指标服从正态分布。然后就可以使用3σ原则来检测一维离群点了(不过为啥要用极大似然估计呢)。
还可以使用之前学过的box plot来进行可视化估计,认为在Q1−1.5,IQR以下和Q3+1.5,IQR要上的点都是离群点
还可以使用Grubb’s检验(最大标准残差检验),与z-score有关
参数法之Multivariate Outlier Detection
Mahalanobis距离方法
χ2统计量
参数法之混合参数分布
非参数法之直方图
非参数法之Kernel Density Estimation(KDE)
基于邻近性的方法
距离方法
网格方法
密度方法
MapReduce
Cluster Computing架构:backbone between racks和rack between nodes
MapReduce是一种批处理算法,核心思想是Bring computation to data和Store files multiple times for reliability。
Map Reduce 的最关键之处在于 Shuffle,通过 Shuffle,具有相同 Key 的 KV 会被 schedule 到同一个节点上。
不妨考虑下面的问题,我们有很多个 key,每个 key 很大,内存中无法装下。如何计算出 topN 最多数量的 key?
- 外部排序
- hash
这里的点是 hash 出来的 key 可能碰撞。这样会导致数量不准确。这里就必须记录一下对应 key 的位置,seek file 确认是否重复。如果发生重复,则需要重新 hash。 - map reduce
用一种 hash 算法,这样所有相同的 key 都会到同一个桶里面。然后对这个桶进行处理。
Mining Streaming data
流处理查询主要有两种类型:Ad-hoc查询和Stading查询
流数据取样
Bloom Filter
我记得之前柳晗就和我讨论过这个算法。
布隆过滤器用来检测一个数是否在集合中,对于确定性的方法而言,这通常意味着对log(n)的时间复杂度进行常数优化,或者对哈希函数和哈希方法进行优化。但无论如何,空间开销是免不了的。
布隆过滤器牺牲了准确性,他可能造成FP假阳性,即可能认为没出现过的数出现过,但换来了空间性能的提高。
算法思想很简单,将n个输入送给k个哈希函数h1,..,hk,哈希函数的计算结果将依次按位或到一个长度为n的bitset中,因此这个bitset中的某一位只能从0变成1。
例如,假设此时bitset为bi,现对于新输入x,判断是否出现过。然后把x依次送入k个哈希函数,如果hj(x)=a,则将第a位设为1。注意到如果此时第a位为0,则说明x肯定没出现过,但反之不一定成立。
Bloom Filter算法分析
Bloom Filter 时间空间复杂度相对于数据规模是常数,因此主要分析出现 FP 的概率。
FP的概率与1的密度有关,显然1越多,越容易出现碰撞,因此可以表示为ak,其中a表示此时1占的比例,不过碰撞概率是要略低于这个值的。我们还可以这样理解,把FP的概率近似看做对元素xi哈希后输出的k个位置上都是1的概率p1(当然有可能是重复了)。为了方便计算,我们实际考虑截至xi,某一位仍然是0的概率p0=1−p1。
将任意一位从0变为1的概率相当于将d个飞镖随机扔向t个目标,这里的d相当于所有的n个输入通过k个哈希函数得到的nk个结果,t相当于bitset。目标Ti被指定飞镖集中的概率是1/t,因此所有的d个飞镖都没有击中目标Ti的概率就是(1−1/t)d,由于t通常很大,可以将其改写为e−d/t(重要极限)。
Bit Counting和DGIM算法
对一个 01 串,在线回答问题最近的 k<=N 位中有多少个 1。朴素的方法需要 O(N) 的空间,每次查询需要花费 O(k) 的时间。
DGIM 算法能够只储存 O(log2N) 位,在 O(logN) 的时间复杂度内给出一个大概的值,误差在50%以内,并可以进一步缩小到任意 eps。
算法思路是维护一个容量为 N 的线性队列,从队尾到队头按照 1 的个数将其划分为 m≈O(log2N) 个桶,每个桶中分别有 20,21,..,2m 个 1,但里面同时会穿插不同数量的 0。为了方便讨论,定义桶的大小是桶里面 1 的数目。
容易看出这个线性队列具有下面的性质:
- 每个桶的最右(靠近队尾)端总是 1
- 所有的 1 都在某个桶中;但是 0 不一定,可能在桶间
- 每种大小的桶最多容忍有两个,不然就会触发归并
下面使用该线性队列回答开始的问题:
通过比较每个桶两端的位置与 k 的大小,找到 k 值所在的桶 b,累加 b 右边所有桶的大小及桶b的一半大小,即为估计值。
下面考虑如何维护该线性队列,考虑接受一个新 bit 时
- 首先弹出队头,并更新队头所属的桶(如果属于某个桶的话),如果此时桶里已经没有 1 了,就删除这个桶
- 如果新比特是 0,则不做任何处理
- 如果新比特是 1,则从右至左检查是否破坏性质每种大小的桶最多容忍有两个,并进行合并处理
DGIM算法分析
首先可以看到我们实际上不要将整个线性表存下来,我们只需要记录每个桶两端的坐标即可,这样的坐标有O(log2N)个。对于每个坐标,他的值域是[0,n),因此我们需要O(log2N)比特来表示它。注意由于N很大,所以不能理解成一个坐标用一个O(1)的常数空间(例如int
)就好。
下面分析DGIM误差的上下界
流数据聚类和BDMO算法
Recommendation System
Content Based方法注意物品的属性,协同过滤方法注意物品与用户的关系
TF.IDF
考虑从文档中选择关键词来最好地概括文档,一个简单的想法是希望这个词出现的频率越来越高,这也就是TF。但其实这是不够的,因为很多助词,例如“也”、“是”这些词出现的频率很高,但却不能用来概括文档。这时候我们需要IDF来描述,也就是说一个词如果出现的文档数越多,它就越common,权重就越底。
fij为termti在文档dj中出现的频率
定义TFij=fij/maxk(fkj)
ni为出现termti的文档数
定义IDFi=logNni
由此可以计算得到
TF.IDF=TFif∗IDFi
Content Filtering
Content Filtering首先对每一个item建立profile,这里的profile指的是一组属性。使用余弦相似度衡量user profilec和item profiles。
u(c,s)=cos(c,s)=c.s|c||s|
这种方法的缺点是过于专门化,它从来不推荐在user’s content profile外面的item,并且人们可能具有多个兴趣爱好。
此外需要有效的办法去查找high utility的items,也就是相似度高的profile,这时候可以借助于Locality Sensitive Hashing。
Collaborative Filtering
协同过滤算法的基本思路是对于用户c,找到其他用户组D和c的对所有item的交集给出的评分相近,然后对于新的item,基于D的评分估计c的评分。
设x的评分向量为rx,那么x,y的相似度可以用余弦相似度衡量cos(rx,ry),也可以计算sim的的皮尔逊相关系数(仅对x、y都评分项计算)
下面使用协同过滤算法进行预测c给items的打分。在给items打分的用户里面找出k个最接近用户c的用户,令为D。则
rcs=1k∑dinDrdsrcs=∑dinDsim(c,d)rds∑dinDsim(c,d)
协同过滤算法的计算D是比较昂贵的,对于每个用户,需要线性的时间。此时我们可以同样借助Locality Sensitive Hashing。
此外可以使用MapReduce来计算协方差矩阵,我记得当时参加第一节云计算大赛的时候的技能题就有一条是这个。
刚才的算法是基于用户的,user-user协同过滤,也有item-item协同过滤,对于items,找到相似的items,当然这里还是使用对相似item的rating而不是对用户的rating,因此可以使用相同的矩阵和预测函数。在实践上item-item的常优于user-user的。
Locality Sensitive Hashing
在之前提到的两种算法中提到了Locality Sensitive Hashing这个算法可以用来快速的找到高相似度的向量对(例如各种profile)
Locality Sensitive Hashing属于一种Approximate Nearest Neighbor Search方法
Locality-sensitive family是一组可以组合起来将向量按相似度区分开的函数。这些函数在统计上是彼此独立的。他们的速度要比遍历所有向量对来得快,并且能够被组合起来解决FP和FN问题。
(d1,d2,p1,p2)敏感表示:
- 如果d(x,y)≤d1,则h(x)=h(y)的概率至少为p1
- 如果d(x,y)≥d2,则h(x)=h(y)的概率至多为p2
AND、OR of Hash functions
给定familyH,从H中选择r个函数构造familyH′。对于H′中的h=[h1,..,hr]:
- h(x)=h(y)当且仅当对于任意的i都存在hi(x)=hi(y)
这是AND构造,指的是这k个哈希值里面要全部相同,才会被投影到相同的桶内
AND操作能够使得保持p1较大时p2更小,即降低FN
相应的定理是如果(d1,d2,p1,p2)敏感的,那么H′是(d1,d2,pr1,pr2)敏感的 - h(x)=h(y)当且仅当对于存在一个以上i使得hi(x)=hi(y)
这是OR构造,指的是这k个哈希值里面有一对以上相同,就会被投影到相同的桶内
OR操作能够使得p1较小时p2更大,即降低FP
相应的定理是如果(d1,d2,p1,p2)敏感的,那么H′是(d1,d2,1−(1−p1)r,1−(1−p2)r)敏感的
Amplify LS family
考试内容2017
- 列出数据的种类(Nominal等)。解释Mean、Medoid等。
- 简述缺失值处理方法。简介PCA。
- 简述支持度等概念。证明Apriori性质。
- 比较Apriori和FP-Growth的性能。使用Apriori计算频繁项集。
- 为什么Naive Bayes是Naive的。如何基于Gini系数构建决策树。
- 使用BP计算神经网络
- k-means有哪些缺点。DBScan。什么是dendrogram,如何度量两个簇的距离
- 协同过滤和内容过滤的区别是什么。什么是(d1,d2,p1,p2)敏感。证明(类似Excecise 2)。