前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用JAVA测量DEA页面的社交媒体流行度

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

作者头像
用户1127524
发布2018-02-06 12:01:15
1.3K0
发布2018-02-06 12:01:15

在前面的文章中,我们讨论了数据包络分析技术,我们已经看到它如何被用作一个有效的非参数排序算法。在这篇博文中,我们将实现一个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的一篇文章。

代码语言:txt
复制
 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一个空的输入向量。

代码语言:txt
复制
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分享。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据包络分析在JAVA中的实现
    • 1. lp_solve 5.5库
      • 2.DataEnvelopmentAnalysis类
        • 3. DeaRecord对象
          • 4. SocialMediaPopularity类
          • 使用数据包络分析JAVA实现
          • 必要的扩展
            • 1.加快实施
              • 2.扩大社交媒体计数数据库
                • 3.添加更多的社交媒体网络
                • 关于实施的最终意见
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档