利用图和侧信息的核概率矩阵

68866fcf052e411c960d0c3c598ec66e.png

文章信息

5df3d02ebdc89b1fff9c9e416a74d4b3.png

本周阅读的论文是一篇2012年发表在《Proceedings of the 2012 SIAM International Conference on Data Mining》上关于概率矩阵分解的文章,题目为《Kernelized Probabilistic Matrix Factorization Exploiting Graphs and Side Information》。

083e323588a2c883003febdb56bbd595.png

摘要

a4bb2c03d238442c1780f1e7e85c42bb.png

我们提出了一种新的矩阵补全算法——核化概率矩阵分解(Kernelized Probabilistic Matrix Factorization,KPMF),它有效地将外部辅助信息纳入矩阵分解过程中。与概率矩阵分解(Probabilistic Matrix Factorization,PMF)不同,PMF假设每行(以及每列)都有独立的潜在向量,并采用高斯先验;而KMPF使用具有高斯过程(Gaussian Process,GP)先验的潜在向量跨越所有行(以及列)。因此,KPMF明确地捕捉了跨行和列的底层(非线性)协方差结构。这一关键差异在适当的辅助信息(例如,在推荐系统中的用户社交网络)被纳入时,极大地提升了KPMF的性能。此外,高斯过程先验允许KPMF模型仅基于辅助信息就填充原始矩阵中完全缺失的行,而这对于标准的PMF公式是不可行的。在我们的论文中,我们主要处理带有行和/或列之间图形的矩阵补全问题作为辅助信息,但所提出的框架也可以轻松地与其他类型的辅助信息一起使用。最后,我们通过两种不同的应用展示了KPMF的有效性:1)推荐系统和2)图像恢复。

4bee080a80fc094ac1b1433c7026b063.png

介绍

02f5577bbe133ef4b2ff5c1757c1dfb4.png

缺失值预测的问题,尤其是矩阵补全在许多研究领域已经得到解决,比如推荐系统、地质统计学和图像恢复。给定一个带有缺失值的大小为927ccb7a42f05d89c142201a66648282.png的数据矩阵,目标是正确地添加缺失的条目,使它们与现有数据一致,其中现有数据可能包括数据矩阵中观察到的条目以及依赖于特定问题域的副信息。

在现有的矩阵补全技术中,基于因子分解的算法已经取得巨大成功和普及。这些算法中,矩阵的每一行,以及每一列,都有一个潜在向量,通过分解部分观察到的矩阵得到。因此,每个缺失条目的预测是对应行和对应列的潜在向量的内积。然而,这些技术经常会遇到现实场景中的数据稀疏性问题。例如,在多数商业推荐系统中,非缺失评分的密度小于1%,基于如此少的数据量进行缺失值预测是非常困难的。另一方面,除了数据矩阵,其他信息资源,比如推荐系统中用户的社交网络,有时很容易获得,并且可以提供有关底层模型的关键信息,而许多现有的分解技术只是忽略了这些侧面信息,或者本质上不能利用它。

为了解决这些缺陷,作者提出了一个核概率矩阵分解(KPMF),它通过核矩阵在行和列上合并侧信息。KPMF将一个矩阵建模为两个潜在矩阵,他们分别从两个不同的零均值高斯过程(GP)采样获得。GPs的协方差函数从侧信息中提取获得,并且分别编码跨行和跨列的协方差结构。在这篇文章中,作者从无向图(即用户社交网络)中提取协方差函数。然而,文章的通用框架还可以整合其他类型的侧信息。比如,当侧信息来自于特征向量,使用RBF核作为协方差函数可能是一种有效的方法。

虽然KPMF看上去与概率矩阵分解(PMF)以及其广义对应的贝叶斯PMF高度相关,使KPMF成为更强大的模型的关键区别在于,PMF/BPMF为每一行假设一个独立的潜在向量,而KPMF则使用跨越所有行的潜在向量。因此,与PMF/BPMF不同,KPMF能够显式地捕捉行间的协方差。另外,如果数据矩阵一整行的数据缺失,PMF/BPMF无法对其进行预测;相反,作为基于协方差函数的非参数模型,KPMF仍然可以仅基于行协方差进行预测。相似的,上述性质对于列也适用。

