用JAVA测量DEA页面的社交媒体流行度

在前面的文章中,我们讨论了数据包络分析技术,我们已经看到它如何被用作一个有效的非参数排序算法。在这篇博文中,我们将实现一个JAVA数据包络分析的实例,我们将用它来评估网页上的网页和文章的社交媒体流行度。该代码是开源的(在GPL v3许可下),您可以从Github免费下载。

更新:Datumbox机器学习框架现在是开源的,可以免费下载。查看包com.datumbox.framework.algorithms.dea以查看Java中数据包络分析的实现。

数据包络分析在JAVA中的实现

代码是用JAVA编写的,可以直接从Github下载。它在GPLv3许可下,所以可以随意使用它,修改它,并自由地重新分配。

该代码实现了数据包络分析算法,使用lp_solve库来解决线性规划问题,并使用来自网站SEO分析索引的提取数据,以便基于Facebook,Google+和Twitter上的份额构建网页的综合社交媒体流行度度量标准。在前面的文章中介绍了算法的所有理论部分,在源代码中可以找到关于这个实例的详细的javadoc注释。

下面我们提供一个关于实现架构的高级描述:

1. lp_solve 5.5库

为了解决各种线性规划问题,我们使用一个名为lp_solve的开源库。这个特定库是用ANSI C编写的,并使用JAVA包装调用库的方法。因此,在运行代码之前,您必须在您的系统上安装lp_solve。库的二进制文件可用于Linux和Windows,您可以在lp_solve文档中阅读有关安装的更多信息。

在尝试运行JAVA代码之前,请确保您的系统上安装了特定的库。有关安装和配置库的任何问题,请参阅lp_solve文档。

2.DataEnvelopmentAnalysis类

这是DEA算法实现的主要类。它实现了一个名为estimateEfficiency()的公共类函数,它获取记录的Map并返回它们的DEA分数。

3. DeaRecord对象

DeaRecord是一个特殊的对象,用于存储我们记录的数据。由于DEA需要分离输入和输出,因此DeaRecord对象以DEA可以处理的方式分别存储我们的数据。

4. SocialMediaPopularity类

SocialMediaPopularity是一个应用程序,它使用DEA来评估社交媒体网络上Facebook的喜欢,Google的+1和Twitter中的转推的网页流行度。它实现了两个受保护的类函数:calculatePopularity()和estimatePercentiles()以及两个公共类函数loadFile()和getPopularity()。

calculatePopularity()根据社交媒体计数使用DEA来估计页面的分数。estimatedPercentiles()类函数获取DEA分数并将其转换为百分位数。总的来说,百分比比DEA分数更容易解释; 因此当我们说一个网页的流行分数是70%时,这意味着该网页比70%的网页更受欢迎。

为了能够估计一个特定页面的流行度,我们必须有一个包含其他页面的社交媒体数据的数据集。这是有道理的,因为为了预测哪个网页是受欢迎的,哪些不是,您必须能够将其与网络上的其他页面进行比较。为此,我们使用以txt格式提供的网站SEO分析索引的小型匿名样本。您可以通过从网站上的更多页面提取社交媒体数量来构建自己的数据库。

loadFile()类函数用于加载DEA的统计信息,getPopularity()类函数是一种易于使用的方法,可以获取Facebook的喜欢,Google的+1和一个页面的转推数量,并评估其在社交媒体上的流行度。

使用数据包络分析JAVA实现

在DataEnvelopmentAnalysisExample类中,我提供了2个不同的如何使用代码的例子。

第一个例子直接使用DEA方法来根据它们的输出(ISSUES,RECEIPTS,REQS)和输入(STOCK,WAGES)来评估组织单位的效率。这个例子来自DEAzone.com的一篇文章。

 Map<String, DeaRecord> records = new LinkedHashMap<>();
 records.put("Depot1",new DeaRecord(new double[]{40.0,55.0,30.0},new double[]{3.0,5.0})); //...adding more records here...          
 DataEnvelopmentAnalysis dea = new DataEnvelopmentAnalysis();
 Map<String, Double> results = dea.estimateEfficiency(records);
 System.out.println((new TreeMap<>(results)).toString());

第二个示例使用我们的社交媒体流行度应用程序,通过使用来自社交媒体的数据来评估页面的流行度,例如Facebook喜欢,Google + 1和Tweets。所有的社交媒体计数都被标记为输出,我们传递给DEA一个空的输入向量。

