2024年seo计算相关性 篇1
一个页面的标题是对当前页面标题的高度概括,而网页描述又是对当前网页标题的有效补充,所以一般很多人建议的网页标题写法与网页描述写法都会涵盖当前页面所要进行排名的关键词,但这并不是要求要完全匹配,可以用近义词、同义词、或者是整个标题+描述能匹配到即可,提供内容相关性的技巧如下:1,友情链接。记得前几年的时候友情链接交换还不需要考虑是否与自己行业相关,现在交换很多有点seo经验的都会讲究行业相关而不是网站权重相当匹配。友情链接的导出站点锚文本的关键词也参与搜索引擎对你所做的关键词进行当前页面相关度计算。所以亿仁网络在以后交换友情链接,最重要的是行业相关,讲究垂直。
2,导出或者导入高权重垂直网站。大家都知道导出链接是分散网站权重的,也都习惯性加下nofollow标签,单向导出链接对网站伤害更大,根据大宝近两年来的经验来看,这并不是绝对的,指向高权重的网站比如百度百科、百科文库、搜狐门户、百家号文章等知名站点,不但不会分散权重,还会对关键词排名有极大地促进作用。这代表对整个行业的高度认知。导出链接指向知名相关站点,或者一个知名站点导出一个链接到自己的网站,搜索引擎都会认为自己站点内容也是高度相关的,都可以提高相关性。
3,关键词密度。最早的时候很多人爱堆关键词密度,理论上来说某个页面某个关键词密度较高,那么该页面针对这个词的相关性较强,不过也不是绝对的,需要考虑到用户体验,是否多出现几次显得多余,勿要堆彻关键词,密度自己把握即可,没有特别标准。
4,网站页面内容。关于通过网站页面内容不一定要与关键词一模一样,比如当你搜索网站设计这个词的时候,个别站点tdk与页面内容里面就没有刚好对上网站设计这个词的一句话,而是网站建设文字内容或者是网站设计案例效果图,然而在进行关键词排名的时候依然把这个站点放在了前面。从搜索引擎角度、从用户角度来说网站建设是等于网站设计的。需要注意的是网页页面内容提高网站相关性不仅仅只是文字内容,还可以是图片、视频等。
5、网站内链。一篇权威优质文章,阅读下来也是比较专业的,避免不了一些专业术语,而内链就可以完美解释,对用户来说可以更加直白地理解这篇文章,当然我们站内锚文本的时候可以给关键词加上标题,这样相关性更强一点。而相关推荐阅读、这些内链模块也可以帮助搜索引擎蜘蛛更好地理解网页内容相关性,所以有很多老人爱搞相关文章、相关案例调用。
2024年seo计算相关性 篇2
对于任何一个SEO而言,我们的目的实际上都只有一个,那就是尽量出现在搜索结果中的TOP10,当然,我们知道,影响网站排名的因素众多,其中:页面相关性与特定搜索关键词是否高度相匹配显得格外重要。
否则,即使你拥有大量的外部资源,也只能是事倍功半。
那么,如果确定搜引擎网页与用户查询的相关性呢?
根据以往SEO关键词优化的经历,蝙蝠侠IT,将通过如下内容,为大家阐述:
1、深度理解搜索需求
当你试图去排名某一个关键词的时候,你势必要理解这个特定关键词,潜在的搜索意图,否则你无法正确的判断该如何创造内容,比如:减肥,这个词。
它实际上一个竞争度相对较高的词,由于检索这个词,每个人的搜索需求都不尽相同,你要试图排名这个词的时候,就需要尽可能的在页面中,满足用户搜索需求,比如:
① 减肥好方法、减肥小妙招
② 减肥食谱
③ 减肥注意事项
当然,利用一个页面排名这个词,并不现实,通常它需要一个专题,甚至采用一个站点。
2、合理评估站点类型
对于SEO行业而言,我们面对着成千上万个站点,由于行业的关系,每个站点类型都不尽相同,因此在判断页面相关性的时候,它也有不同的指标,比如:
① 企业站:
主要指产品页面相关性,它包括:产品图片、产品描述、产品使用须知、ALT图片标签、nofolow使用文档、甚至短视频宣传片,这些基本架构的配置,体现了页面的相关性。
② 资讯站:
对于资讯站而言,它更加强调围绕特定主题,展开的讨论,尽可能详尽的描述页面搜索需求,实际解决相关问题。
③ 问答站:
对于问答站而言,它的相关性往往来自于,不同UGC内容的观点,当然,这个内容理论上是越详尽,个体数量越多,页面越相关。
3、创建优质页面内容
但无论你是什么类型的网站,从页面相关性的角度,你都应该满足如下几个指标:
① 五处一词的使用:合理使用相关性标签,比如:H1-H3,它也容易出结构化数据。
② 特定关键词密度:控制页面关键词密度,有必要的话,利用相关关键词替代。
③ 页面主题相关性:所谓的页面主题相关性,主要是指,基于特定关键词,进行长尾词的一个拓展,并在页面中,为每个长尾词,提供完善的解决方案。
4、合理利用外部链接
对于一个页面的相关性而言,基于站内一个影响因子,而外部链接同样也是一个主要的参考因素,搜索引擎会根据外部链接的锚文本,进行页面相关性的基础判断,但有的SEO专员,可能会讲,那要是纯文本怎么办。
对于纯文本的外部链接,搜索引擎会根据页面分词,以及链接周围的关键词,进行潜在的匹配。
总结:一个网站页面的相关,还有众多小细节,比如:特定关键词搜索点击的用户访问行为分析,这里蝙蝠侠IT就不一一讲述,而上述内容,仅供参考。
2024年seo计算相关性 篇3
首先我们先要明确一点,我们发布外链的目的是什么?我们发布外链的目的,一部分是提升网站权重排名,获得流量,另一部分是直接获取外链流量,为什么别人在一些论坛贴吧发布帖子就能获取高额流量?发布外链首先要走出一个误区,我们发布的外链最终目的是获取流量,提升权重和排名仅仅只是一种手段,那么下面岑辉宇就来和大家分享一下外链优化新策略。
首先先来了解高质量外链与一般外链的基本区别。
一般外链:发一般性外链的朋友,几乎没有考虑过这篇外链内容对用户是否有帮助,能否吸引流量,是否有人会进行阅读,发一般性外链的人一般只在乎外链能否被收录,是否能带链接,会不会被管理员删掉等。
高质量外链:高质量的外链一般不会考虑能不能带链接,即便带不了链接,依然可以在图片中加上水印链接,也不会优先考虑是否能传递权重,大多情况下会优先考虑用户是否关心内容,有没有人阅读,对用户是否有参考价值,能否提升网站流量,总体而言,一个看重数据,一个看重用户,所以我们要发的外链,不仅仅满足搜索引擎的算法需求,还要满足与用户需求。
1.外链渠道要找准
很多人在做外链建设的时候,仅仅只要求收录,只要收录能带超链接,在什么平台发布都可以,这样的方法在以前的话还是非常有效果,但却大大影响了用户的体验,因此搜索引擎不得不削弱外链的作用,所以选择合适的渠道最为关键,目前搜索引擎不断推出算法,一般不符合平台的内容,大多情况下是不会收录的,即便收录,平台的管理员也不允许这样的外链存在。
就以SEO行业为主,如果要发SEO的外链,不仅仅要求收录,而且外链渠道要相关,笔者通常会在A5站长、站长之家等相关平台,外链渠道好不好,不仅要看平台的权重,还要看平台的流量和相关性。
2.发布外链的内容质量要高
很多人发布外链,对内容要求并不高,总是随便去复制,然后直接在平台上发布,其实这样的做法是非常不明智的,搜索引擎和用户在抓取这个页面的时候,发现内容都是采集的,即便收录了,过一段时间也会被搜索引擎从数据库中删除,而且这样的低质量页面,传递权重过去也不会很多,用户也不会因为一篇低质量的文章而访问网站。
笔者发布的外链,大多都是原创高质量的内容,然后再各大平台发布,很容易就获得转发,而且用户觉得内容有用的话,还会进入原网站访问,因此外链的内容也要保证高质量的,可以通过一些工具来挖掘有价值的关键词。
如何创造高质量的外链内容就值得思考,一般考虑一下几点:
a.通过用户搜索数据结合整理
写的内容一定要围绕用户关心的话题而写,这一点和做原创内容是一样的道理,利用相关数据去分析用户的需求,然后再分析同行哪些做得好,哪些做得不好,这里前面已经讲得很多了,就不做过多说明了。
b.排版干净整洁,图文并茂
很多人因为是发布外链的内容,所以觉得没有必要对内容进行排版,能否抓住用户的眼球,排版很关键词,这里需要注意几点,从别的网站复制下来的图片要通过本地上传,否则别人点击图片就跳转到别人网站去了。在图片中合适的加上水印,也能起到推广的效果。
c.可以适当添加一些视频
目前短视频非常吸引人,可以在外链内容上面放上一些短的视频,用来吸引目光,例如装修行业的外链,可以放一些明星装修的八卦;如果减肥行业,可以放一些励志段视频,这样的操作能吸引大部分流量。
3.制定外链发布的推广计划
一份良好的推广计划能让外链的效果更好,有时候能挖掘大量的潜在客户,推广计划主要考虑以下几点:
a.发布的时间
要观察搜索引擎蜘蛛更新的规律,以及用户上网的时间规律,尽量选择用户碎片时间进行发布,因为用户搜索高峰点,是搜索引擎更新的最佳时机,因此在这些点发布比较容易收录,当然,整体还要看平台的权重。
b.与行业大咖打好关系
多与行业的大咖多交流,打好关系,最好能让他帮你转发内容,比如在SEO行业,笔者认识不少大咖,每当写出高质量的文章,都发给这些大咖看看,可以的话让他们转发,会获得意外收货,而且与这些大咖交流多了,你创作高质量的内容很轻松。
c.分析竞争对手的外链
知己知彼方能百战百胜,多看看首页同行是如何做外链的,能上首页自然与外链有着密不可分的联系,看看别人网站的外链资源,哪些是自己所没有的,如何获取这些外链资源呢?
2024年seo计算相关性 篇4
本文介绍了几个重要的变量相关性的度量,包括皮尔逊相关系数、距离相关性和最大信息系数等,并用简单的代码和示例数据展示了这些度量的适用性对比。
从信号的角度来看,这个世界是一个嘈杂的地方。为了弄清楚所有的事情,我们必须有选择地集中注意力到有用的信息上。
通过数百万年的自然选择过程,我们人类已经变得非常擅长过滤背景信号。我们学会将特定的信号与特定的事件联系起来。
例如,假设你正在繁忙的办公室中打乒乓球。
为了回击对手的击球,你需要进行大量复杂的计算和判断,将多个相互竞争的感官信号考虑进去。
为了预测球的运动,你的大脑必须重复采样球的位置并估计它未来的轨迹。更厉害的球员还会将对手击球时施加的旋转考虑进去。
最后,为了击球,你需要考虑对手的位置、自己的位置、球的速度,以及你打算施加的旋转。
所有这些都涉及到了大量的潜意识微分学。一般来说,我们理所当然的认为,我们的神经系统可以自动做到这些(至少经过一些练习之后)。
同样令人印象深刻的是,人类大脑是如何区别对待它所接收到的无数竞争信号的重要性的。例如,球的位置被认为比你身后发生的对话或你面前打开的门更重要。
这听起来似乎不值得一提,但实际上这证明了可以多大程度上学习从噪声数据中做出准确预测。
当然,一个被给予连续的视听数据流的空白状态机将会面临一个困难的任务,即确定哪些信号能够最好地预测最佳行动方案。
幸运的是,有统计和计算方法可以用来识别带噪声和复杂的数据中的模式。
相关性
一般来说,当我们谈到两个变量之间的「相关性(correlation)」时,在某种意义上,我们是指它们的「关系(relatedness)」。
相关变量是包含彼此信息的变量。两个变量的相关性越强,其中一个变量告诉我们的关于另一个变量的信息就越多。
你可能之前就看过:正相关、零相关、负相关
你可能已经对相关性、它的作用和它的局限性有了一定了解。事实上,这是一个数据科学的老生常谈:
「相关性不意味着因果关系」
这当然是正确的——有充分的理由说明,即使是两个变量之间有强相关性也不保证存在因果关系。观察到的相关性可能是由于隐藏的第三个变量的影响,或者完全是偶然的。
也就是说,相关性确实允许基于另一个变量来预测一个变量。有几种方法可以用来估计线性和非线性数据的相关性。我们来看看它们是如何工作的。
我们将用 Python 和 R 来进行数学和代码实现。本文示例的代码可以在这里 (https://gist.github.com/anonymous/fabecccf33f9c3feb568384f626a2c07) 找到:
GitHub 地址:https://gist.github.com/anonymous/fabecccf33f9c3feb568384f626a2c07
皮尔逊相关系数
皮尔逊相关系数是一种广泛使用的线性相关性的度量,它通常是很多初级统计课程的第一课。从数学角度讲,它被定义为「两个向量之间的协方差,通过它们标准差的乘积来归一化」。
两个成对的向量之间的协方差是它们在均值上下波动趋势的一种度量。也就是说,衡量一对向量是否倾向于在各自平均值的同侧或相反。
让我们看看在 Python 中的实现:
协方差的计算方法是从每一对变量中减去各自的均值。然后,将这两个值相乘。
如果都高于(或都低于)均值,那么结果将是一个正数,因为正数 × 正数 = 正数;同样的,负数 × 负数 = 负数。
如果在均值的不同侧,那么结果将是一个负数(因为正数 × 负数 = 负数)。
一旦我们为每一对变量都计算出这些值,将它们加在一起,并除以 n-1,其中 n 是样本大小。这就是样本协方差。
如果这些变量都倾向于分布在各自均值的同一侧,协方差将是一个正数;反之,协方差将是一个负数。这种倾向越强,协方差的绝对值就越大。
如果不存在整体模式,那么协方差将会接近于零。这是因为正值和负值会相互抵消。
最初,协方差似乎是两个变量之间「关系」的充分度量。但是,请看下面的图:
协方差 = 0.00003
看起来变量之间有很强的关系,对吧?那为什么协方差这么小呢(大约是 0.00003)?
这里的关键是要认识到协方差是依赖于比例的。看一下 x 和 y 坐标轴——几乎所有的数据点都落在了 0.015 和 0.04 之间。协方差也将接近于零,因为它是通过从每个个体观察值中减去平均值来计算的。
为了获得更有意义的数字,归一化协方差是非常重要的。方法是将其除以两个向量标准差的乘积。
在希腊字母中ρ经常用来表示皮尔逊相关系数
在 Python 中:
这样做的原因是因为向量的标准差是是其方差的平方根。这意味着如果两个向量是相同的,那么将它们的标准差相乘就等于它们的方差。
有趣的是,两个相同向量的协方差也等于它们的方差。
因此,两个向量之间协方差的最大值等于它们标准差的乘积(当向量完全相关时会出现这种情况)。这将相关系数限制在 -1 到 +1 之间。
箭头指向哪个方向?
顺便说一下,一个定义两个向量的 PCC 的更酷的方法来自线性代数。
首先,我们通过从向量各自的值中减去其均值的方法来「集中」向量。
a = [1,2,3,4,5] ; b = [5,4,3,2,1]
a_centered = [i - mean(a) for i in a]
b_centered = [j - mean(b) for j in b]
现在,我们可以利用向量可以看做指向特定方向的「箭头」的事实。
例如,在 2-D 空间中,向量 [1,3] 可以代表一个沿 x 轴 1 个单位,沿 y 轴 3 个单位的箭头。同样,向量 [2,1] 可以代表一个沿 x 轴 2 个单位,沿 y 轴 1 个单位的箭头。
两个向量 (1,3) 和 (2,1) 如箭头所示。
类似的,我们可以将数据向量表示为 n 维空间中的箭头(尽管当 n > 3 时不能尝试可视化)。
这些箭头之间的角度 ϴ 可以使用两个向量的点积来计算。定义为:
或者,在 Python 中:
点积也可以被定义为:
其中 ||**x**|| 是向量 **x **的大小(或「长度」)(参考勾股定理),ϴ 是箭头向量之间的角度。
正如一个 Python 函数:
def magnitude(x):
x_sq = [i ** 2 for i in x]
return math.sqrt(sum(x_sq))
我们通过将点积除以两个向量大小的乘积的方法得到 cos(ϴ)。
def cosTheta(x,y):
mag_x = magnitude(x)
mag_y = magnitude(y)
return dotProduct(x,y) / (mag_x * mag_y)
现在,如果你对三角学有一定了解,你可能会记得,余弦函数产生一个在 +1 和 -1 之间震荡的图形。
cos(ϴ) 的值将根据两个箭头向量之间的角度而发生变化。
当角度为零时(即两个向量指向完全相同的方向),cos(ϴ) 等于 1。
当角度为 -180°时(两个向量指向完全相反的方向),cos(ϴ) 等于 -1。
当角度为 90°时(两个向量指向完全不相关的方向),cos(ϴ) 等于零。
这可能看起来很熟悉——一个介于 +1 和 -1 之间的衡量标准似乎描述了两个向量之间的关系?那不是 Pearson』s *r *吗?
那么——这正是它的解释!通过将数据视为高维空间中的箭头向量,我们可以用它们之间的角度 ϴ 作为相似度的衡量。
A) 正相关向量; B) 负相关向量; C) 不相关向量
该角度 ϴ 的余弦在数学上与皮尔逊相关系数相等。当被视为高维箭头时,正相关向量将指向一个相似的方向。负相关向量将指向相反的方向。而不相关向量将指向直角。
就我个人而言,我认为这是一个理解相关性的非常直观的方法。
统计显著性?
正如频率统计一样,重要的是询问从给定样本计算的检验统计量实际上有多重要。Pearson』s r* *也不例外。
不幸的是,PCC 估计的置信区间不是完全直接的。
这是因为 Pearson』s r 被限制在 -1 和 +1 之间,因此不是正态分布的。而估计 PCC,例如 +0.95 之上只有很少的容错空间,但在其之下有大量的容错空间。
幸运的是,有一个解决方案——用一个被称为 Fisher 的 Z 变换的技巧:
1. 像平常一样计算 Pearson』s r 的估计值。
2. 用 Fisher 的 Z 变换将 r→z,用公式 z = arctanh(r) 完成。
3. 现在计算 z 的标准差。幸运的是,这很容易计算,由 SDz = 1/sqrt(n-3) 给出,其中 n 是样本大小。
4. 选择显著性阈值,alpha,并检查与此对应的平均值有多少标准差。如果取 alpha = 0.95,用 1.96。
5. 通过计算 *z* +(1.96 × SD*z*) 找到上限,通过计算 *z -* **(1.96 × SD*z*) 找到下限。
6. 用 r = tanh(z) 将这些转换回 r。
7. 如果上限和下限都在零的同一侧,则有统计显著性!
这里是在 Python 中的实现:
r = Pearsons(x,y)
z = math.atanh(r)
SD_z = 1 / math.sqrt(len(x) - 3)
z_upper = z + 1.96 * SD_z
z_lower = z - 1.96 * SD_z
r_upper = math.tanh(z_upper)
r_lower = math.tanh(z_lower)
当然,当给定一个包含许多潜在相关变量的大数据集时,检查每对的相关性可能很吸引人。这通常被称为「数据疏浚」——在数据集中查找变量之间的任何明显关系。
如果确实采用这种多重比较方法,则应该用适当的更严格的显著性阈值来降低发现错误相关性的风险(即找到纯粹偶然相关的无关变量)。
一种方法是使用 Bonferroni correction。
小结
到现在为止还好。我们已经看到 Pearson』s *r* 如何用来计算两个变量之间的相关系数,以及如何评估结果的统计显著性。给定一组未知的数据,用于开始挖掘变量之间的重要关系是很有可能的。
但是,有一个重要的陷阱——Pearson』s r 只适用于线性数据。
看下面的图。它们清楚地展示了一种看似非随机的关系,但是 Pearson』s *r *非常接近于零。
原因是因为这些图中的变量具有非线性关系。
我们通常可以将两个变量之间的关系描绘成一个点云,分散在一条线的两侧。点云的分散度越大,数据越「嘈杂」,关系越弱。
然而,由于它将每个单独的数据点与整体平均值进行比较,所以 Pearson』s r 只考虑直线。这意味着检测非线性关系并不是很好。
在上面的图中,Pearson』s r 并没有显示研究对象的相关性。
然而,这些变量之间的关系很显然是非随机的。幸运的是,我们有不同的相关性方法。
让我们来看看其中几个。
距离相关性
距离相关性与 Pearson』s *r *有一些相似之处,但是实际上是用一个相当不同的协方差概念来计算的。该方法通过用「距离」类似物替代常用的协方差和标准差(如上所定义)的概念。
类似 Pearson』s r,「距离相关性」被定义为「距离协方差」,由「距离标准差」来归一化。
距离相关性不是根据它们与各自平均值的距离来估计两个变量如何共同变化,而是根据与其他点的距离来估计它们是如何共同变化的,从而能更好捕捉变量之间非线性依赖关系。
深入细节
出生于 1773 年的 Robert Brown 是一名苏格兰植物学家。当布朗在显微镜下研究植物花粉时,注意到液面上有随机运动的有机颗粒。
他没有想到,这一观察竟使他名垂千古——他成为了布朗运动的(重新)发现者。
他更不会知道,近一个世纪的时间后爱因斯坦才对这种现象做出了解释,从而证实了原子的存在。同年,爱因斯坦发表了关于狭义相对论的论文(E=MC²),并打开了量子理论的大门。
布朗运动是这样一个物理过程:由于与周围粒子的碰撞,微小粒子随机运动。
布朗运动背后的数学原理可以被推广为维纳过程(Weiner process),维纳过程在数学金融中最著名的模型 Black-Scholes 中也扮演着重要的角色。
有趣的是,Gabor Szekely 在 20 世纪中期的研究表明,布朗运动和维纳过程和一个非线性关联度量相关。
让我们来看看如何由长度为 N 的向量 x 和 y 计算这个量。
1. 首先,我们对每个向量构建 N×N 的距离矩阵。距离矩阵和地图中的道路距离表非常类似——每行、每列的交点显示了相应城市间的距离。在距离矩阵中,行 i 和列 j 的交点给出了向量的第 i 个元素和第 j 个元素之间的距离。
2. 第二,矩阵是「双中心」的。也就是说,对于每个元素,我们减去了它的行平均值和列平均值。然后,我们再加上整个矩阵的总平均值。
上述公式中,加「^」表示「双中心」,加「-」表示「平均值」。
3. 在两个双中心矩阵的基础上,将 X 中每个元素的均值乘以 Y 中相应元素的均值,则可计算出距离协方差的平方。
4. 现在,我们可以用类似的办法找到「距离方差」。请记住,若两个向量相同,其协方差与其方差相等。因此,距离方差可表示如下:
5. 最后,我们利用上述公式计算距离相关性。请记住,(距离)标准差与(距离)方差的平方根相等。
如果你更喜欢代码实现而非数学符号,那么请看下面的 R 语言实现:
任意两变量的距离相关性都在 0 和 1 之间。其中,0 代表两变量相互独立,而接近于 1 则表明变量间存在依赖关系。
如果你不想从头开始编写距离相关方法,你可以安装 R 语言的 energy 包(https://cran.r-project.org/web/packages/energy/index.html),设计此方案的研究者提供了本代码。在该程序包中,各类可用方案调用的是 C 语言编写的函数,因此有着很大的速度优势。
置信区间?
我们可以采取「重采样(resampling)」方法为距离相关性估计建立置信区间。一个简单的例子是 bootstrap 重采样。
这是一个巧妙的统计技巧,需要我们从原始数据集中随机抽样(替换)以「重建」数据。这个过程将重复多次(例如 1000 次),每次都计算感兴趣的统计量。
这将为我们感兴趣的统计量产生一系列不同的估计值。我们可以通过它们估计在给定置信水平下的上限和下限。
请看下面的 R 语言代码,它实现了简单的 bootstrap 函数:
如果你想建立统计显著性,还有另一个重采样技巧,名为「排列检验(permutation test)」。
排列检验与上述 bootstrap 方法略有不同。在排列检验中,我们保持一个向量不变,并通过重采样对另一个变量进行「洗牌」。这接近于零假设(null hypothesis)——即,在变量之间不存在依赖关系。
这个经「洗牌」打乱的变量将被用于计算它和常变量间的距离相关性。这个过程将被执行多次,然后,结果的分布将与实际距离相关性(从未被「洗牌」的数据中获得)相比较。
然后,大于或等于「实际」结果的经「洗牌」的结果的比例将被定为 P 值,并与给定的显著性阈值(如 0.05)进行比较。
以下是上述过程的代码实现:
最大信息系数
最大信息系数(MIC)于 2011 年提出,它是用于检测变量之间非线性相关性的最新方法。用于进行 MIC 计算的算法将信息论和概率的概念应用于连续型数据。
深入细节
由克劳德·香农于 20 世纪中叶开创的信息论是数学中一个引人注目的领域。
信息论中的一个关键概念是熵——这是一个衡量给定概率分布的不确定性的度量。概率分布描述了与特定事件相关的一系列给定结果的概率。
概率分布的熵是「每个可能结果的概率乘以其对数后的和」的负值。
为了理解其工作原理,让我们比较下面两个概率分布:
X 轴标明了可能的结果;Y 轴标明了它们各自的概率
左侧是一个常规六面骰子结果的概率分布;而右边的六面骰子不那么均匀。
从直觉上来说,你认为哪个的熵更高呢?哪个骰子结果的不确定性更大?让我们来计算它们的熵,看看答案是什么。
不出所料,常规骰子的熵更高。这是因为每种结果的可能性都一样,所以我们不会提前知道结果偏向哪个。但是,非常规的骰子有所不同——某些结果的发生概率远大于其它结果——所以它的结果的不确定性也低一些。
这么一来,我们就能明白,当每种结果的发生概率相同时,它的熵最高。而这种概率分布也就是传说中的「均匀」分布。
交叉熵是熵的一个拓展概念,它引入了第二个变量的概率分布。
crossEntropy <- function(x,y){
prX <- prop.table(table(x))
prY <- prop.table(table(y))
H <- sum(prX * log(prY,2))
return(-H)
}
两个相同概率分布之间的交叉熵等于其各自单独的熵。但是对于两个不同的概率分布,它们的交叉熵可能跟各自单独的熵有所不同。
这种差异,或者叫「散度」可以通过 KL 散度(Kullback-Leibler divergence)量化得出。
两概率分布 X 与 Y 的 KL 散度如下:
概率分布 X 与 Y 的 KL 散度等于它们的交叉熵减去 X 的熵。
KL 散度的最小值为 0,仅当两个分布相同。
KL_divergence <- function(x,y){
kl <- crossEntropy(x,y) - entropy(x)
return(kl)
}
为了发现变量具有相关性,KL 散度的用途之一是计算两个变量的互信息(MI)。
互信息可以定义为「两个随机变量的联合分布和边缘分布之间的 KL 散度」。如果二者相同,MI 值取 0。如若不同,MI 值就为一个正数。二者之间的差异越大,MI 值就越大。
为了加深理解,我们首先简单回顾一些概率论的知识。
变量 X 和 Y 的联合概率就是二者同时发生的概率。例如,如果你抛掷两枚硬币 X 和 Y,它们的联合分布将反映抛掷结果的概率。假设你抛掷硬币 100 次,得到「正面、正面」的结果 40 次。联合分布将反映如下。
P(X=H, Y=H) = 40/100 = 0.4
jointDist <- function(x,y){
N <- length(x)
u <- unique(append(x,y))
joint <- c()
for(i in u){
for(j in u){
f <- x[paste0(x,y) == paste0(i,j)]
joint <- append(joint, length(f)/N)
}
}
return(joint)
}
边缘分布是指不考虑其它变量而只关注某一特定变量的概率分布。假设两变量独立,二者边缘概率的乘积即为二者同时发生的概率。仍以抛硬币为例,假如抛掷结果是 50 次正面和 50 次反面,它们的边缘分布如下:
P(X=H) = 50/100 = 0.5 ; P(Y=H) = 50/100 = 0.5
P(X=H) × P(Y=H) = 0.5 × 0.5 = 0.25
marginalProduct <- function(x,y){
N <- length(x)
u <- unique(append(x,y))
marginal <- c()
for(i in u){
for(j in u){
fX <- length(x[x == i]) / N
fY <- length(y[y == j]) / N
marginal <- append(marginal, fX * fY)
}
}
return(marginal)
}
现在让我们回到抛硬币的例子。如果两枚硬币相互独立,边缘分布的乘积表示每个结果可能发生的概率,而联合分布则为实际得到的结果的概率。
如果两硬币完全独立,它们的联合概率在数值上(约)等于边缘分布的乘积。若只是部分独立,此处就存在散度。
这个例子中,P(X=H,Y=H) > P(X=H) × P(Y=H)。这表明两硬币全为正面的概率要大于它们的边缘分布之积。
联合分布和边缘分布乘积之间的散度越大,两个变量之间相关的可能性就越大。两个变量的互信息定义了散度的度量方式。
X 和 Y 的互信息等于「二者边缘分布积和的联合分布的 KL 散度」
mutualInfo <- function(x,y){
joint <- jointDist(x,y)
marginal <- marginalProduct(x,y)
Hjm <- - sum(joint[marginal > 0] * log(marginal[marginal > 0],2))
Hj <- - sum(joint[joint > 0] * log(joint[joint > 0],2))
return(Hjm - Hj)
}
此处的一个重要假设就是概率分布是离散的。那么我们如何把这些概念应用到连续的概率分布呢?
分箱算法
其中一种方法是量化数据(使变量离散化)。这是通过分箱算法(bining)实现的,它能将连续的数据点分配对应的离散类别。
此方法的关键问题是到底要使用多少「箱子(bin)」。幸运的是,首次提出 MIC 的论文给出了建议:穷举!
也就是说,去尝试不同的「箱子」个数并观测哪个会在变量间取到最大的互信息值。不过,这提出了两个挑战:
1. 要试多少个箱子呢?理论上你可以将变量量化到任意间距值,可以使箱子尺寸越来越小。
2. 互信息对所用的箱子数很敏感。你如何公平比较不同箱子数目之间的 MI 值?
第一个挑战从理论上讲是不能做到的。但是,论文作者提供了一个启发式解法(也就是说,解法不完美,但是十分接近完美解法)。他们也给出了可试箱子个数的上限。
最大可用箱子个数由样本数 N 决定
至于如何公平比较取不同箱子数对 MI 值的影响,有一个简单的做法……就是归一化!这可以通过将每个 MI 值除以在特定箱子数组合上取得的理论最大值来完成。我们要采用的是产生最大归一化 MI 总值的箱子数组合。
互信息可以通过除以最小的箱子数的对数来归一化
最大的归一化互信息就是 X 和 Y 的最大信息系数(MIC)。我们来看看一些估算两个连续变量的 MIC 的代码。
MIC <- function(x,y){
N <- length(x)
maxBins <- ceiling(N ** 0.6)
MI <- c()
for(i in 2:maxBins) {
for (j in 2:maxBins){
if(i * j > maxBins){
next
}
Xbins <- i; Ybins <- j
binnedX <-cut(x, breaks=Xbins, labels = 1:Xbins)
binnedY <-cut(y, breaks=Ybins, labels = 1:Ybins)
MI_estimate <- mutualInfo(binnedX,binnedY)
MI_normalized <- MI_estimate / log(min(Xbins,Ybins),2)
MI <- append(MI, MI_normalized)
}
}
return(max(MI))
}
x <- runif(100,-10,10)
y <- x**2 + rnorm(100,0,10)
MIC(x,y) # --> 0.751
以上代码是对原论文中方法的简化。更接近原作的算法实现可以参考 R package *minerva*(https://cran.r-project.org/web/packages/minerva/index.html)。
在 Python 中的实现请参考 minepy module(https://minepy.readthedocs.io/en/latest/)。
MIC 能够表示各种线性和非线性的关系,并已得到广泛应用。它的值域在 0 和 1 之间,值越高表示相关性越强。
置信区间?
为了建立 MIC 估计值的置信区间,你可以简单地使用一个像我们之前介绍过的 bootstrap 函数。我们可以利用 R 语言的函数式编程,通过传递我们想要用作参数的函数来泛化 bootstrap 函数。
bootstrap <- function(x,y,func,reps,alpha){
estimates <- c()
original <- data.frame(x,y)
N <- dim(original)[1]
for(i in 1:reps){
S <- original[sample(1:N, N, replace = TRUE),]
estimates <- append(estimates, func(S$x, S$y))
}
l <- alpha/2 ; u <- 1 - l
interval <- quantile(estimates, c(u, l))
return(2*(func(x,y)) - as.numeric(interval[1:2]))
}
bootstrap(x,y,MIC,100,0.05) # --> 0.594 to 0.88
小结
为了总结相关性这一主题,我们来测试下各算法在人工生成数据上的处理能力。
完整代码:https://gist.github.com/anonymous/fabecccf33f9c3feb568384f626a2c07
噪声函数
set.seed(123)
# Noise
x0 <- rnorm(100,0,1)
y0 <- rnorm(100,0,1)
plot(y0~x0, pch = 18)
cor(x0,y0)
distanceCorrelation(x0,y0)
MIC(x0,y0)
皮尔逊相关系数 r = - 0.05
距离相关性 = 0.157
MIC = 0.097
简单线性函数
# Simple linear relationship
x1 <- -20:20
y1 <- x1 + rnorm(41,0,4)
plot(y1~x1, pch =18)
cor(x1,y1)
distanceCorrelation(x1,y1)
MIC(x1,y1)
皮尔逊相关系数 r =+0.95
距离相关性 = 0.95
MIC = 0.89
简单二次函数
# y ~ x**2
x2 <- -20:20
y2 <- x2**2 + rnorm(41,0,40)
plot(y2~x2, pch = 18)
cor(x2,y2)
distanceCorrelation(x2,y2)
MIC(x2,y2)
Pearson』s r =+0.003
距离相关性 = 0.474
MIC = 0.594
三次函数
# Cosine
x3 <- -20:20
y3 <- cos(x3/4) + rnorm(41,0,0.2)
plot(y3~x3, type='p', pch=18)
cor(x3,y3)
distanceCorrelation(x3,y3)
MIC(x3,y3)
皮尔逊相关系数 r =- 0.035
距离相关性 = 0.382
MIC = 0.484
圆函数
# Circle
n <- 50
theta <- runif (n, 0, 2*pi)
x4 <- append(cos(theta), cos(theta))
y4 <- append(sin(theta), -sin(theta))
plot(x4,y4, pch=18)
cor(x4,y4)
distanceCorrelation(x4,y4)
MIC(x4,y4)
皮尔逊相关系数 r < 0.001
距离相关性 = 0.234
MIC = 0.218
2024年seo计算相关性 篇5
可以明确的回答,域名对SEO的影响还是蛮大的,理由如下:
理论上从搜索引擎,抓取、建库索引、收录、排序的工作原理上,搜索引擎对于任何域名都是公平对待的。
但在现实的工作中,搜索引擎对于部分域名特征还是区别对待的:
1、域名后缀
早期,从域名后缀的角度,它对SEO并没有影响,但随着越来越多的企业用户,采用站群进行百度快速排名,试图操控搜索结果排名,改变搜索排序。
由于站群需要大量域名,因此当时很多企业SEO人员,分分采用类似.pw,.top,.pro这类注册价格相对便宜的域名。
导致搜索引擎,对这类域名的收录与展现,并不是十分友好。
2、新注册域名
对于全新注册的如.cn,.net,.com的域名,在2018年,大部分站长反馈,百度收录相对困难,网站沙盒期的时间较长。
如果你的全新域名,不能够持续稳定的输出优质内容,那么对SEO还是有一定影响的。
3、高PR老域名
高PR,主要指PageRank,虽然谷歌SEO,早已停止更新PR,但我们知道PR是基于超链接技术获取的权值。
理论上,排除PR劫持,PR越高,它的外链质量越高。
当你通过域名抢注或者购买的渠道,获取这些具有高权重,老域名的时候,它在新站建立后,会有非常明显的收录加快,排名快速提升的情况。
这就是为什么域名抢注权重域名或高外链域名的成本越来越高的原因。
当然,这里涉及抢注域名与新站内容相关的问题,如果你试图利用老域名提权,快速排名,那么尽量确保,老域名与新域名的内容相关。
4、域名的长短 or 组合
① 域名长短
从SEO的角度,搜索引擎虽然可以抓取任何长度的URL,但现实操作中,搜索引擎更青睐抓取短域名,并且给予短网址排名。
简单理解,你需要确保域名简短,同时要保持URL结构简洁,不要试图利用较长的URL,不利于抓取。
② 域名组合
域名组合一个重要的作用就是便于记忆,那么间接的影响就是对品牌的强化,从SEO的角度,它严重影响,域名对品牌词的搜索,如果你的域名组合,有直接的搜索,长期变会在搜索引擎形成“搜索量”也就是影响力,它有利于提升整站的信任评级。
总结:蝙蝠侠IT,认为域名对于SEO的影响,还是蛮大的,上述内容,仅供大家参考。