文章通过两个应用阐述KPMF:1)推荐系统以及2)图像复原。对于推荐系统,侧信息是用户社交网络;对于图像复原,侧信息来源于空间平滑假设,即小领域间的变化趋向于小且相关。实验表明KPMF始终优于最先进的协同过滤算法,并产生有希望的图像恢复结果。

04a091d52b99cf1fd7de244177990837.png

参数介绍

dbc3d21bc0f07584a0497d9c44305673.png

1. 符号

尽管提出的KPMF模型适用于其他矩阵补全问题,文章还是以推荐系统为例,给出相应的符号和说明。其中,这篇文章使用的主要符号如下:

2c3fd7a19fb35d6b54c2de4a67cbdd95.png

2. PMF和BPMF

给定一个形状为7a3ccd61f58bcea28b08095b76ae179d.png,且具有一定数量缺失值的实值矩阵R,矩阵补全的目标是预测矩阵的缺失值。概率矩阵分解(PMF)通过矩阵分解解决这个问题。假设两个潜在矩阵:6aa1c29ffe855df7f315b4f1c63609c0.pngf09eeaa2adec756eacbf9501aa941341.png,分别捕捉矩阵R的行列特征,那么PMF的生成过程如下所示:

1)对矩阵R的每一行n,生成b8127fe9b1ed0c7858594d9585d70a28.png87c6c7862750c07f2183a51f70f18d61.png,其中I表示单位矩阵;

2)对矩阵R的每一列m,生成50ac417e63ad5e7a506e3f8159ca6e4f.png36f4240a0a64a892f1f9dc2a2156fa45.png;

3)对于每个未缺失的条目(n,m),生成2f1837f76044ce637b82ddf8e7b11927.png

该模型的参数86781161864c651902aee4f62bd5de50.png9fc1def99c2dd0f9a5e4c53f89347dc8.png具有零均值球面高斯先验,每个条目21838b1d685f96e3e5d5200cf1a00224.png从一个多元高斯分布生成,其中均值由288706aedd5144226683469845d9218e.png605f82b7f34781b540e9236053a8f529.png的内积决定。潜在矩阵U和V的对数后验给定如下:

c45e0e9d4d76b03c87cc61bd277c1c1e.png

其中,e28dcc9ff3991ab3cec687f1fefb3601.png表示一个指示指标,如果d04eed363e8ebf8a9b478ee9d5187764.png是一个可观测的条目,则取1;否则取0。A是R中没有缺失数值的条目的数量,C是一个不依赖于U和V的常数。MAP推理分别最大化U和V的最大似然,可以被用于预测数据矩阵R中的缺失条目。

作为PMF的扩展,贝叶斯PMF(BPMF)为每个58a8e8bc30b5ec65cf84ff5ee0110a95.pngb6cfb34cb3f22b3aaed2043d4774d3e9.png引入了一个全贝叶斯先验。接着,46c59645bb8688a7f3617523053dc756.pnga7b4dc4af8477ee8c1ea876263c3ffcd.png类似)从高斯分布ecd5c8fe6fb1bbb3bd94318ba3c0b239.png中采样获得,其中的超参数e08f47182d404e1f8616b1449d0be798.png进一步从Gaussian-Wishart先验中采样获得。

2f9ac96c03889bd96493fcb23d41d643.png

模型介绍

18ba0911e3bb995913b68790d07a085d.png

  1. KPMF

文章提出一个核概率矩阵分解(KPMF)模型,并提出梯度下降和随机梯度下降方法用于学习模型。

ff47e550e4eb23d8cfbb53987721c4da.png

图1:(a)PMF中生成R的过程;(b)KPMF中生成R的过程