SocialMediaPopularity rank = new SocialMediaPopularity();
rank.loadFile(DataEnvelopmentAnalysisExample.class.getResource("/datasets/socialcounts.txt"));
Double popularity = rank.getPopularity(135, 337, 9079); //Facebook likes, Google +1s, TweetsSystem.out.println("Page Social Media Popularity: "+popularity.toString());

必要的扩展

所提供的代码只是DEA如何被用作排名算法的一个例子。为了改进实施,下面是几个扩展:

1.加快实施

这个DEA实现对数据库中所有记录的DEA得分的评估。由于我们需要解决像数据库中记录数量那样多的线性规划问题,这使得实施变得缓慢。如果我们不需要计算所有记录的分数,那么我们可以显著加快执行速度。因此,该算法的小扩展可以使我们更好地控制哪些记录应该被解决,哪些只能被用作约束。

2.扩大社交媒体计数数据库

提供的社交媒体计数数据库由来自网站SEO分析索引的1111个样本组成。为了能够估计更准确的流行分数,需要更大的样本。您可以通过估计来自网站更多页面的社交媒体数量来创建自己的数据库。

3.添加更多的社交媒体网络

该实现使用Facebook的喜欢,Google的+1和推文的数量来评估文章的受欢迎程度。不过,来自其他社交媒体网络的指标可以很容易地被考虑在内。您只需要从您感兴趣的网络中构建一个社交媒体数据库,然后展开SocialMediaPopularity类来处理它们。

关于实施的最终意见

为了能够扩展实现,您必须对Data Envelopment Analysis的工作原理有一个很好的理解。这在前面的文章中已经介绍过了,所以在继续进行任何更改之前,请确保您阅读了教程。此外,为了使用JAVA代码,您必须在您的系统中安装lp_solve库(参见上文)。

如果你在一个有趣的项目中使用这个实现,那么请联系我们,我们将在我们的博客上展示你的项目。另外,如果你喜欢这篇文章,请花点时间在Twitter或Facebook分享。

本文的版权归 用户1127524 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏九彩拼盘的叨叨叨

通过分类来管理

在工作的过程中,发现很多人都没有分类的习惯:电脑桌面放着各种各样一大堆的文件;一个原型图文件夹下无序的放着很多原型图;图标文件下放着一堆文件;写的技术类的长文,...

824
来自专栏大数据和云计算技术

Automatic Management of Data and Computation in Datacenters

image.png 最近在研究数据中心的数据管理和性能优化,看了一篇2010的论文Nectar:Automatic Management of Data and...

33810
来自专栏从流域到海域

用JAVA的DEA算法衡量社交媒体页面的流行度

原文作者:Vasilis Vryniotis

2656
来自专栏安智客

基于可信环境的远程人脸识别认证系统技术要求

本篇针对目前信安标委《基于可信环境的远程人脸识别认证系统技术要求》标准规范征集意见稿进行学习!

2293
来自专栏机器之心

机器之心实操 | 亚马逊详解如何使用MXNet在树莓派上搭建实时目标识别系统

选自AWS 机器之心编译 参与:思源 在过去的五年中,深度神经网络已经解决了许多计算困难的问题,特别是计算机视觉。因为深度神经网络需要大量的计算力来训练模型,所...

3599
来自专栏马洪彪

eml文件解析实例,简历信息抓取工具

先上工具效果图,如下图所示: ? 背景 某公司使用58同城进行人员招聘,当有应聘人员通过58同城给该公司投简历后,58同城会发送一份邮件到该公司的注册邮箱,邮件...

3967
来自专栏AI研习社

拿 NLP 来分析我自己的 Facebook 数据,会发生什么?

当一个 NLP(自然语言处理)在观察我的写作风格(也是如何处理我自己的 Facebook 数据!)

1242
来自专栏大数据挖掘DT机器学习

机器学习数据采集入门经验分享

在新的一年里,很多人都在思考如何利用机器学习(ML)算法来提高产品或服务的质量。 PredictionIO公司与许多公司合作,部署他们的第一个ML系统和大数据基...

4108
来自专栏about云

Kafka +深度学习+ MQTT搭建可扩展的物联网平台【附源码】

物联网+大数据+机器学习将会是以后的趋势,这里介绍一篇这方面的文章包含源码。 混合机器学习基础架构构建了一个场景,利用Apache Kafka作为可扩展的中...

3403
来自专栏1001482的专栏

从 0 到 1 打造轻量级图像识别服务框架

在这个AI时代,图像识别技术作为其基础能力之一,也在快速发展中,今天来聊聊图像识别的服务运行框架。

3.4K2

扫码关注云+社区