机器学习(十九)——PageRank算法, KNN, loss function详解
http://antkillerfarm.github.io/
PageRank算法
概述
在PageRank提出之前,已经有研究者提出利用网页的入链数量来进行链接分析计算,这种入链方法假设一个网页的入链越多,则该网页越重要。早期的很多搜索引擎也采纳了入链数量作为链接分析方法,对于搜索引擎效果提升也有较明显的效果。 PageRank除了考虑到入链数量的影响,还参考了网页质量因素,两者相结合获得了更好的网页重要性评价标准。
对于某个互联网网页A来说,该网页PageRank的计算基于以下两个基本假设:
数量假设:在Web图模型中,如果一个页面节点接收到的其他网页指向的入链数量越多,那么这个页面越重要。
质量假设:指向页面A的入链质量不同,质量高的页面会通过链接向其他页面传递更多的权重。所以越是质量高的页面指向页面A,则页面A越重要。
利用以上两个假设,PageRank算法刚开始赋予每个网页相同的重要性得分,通过迭代递归计算来更新每个页面节点的PageRank得分,直到得分稳定为止。 PageRank计算得出的结果是网页的重要性评价,这和用户输入的查询是没有任何关系的,即算法是主题无关的。
优点:
这是一个与查询无关的静态算法,所有网页的PageRank值通过离线计算获得;有效减少在线查询时的计算量,极大降低了查询响应时间。
缺点:
1)人们的查询具有主题特征,PageRank忽略了主题相关性,导致结果的相关性和主题性降低
2)旧的页面等级会比新页面高。因为即使是非常好的新页面也不会有很多上游链接,除非它是某个站点的子站点。
马尔可夫链
Markov链的基本定义参见《机器学习(十六)》。
这里补充一些定义:
定义1:设C为状态空间的一个子集,如果从C内任一状态i不能到C外的任何状态,则称C为闭集。除了整个状态空间之外,没有别的闭集的Markov链被称为不可约的。
如果用状态转移图表示Markov链的话,上面的定义表征了Markov链的连通性。
定义2:如果有正整数d,只有当n=d,2d,…n=d,2d,\dots时,P(n)ii>0P_{ii}^{(n)}>0,或者说当n不能被d整除时,P(n)ii=0P_{ii}^{(n)}=0,则称i状态为周期性状态。如果除了d=1d=1之外,使P(n)ii>0P_{ii}^{(n)}>0的各n值没有公约数,则称该状态i为非周期性状态。
这个定义表征了Markov链各状态的独立性。
定义3:
f_{ij}^{(n)}=P(X_{m+v}\neq j,X_{m+n}=j|X_m=i)
其中,n>1,1≤v≤n−1n>1,1\le v\le n-1。
上式表示由i出发,首次到达j的概率,也叫首中概率。
相应的还有最终概率:
f_{ij}=\sum_{n=1}^\infty f_{ij}^{(n)}
定义4:
如果fii=1f_{ii}=1, 则称状态i为常返的,如果fii<1f_{ii}, 则称状态i为非常返的。
令ui=∑∞n=1nf(n)iiu_i=\sum_{n=1}^\infty nf_{ii}^{(n)},则uiu_i表示由i出发i,再返回i的平均返回时间。
如果ui=∞u_i=\infty,则称i为零常返的。
常返态表征Markov链的极限分布。显然如果长期来看,状态i“入不敷出”的话,则其最终的极限概率为0。
根据上面的定义,还可得到Markov链的三个推论:
推论1:有限状态的不可约非周期Markov链必存在平稳分布。
推论2:若不可约Markov链的所有状态是非常返或零常返的,则不存在平稳分布。
推论3:若XjX_j是不可约的非周期的Markov链的平稳分布,则limn→∞P(n)ij=Xj\lim_{n\to\infty}P_{ij}^{(n)}=X_j,即极限分布等于平稳分布。
简易推导
上图是一个Web图模型的示例。其中的节点表示网页,箭头表示网页链接。因此,从图论的角度来说,这是一个有向图。而从随机过程的角度,这也可以看做是一个Markov链。
上图中,A有两个入链B和C,则:
PR(A)=PR(B)+PR(C)
然而图中除了C之外,B和D都不止有一条出链,所以上面的计算式并不准确:
PR(A) = \frac{PR(B)}{2} + \frac{PR(C)}{1}
一般化,即:
PR(A)= \frac{PR(B)}{L(B)}+ \frac{PR(C)}{L(C)}
其中,L表示外链个数。
更一般化,可得:
PR(u) = \sum_{v \in B_u} \frac{PR(v)}{L(v)}
这里有两种异常情况需要处理。
1.互联网中不乏一些没有出链的网页,为了满足Markov链的收敛性,设定其对所有的网页(包括它自己)都有出链。
2.互联网中一个网页只有对自己的出链,或者几个网页的出链形成一个循环圈。那么在不断地迭代过程中,这一个或几个网页的PR值将只增不减,显然不合理。
对于这种情况,我们假定有一个确定的概率α\alpha会输入网址直接跳转到一个随机的网页,并且跳转到每个网页的概率是一样的。即:
PR(p_{i}) = \alpha \sum_{p_{j} \in M_{p_{i}}} \frac{PR(p_{j})}{L(p_{j})} + \frac{(1 - \alpha)}{N}
α\alpha也叫阻尼系数,一般设定为0.85。
由Markov链的收敛性可知,无论每个网页的PR初始值如何设定,都不影响最终的PR值。
在实际计算中,由于网页数量众多,而其中的链接关系相对较少,因此这个计算过程,实际上是一个巨维稀疏矩阵的凸优化问题,此处不再赘述。
TextRank
TextRank算法是PageRank算法在NLP领域的扩展,被广泛用于自动摘要和提取关键词。
将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。由此可以得到句子的集合和单词的集合。
每个单词作为TextRank中的一个节点。假设一个句子依次由下面的单词组成:w1,…,wnw_1,\dots,w_n。从中取出k个连续的单词序列,组成一个窗口。我们认为窗口中任意两个单词间存在一个无向边,从而构建出一个图模型。
对该图模型应用PageRank算法,可得:
WS(V_i)=(1-d)+d\sum_{V_j \in In(V_i)}\frac{w_{ji}}{\sum_{V_k \in Out(V_j)}w_{jk}}WS(V_j)
上式的W为权重(也可叫做结点相似度),一般采用以下定义:
W(S_i,S_j)=\frac{|\{w_k|w_k\in S_i \&w_k\in S_j\}|}{\log(|S_i|)+\log(|S_j|)}
其中,|Si|\vert S_i\vert是句子i的单词数。
上面说的是关键词的计算方法。计算自动摘要的时候,将句子定义为结点,并认为全部句子都是相邻的即可。自动摘要所用的权重函数,一般采用BM25算法。
参考
http://www.cnblogs.com/rubinorth/p/5799848.html
http://blog.csdn.net/hguisu/article/details/7996185
http://www.docin.com/p-1231683333.html
http://www.docin.com/p-630952720.html
KNN
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。
该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
和K-means的区别
虽然K-means和KNN都有计算点之间最近距离的步骤,然而两者的目的是不同的:K-means是聚类算法,而KNN是分类算法。
一个常见的应用是:使用K-means对训练样本进行聚类,然后使用KNN对预测样本进行分类。
KNN在时间序列分析上的应用
KNN虽然主要是个分类算法,但通过构建特殊的模型,亦可应用于其他领域。其中,KNN在时间序列分析上的应用,就是一个很有技巧性的事情。
假设已知时间序列X:{x1,…,xn}X:\{x_1,\dots,x_n\},来预测xn+1x_{n+1}。
首先,我们选取xn+1x_{n+1}之前的最近m个序列值,作为预测值的特征向量Xm{n+1}X_{m\{n+1\}}。这里的m一般根据时间序列的周期来选择,比如商场客流的周期一般为一周。
Xm{n+1}X_{m\{n+1\}}和预测值xn+1x_{n+1}组成了扩展向量[Xm{n+1},xn+1][X_{m\{n+1\}},x_{n+1}]。为了表明xn+1x_{n+1}是预测值的事实,上述向量又写作[Xm{n+1},yn+1][X_{m\{n+1\}},y_{n+1}]。
依此类推,对于X中的任意xix_i,我们都可以构建扩展向量[Xm{i},yi][X_{m\{i\}},y_{i}]。即我们假定,xix_i的值由它之前的m个序列值唯一确定。显然,由于是已经发生了的事件,这里的yiy_{i}都是已知的。
在X中,这样的m维特征向量共有n−mn-m个。使用KNN算法,获得与Xm{n+1}X_{m\{n+1\}}最邻近的k个特征向量Xm{i}X_{m\{i\}}。然后根据这k个特征向量的时间和相似度,对k个yiy_{i}值进行加权平均,以获得最终的预测值yn+1y_{n+1}。
参考:
http://www.doc88.com/p-1416660147532.html
KNN算法在股票预测中的应用
loss function详解
Mean Squared Error(MSE)/Mean Squared Deviation(MSD)
\operatorname{MSE}=\frac{1}{n}\sum_{i=1}^n(\hat{Y_i} - Y_i)^2
Symmetric Mean Absolute Percentage Error(SMAPE or sMAPE)
MSE定义的误差,实际上是向量空间中的欧氏距离,这也可称为绝对误差。而有些情况下,可能相对误差(即百分比误差)更有意义些:
\text{SMAPE} = \frac 1 n \sum_{t=1}^n \frac{\left|F_t-A_t\right|}{(A_t+F_t)/2}
上式的问题在于At+Ft≤0A_t+F_t\le 0时,该值无意义。为了解决该问题,可用如下变种:
\text{SMAPE} = \frac{100\%}{n} \sum_{t=1}^n \frac{|F_t-A_t|}{|A_t|+|F_t|}
Mean Absolute Error(MAE)
\mathrm{MAE} = \frac{1}{n}\sum_{i=1}^n \left| f_i-y_i\right| =\frac{1}{n}\sum_{i=1}^n \left| e_i \right|
这个可以看作是MSE的1范数版本。
Mean Percentage Error(MPE)
\text{MPE} = \frac{100\%}{n}\sum_{t=1}^n \frac{a_t-f_t}{a_t}
机器学习(十九)——PageRank算法, KNN, loss function详解相关推荐
- 深度学习之图像分类(十九)-- Bottleneck Transformer(BoTNet)网络详解
深度学习之图像分类(十九)Bottleneck Transformer(BoTNet)网络详解 目录 深度学习之图像分类(十九)Bottleneck Transformer(BoTNet)网络详解 1 ...
- 计算机二级第十九套题电子表格,2012年计算机二级Access第十九套上机试题及答案详解...
1.基本操作题 在考生文件夹下,"samp1.mdb"数据库文件中已建立表对象"tVisitor",同时在考生文件夹下还存有"exam.mdb&quo ...
- python接口自动化(十九)--Json 数据处理---实战(详解)
简介 上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下.首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃 ...
- 基于Spark的机器学习实践 (九) - 聚类算法
0 相关源码 1 k-平均算法(k-means clustering)概述 1.1 回顾无监督学习 ◆ 分类.回归都属于监督学习 ◆ 无监督学习是不需要用户去指定标签的 ◆ 而我们看到的分类.回归算法 ...
- 机器学习十大经典算法之岭回归和LASSO回归
机器学习十大经典算法之岭回归和LASSO回归(学习笔记整理:https://blog.csdn.net/weixin_43374551/article/details/83688913
- 机器学习十大经典算法:深入浅出聊贝叶斯决策(贝叶斯公式,最小风险贝叶斯,最小错误贝叶斯)
前言 常听人说,在学习一个东西时,如果能够深入浅出的讲给别人听,才算是真的懂了.最近正好在学模式识别,于是就用它来练笔了.贝叶斯决策(Bayes Decision) 是十大经典机器学习算法之一, ...
- 机器学习:k邻近算法(KNN)
title: 机器学习:k邻近算法(KNN) date: 2019-11-16 20:20:41 mathjax: true categories: 机器学习 tags: 机器学习 什么是K邻近算法? ...
- python数据挖掘笔记】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
#2018-04-06 07:57:00 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘笔记]二十.KNN最近邻分类算法分析详解及平衡 ...
- 图解机器学习算法(6) | 决策树模型详解(机器学习通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/34 本文地址:https://www.showmeai.tech/article-d ...
最新文章
- 找不到 快速启动 ,怎么办
- 兔子生崽问题编程_贵阳在哪里可以学到好的少儿编程
- treeset java_Java TreeSet add()方法与示例
- id门禁卡复制到手机_怎么将手机当做门禁卡使用?给大家详解手机设置门禁卡功能...
- linux 常用基础命令
- 今天对网站的JAVA面试题部分进行了重新整理
- nginx 过滤post报文 防火墙_十八般武艺之Nginx踩坑总结
- Codeforces 1140F 线段树 分治 并查集
- 计算机专业知识比喻,很好的计算机基础知识比喻
- 硬盘检测工具哪个好?5款硬盘工具对比测试
- 课设(房屋出租系统)
- 探究CRM未来趋势:纷享销客的连接型CRM到底是什么?
- Keychain-Dumper的安装,签名与使用
- 写一个简单的校园网多拨思路
- OLED电视与量子点电视,谁更值得买?
- 机器学习一脸懵笔记【05】概率论
- 瞧瞧我们对漫画图片都做了什么!?
- 什么是平衡二叉树和平衡二叉树的高度达到O(log2n)最少需要结点数为n
- Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)
- Verilog设计一个秒脉冲发生器(FPGA)