在KPMF中,潜在矩阵每一列的先验分布d6c78e6dfb1d7aa8a2fb4700b33accf5.pngd141a882adbcadc335d3d5c882201cf0.png服从均值为0的高斯过程。高斯过程是多元高斯分布的推广。一个多元高斯分布由一个均值向量和一个协方差矩阵决定,而高斯过程a535d2cd1a361144ddcfbace7f511ead.png由一个均值函数3fb6589eececc2748912555bc23f998a.png和一个协方差函数9045c8ff3573aa2263a383b832211708.png决定。在文章的问题背景下,x是一个矩阵行(列)的索引。不失一般性,令5f77b429b5f8f4dcbd6bd55b7c6fd1c9.png41b6087cc8a4fd3216114d6ae90f225c.png表示相关的核函数,表示任何行(或列)间的协方差。同时,令e0328067f051c2ce564b4ac89effee6a.pnga58f48bfc1cb57687e424af060a48c6b.png分别表示R中行和列的全协方差矩阵。在先验中使用e2581a3d5073b38685980cb8d0d011ad.png5ebb8ff48c7678bc71bb914ed98e8f88.png以进行潜在因子分解可以同时捕获行之间和列之间的潜在协方差。

假设4c1ea638446816dc7cbcfe5cc36906d5.pnge04acc9ed56199e5ba9db74688349efd.png已知,KPMF的生成过程如下所示。

1)生成d9370606e46fd5e77d3af06c1a30c300.png

2)生成1e07d14d7c347c21fd3e2c755316c0a9.png

3)对于每个没有缺失的条目d0ce63ae1d930917a121d4736eed1a18.png,生成5e859c8f826d0b17ea4e8f7aee738ed5.png15c182dda642714cdac1a3694fabb7f5.png,其中是一个常数。

给定潜在矩阵U和V,目标矩阵R中观测到的条目的似然函数如下:

041ba5dd7d30460a84f980a360d9dc07.png

其中U和V的先验给定如下:

7a9d8f30503b86419932126d95ea2022.png

为了简单起见,通过498310455162cca4a9953bfb5b658fd0.png定义dfdad0d44071f064d9cb664af5a1fc41.png,通过定义403d5ec6edb6c4c234a601f5e29dcda8.png。因此U和V的对数后验分布给定如下:

eb163e1d198391a7c3855025ea5ebaae.png

其中,A是R中非缺失条目的数量,是K的行列式,C是一个常数项,与潜在矩阵U和V无关。

04c53bf3b29c8e6b5cf89f268bfbfb08.png

图2:(a)在PMF/BPMF中,U是以“row-wise”的方式进行采样;(b)在KPMF中,U是以“column-wise”的方式进行采样

2. KPMF v.s. PMF/BPMF

图2解释了KPMF和PMF/BPMF间的差异。在PMF/BPMF中,U以一种“row-wise”的方式进行采样,即8d19e3b67a202324a1ea3756b850a62c.png对R中的每一行进行采样,a9c7ea75eac7a77fdbdb1e8707bc123e.png在给定先验条件下是条件独立的。因此,行间的关联性在模型中没有被捕捉。相反,在KPMF,U以一种“column-wise”的方式进行采样,即对于每一个D潜在因素,4b6aa395d865062cde328180d5a3cbb3.png对R中的所有行进行采样。具体来说,225250c1b33517a73da761e315d0440f.png从一个高斯过程中采样而得,其中协方差4ec0cafac88b74fcb5ed5f2711833a77.png捕捉了行的相关性。通过这种方式,在训练过程中,每一行的潜在因子126c135f19eb57cb44d1ca339028c469.png通过ba86ac60953359baf06b1bc848238411.png与其他行的潜在因子8edb5d5a7a10644e270d776cb58561ce.png进行关联。如果两行潜在因子根据侧信息共享一些相似性,相关的潜在因子在经过训练后也会比较相似,这是在给定侧信息的情况下希望直观达到的效果。相似的,这些描述同样适用于V和R的每一列。KPMF和BPMF的差异是很微小的,但他们实际上是完全不同的模型,并且不能视为彼此的特殊情况。PMF是两种模型的一个简单的特殊例子,既没有跨行相关性,也没有捕获潜在因素之间的相关性。

PMF和BPMF中的行和列的独立性极大削弱了模型的功能,因为在实际场景中,行(列)之间往往存在很强的相关性。例如,在推荐系统中,用户对商品的评分(通过行表示)很可能被具有社会关系的其他用户(朋友、家庭等)所影响。PMF和BPMF难以捕捉这种关联的依赖性,而文章提出的KPMF在这方面具有更优的性能。

3. 用于KPMF的梯度下降

文章通过MAP估计来学习潜在矩阵U和V,它们在前文最大化对数后验,相当于最小化以下的目标函数:

55f63954d94fe82e806ca20718a0040d.png

最小化目标函数E可以通过梯度下降实现。具体来说,梯度给定如下:

623feab70cf8ff4ee6b192e0256ca948.png

其中,d7b181ea60a0f966568666e91271ea9d.png表示一个N维的单位向量,第n个元素取值为1,其他为0。U和V的更新如下所示:

0822801e8323bedeef5ed2ef25dd1cee.png

其中,表示一个学习率。算法通过上述两个等式分别更新U和V直到收敛。需要注意的是,由于0234671f5d216ae0d8a4476ed37005d0.pngc7ff5a4419f86904bbec94a779697bba.png在整个迭代过程中保持固定,所以5d540f73d668c8ea6942e952ca05d040.png和需要在初始化计算一次即可。

先假设R中的一整行或列缺失。虽然PMF和BPMF无法解决这种问题,但是只要给定合适的侧信息,KPMF仍然可以有效解决该问题。在这种情况下,上述更新过程变为

6118a36835f2afec25029d518c06bb4e.png

在这种情况下,相应4800396916510392b06a109f50ee5c0e.png的更新是基于当前状态下U的所有行的加权平均,包括那些全部缺失的行和没有缺失的行,且权重318db53d81c1eb6b52bf39c55e71a802.png反映了当前行n与其他行的相关性。这对于V和列都一样。

4. 用于KPMF的随机梯度下降

由于随机梯度下降(SGD)的收敛通常快于梯度下降,因此文章同样推导了使用SGD更新KPMF。这种情况下,我们可以将前文梯度下降中的目标函数改写为:

0afb78a71d1a3222697dae806f48c21d.png

其中,230493ef64524fc2f778d424ad52b4d5.png表示矩阵X的迹,另外,

afc92e748a6d82f66bde8a1c871006fc.png

相似的,

c85d9663652db42e5b21cf6b7be55a06.png

因此,目标函数可以转化为

167b0c9d8938f1c5743aed5a4adbdc02.png

34f5e4fd31bd0964ee21f1c6432687a0.png

其中,53e9af454660aaccf4f7e0414c196523.png是第n行中未缺失条目的数量,58fc66b505cd3e26220587aea27693f0.png是第m列中未缺失条目的数量。最后,对于每一个没有缺失的条目(n, m),b1f96c9228124e40d3342393fe17988d.png关于ebf39b1adfa584d0e459b006cd613c7c.png0e99a9e338a36761c9babd31155cdd9e.png的梯度分别是:

5a306f1da6019655ba0ba638ff9bda72.png

5. 利用对角核学习KPMF

如果b53d231d8d1b3cfd5ba1aba884b05a5b.png69c3ceecb99e1bc0eec8885c604235ef.png均为对角矩阵,意味着行和列均是独立同分布,那么KPMF就会退化为PMF。如果仅有一个核是对角的,那么对应的潜在矩阵可以被边缘化,从而仅在一个潜在矩阵上产生MAP推理问题。为了解释这个情况,假设8ebe7957fdc38f19bad2ca68cf3aaaed.png是对角的ffddd9ca9dc56204ce6e42c97f421348.png,那么R中每一列的似然函数给定如下:

3fea938d084cab0d11d2db6b67320a30.png

其中,b921d93794b94ef86f9f76011ce06f6a.png表示第m列中未缺失条目的行索引,如果一共有个未缺失值的条目在第m列,ca57e357095a8c23efaf017cb869ea9a.png是一个维向量,540e9925744baf167554ab151e069b67.png是一个78dc3b542f7461aaf92c4c3950e6b881.png的矩阵,每一行对应第m列中一个未缺失的条目。由于e1132dd95d6e2e6efad9a30f69e74150.png,可以对V求边际获得

4b08f874b96c5edd8336c3c9c6e85d79.png

目标函数转变为:

a4f394ee9096f657dc641590899a332b.png

其中,3892e5a60db3b54f83eeff6eda431112.png。另外,由于V在目标函数中不再是一项,因此梯度下降仅仅在U中进行。但是,在该例子中,每次迭代中更新U涉及到C的逆,当N很大时就变得难以计算,因此本文在实验中不使用这种范式。

6. 预测

基于梯度下降或随机梯度下降的学习可以有效估计潜在矩阵和。对于任意缺失的条目8c670dcdf6da3aee86797718d6a08d31.png,最大似然估计是相应潜向量的内积,即80efc1141f3e3101376faf5762e82060.png

7. 核函数选择

(1)基于图的核。为了构建合适的核矩阵以适应文章所研究的问题,作者使用用户社交网络作为一个无向、无权重图G,其中节点和边分别代表用户和他们之间的连接。G的邻阶矩阵的元素表示为,如果用户i和用户j间存在一条边,则取值为1,否则为0。G的拉普拉斯矩阵定义为e1f610a0e97589d0ab7fb01def4c6191.png,其中度矩阵D是一个对角矩阵,其对角元素表示为cce7e8fdf9c462e4aa9aa3a7bcec1665.png

基于图的核提供了一种捕获图中节点之间复杂结构的方法。在文章的案例中,基于图的核定义了用户对某种商品的品味的相似度。通常来说,用户与他们的朋友和家庭通常有相似的品味,因此对于同一件物品的评分应该是存在关联性的。基于图的核可以在社交网络上捕捉这种效应,得到的核矩阵提供了关于用户评分模式的关键信息。

(2)扩散核。扩散核来源于矩阵指数的思想,对热量等物质的扩散过程有很好的解释。具体来说,如果在节点i注入某些物质并沿图的边流动,65736c033fef92171a7d473f63a9e286.png可以被认为稳定状态下在节点j处积累的物质量。扩散核直观地捕获了图中节点之间的全局结构,计算方法如下:

48a25b2f7a6ec4b5764054aa6c420246.png

其中,是一个带宽参数以决定扩散的规模(e5ca5ddba8ecde88d2033c2c71cf6c54.png表示没有扩散)。

(3)通勤时间核。通勤时间核与所谓的平均通勤时间(随机步行者在图中的两个节点之间通勤所需的步数)密切相关,可以使用拉普拉斯矩阵的伪逆来计算:6c32b1a091993302c974733f9699b1c0.png。另外,由于acea051146dfa373b432d17393e77f1c.png是条件正定的,f51249a1d4d15a9682e770d313d47494.png就像图中节点的欧式距离。因此,节点可以等距嵌入到大小为的子空间中(n是节点的数量),其中节点间的欧氏距离为2aa7a8317f6df786c0b38334c9e0b0ab.png

(4)正则化拉普拉斯核。通过引入一种在图上执行正则化的方法,惩罚相邻节点之间的变化。具体来说,图的拉普拉斯算子可以被等价地定义为图的节点上的线性算子,并在自然地推导出一个半范数。这个半范数量化了相邻节点的变化,可用于设计正则化算子。另外,这种正则化算子产生了一组图核,其中包括正则化拉普拉斯核:

1d6b39d3c063c883ca2409b89557de9b.png

a547a9f867c0381a7f6c20f1fe4ae051.png

实验研究

9d146f0c40dc3a98b2044ec87bdf341b.png

文章在两个真实世界的数据集上进行了实验来测试KPMF在矩阵补全方面的有效性,数据集包括社交电影网站数据和用户评论网站数据。实验结果表明,相比于现有先进的方法,KPMF在平均绝对误差和均方根误差等常见指标上,具有更好的性能和精度。感兴趣的读者可以阅读原文实验部分。

d508777c0c45ba8af3201c3e5f19f10b.png

结论

5832c0de098ee222dd3bb40b05c20caf.png

本文提出一个全新的矩阵补全算法KPMF,它同时利用数据矩阵的行和列之间的潜在协方差进行缺失值预测。KPMF在生成模型中为潜在矩阵引入高斯过程先验,使学习到的潜在矩阵遵从行、列间的协方差结构,有效整合了侧信息。如实验结果所示,这一特性在提高模型性能方面起着至关重要的作用,特别是当观察到的数据矩阵是稀疏的时候。

KPMF的另一个优点是即使在整行或整列缺失的情况下,只要给定相应的侧信息,就可以完成缺失值的预测。原则上,KPMF适用于一般的矩阵补全问题,但本文主要关注两个特定的应用:推荐系统和图像恢复。在未来的工作中,可以推广当前的模型来处理加权条目的情况,其中不同的条目根据一些预定义的标准被分配不同的权重。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/533262.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32篇】DRV8425驱动步进电机

【STM32篇】4988驱动步进电机_hr4988-CSDN博客 在上篇文章中使用了HR4988实现了步进电机的驱动,在实际运用过程,HR4988或者A4988驱动步进电机会存在电机噪音太大的现象。本次将向各位友友介绍一个驱动简单且非常静音的一款步进电机驱动IC。 1.DRV8425简介…

头歌-机器学习实验 第8次实验 决策树

第1关:什么是决策树 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握决策树的相关基础知识。 引例 在炎热的夏天,没有什么比冰镇后的西瓜更能令人感到心旷神怡的了。现…

Fast-Planner(五)详解TopologyPRM

本文上接Fast-Planner第一篇文章的内容,本文主要详解这一系列的第二篇Robust Real-time UAV Replanning Using Guided Gradient-based Optimization and Topological Paths中的TopologyPRM即其代码。如有问题,欢迎各位大佬评论指出,带着我一起…

C语言面试题之返回倒数第 k 个节点

返回倒数第 k 个节点 实例要求 1、实现一种算法,找出单向链表中倒数第 k 个节点;2、返回该节点的值; 示例:输入: 1->2->3->4->5 和 k 2 输出: 4 说明:给定的 k 保证是有效的。实…

Unity 获取RenderTexture像素颜色值

拿来吧你~ 🦪功能介绍🌭Demo 🦪功能介绍 💡不通过Texture2D 而是通过ComputerShader 提取到RenderTexture的像素值,效率有提升哦! 💡通过扩展方法调用,方便快捷:xxxRT.G…

无人机低空数字摄影测量系统

一、 系统概述 系统完全基于IDL设计实现,包括界面布局到人机交互再到底层核心函数功能。整体设计框架基于数字摄影测量的专业处理流程,实现了数据输入、数据预处理、影像信息检测、空间定向、地形三维建模、专题信息提取、成果输出与更新等功能。同时为…

【linux】yum 和 vim

yum 和 vim 1. Linux 软件包管理器 yum1.1 什么是软件包1.2 查看软件包1.3 如何安装软件1.4 如何卸载软件1.5 关于 rzsz 2. Linux编辑器-vim使用2.1 vim的基本概念2.2 vim的基本操作2.3 vim命令模式命令集2.4 vim底行模式命令集2.5 vim操作总结补充:vim下批量化注释…

Spring AI 应用 - 智能记者

参考实现: https://github.com/mshumer/ai-journalist 上面是通过 Claude 配合 SERP 搜索 API,使用 Python 语言实现的,本文通过 GitHub Copilot 辅助改为了基于 Spring AI 的 Java 版本,本文使用的 OpenAI。 AIJournalist 实现…

绝地求生:经典杜卡迪与传奇杜卡迪的区别以及亮点

大家好,这里是闲游盒. 杜卡迪联名已正式加入PUBG,本次联名分为两个版本分别为:经典杜卡迪以及传奇杜卡迪 那接下来,就给大家展示一下经典杜卡迪(红)以及传奇版本杜卡迪(暮光粉)的区…

Acwing.4009 收集卡牌(期望dp)

题目 小林在玩一个抽卡游戏,其中有 n种不同的卡牌,编号为 1到 n。 每一次抽卡,她获得第 i种卡牌的概率为 pi。 如果这张卡牌之前已经获得过了,就会转化为一枚硬币。 可以用 k枚硬币交换一张没有获得过的卡。 小林会一直抽卡&…

2024大模型落地应用案例集(免费下载)

【1】扫码关注本公众号 【2】私信发送 2024大模型落地应用案例集 【3】获取本方案PDF下载链接,直接下载即可。

初识C++之内联函数 auto关键字

初识C之内联函数 auto关键字 文章目录 初识C之内联函数 auto关键字一、 内联函数1.1 定义1.2 应用1.3 特性 二、auto关键字2.1 简介2.2 auto的详细使用2.3 范围for(C)2.4 注意事项 一、 内联函数 1.1 定义 以inline修饰的函数叫做内联函数,…

UDP实现Mini版在线聊天室

实现原理 只有当客户端先对服务器发送online消息的时候,服务器才会把客户端加入到在线列表。当在线列表的用户发消息的时候,服务器会把消息广播给在线列表中的所有用户。而当用户输入offline时,表明自己要下线了,此时服务器把该用…

跨域问题一文解决

📝个人主页:五敷有你 🔥系列专栏:Vue ⛺️稳中求进,晒太阳 一、为什么会出现跨域的问题? 是浏览器的同源策略,跨域也是因为浏览器这个机制引起的,这个机制的存在还是在于安全…

【MATLAB源码-第6期】基于matlab的QPSK的误码率BER和误符号率SER仿真。

1、算法描述 QPSK,有时也称作四位元PSK、四相位PSK、4-PSK,在坐标图上看是圆上四个对称的点。通过四个相位,QPSK可以编码2位元符号。图中采用格雷码来达到最小位元错误率(BER) — 是BPSK的两倍. 这意味著可以在BPSK系统…

利用DataX工具,实现MySQL与OceanBase的数据同步实践

数据迁移是经常遇到的需求,市面上为此提供了众多同步工具。这里将为大家简要介绍DataX的使用。DataX 是阿里云 DataWorks数据集成 的开源版本,它作为离线数据同步的工具/平台,在阿里巴巴集团内部被广泛应用。DataX 能够实现多种异构数据源之间…

图书馆自习室|基于SSM的图书馆自习室座位预约小程序设计与实现(源码+数据库+文档)

图书馆自习室目录 基于SSM的图书馆自习室座位预约小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端: 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&#xff1a…

[opencv]VideoWriter写出fourcc格式

fourcc支持的格式 fourcc全名Four-Character Codes,四字符代码,该编码由四个字符组成 cv2.VideoWriter_fourcc(O,O,O,O) cv2.VideoWriter_fourcc(*OOOO) 通常写法有上述两种形式,O代表一个字符,通常有 支持avi格式的有&#…

麒麟KOS删除鼠标右键新建菜单里不需要的选项

原文链接:麒麟KOS删除鼠标右键新建菜单里不需要的选项 Hello,大家好啊!在日常使用麒麟KOS操作系统时,我们可能会发现鼠标右键新建菜单里包含了一些不常用或者不需要的选项。这不仅影响我们的使用效率,也让菜单显得杂乱…

【C++学习】C++11新特性(第一节)

文章目录 ♫一.文章前言♫二.C11新特性♫一.统一的列表初始化♫二.std::initializer_list♫三.声明♫四.decltype关键字♫五.nullptr♫六.新增加容器---静态数组array、forward_list以及unordered系列♫6.1unordered_map与unoredered_set♫6.2array♫6.3 forward_list&#xff…