用Weka预测Google Play评分

时间:2013-04-24 13:42:22

标签: machine-learning google-play weka metrics prediction

我是Weka 3.7.9的新手。 我有一个arff文件,其中包含这些属性,类和数据: http://pastebin.com/s8hivv0U

此文件代表Android项目。 所以,1-9。属性是不同类型的指标:

  1. lloc - 逻辑行代码
  2. nid - ID数量
  3. nle - 嵌套级别
  4. nel - 元素数量
  5. nip - 输入元素的数量
  6. activites - 来自AndroidManifest的活动数量
  7. inside-permissions - AndroidManifest内部权限的数量
  8. outside-permissions - AndroidManifest的外部权限数
  9. 所有权限 - AndroidManifest的权限数量
  10. class {4,4.6,3.8,2.6。 5,3.2,3.6,4.2,4.1}
  11. 最后一个是包含Google Play项目评分的课程。

    所以每一行都是Andorid项目。 (当然,原始* .arff文件包含更多项目......)

    我想用学习算法分析数据。 预测因子从1到9。 我想确定一下,哪些预测因素主要影响Google Play评分。

    我该怎么做? 什么是最好的方法呢? 如果有可能的话,我想请你向我解释一下。

    提前致谢, 彼得

1 个答案:

答案 0 :(得分:0)

班级类型

首先,如果您希望输出是连续的,我建议您将class类型更改为numeric。否则,我建议将类标签类型保留为nominal(就像您现在一样),但将评分更改为{1, 2, 3, 4, 5}

如果更改为数字输出(例如,您可以预测4.5星),那么您将需要使用能够使用数字类的分类器。

使用Weka

我建议您查看documentation以了解有关使用Weka的更多信息,可能需要通过一些教程。例如,双击ARFF文件后,您应该在Classify选项卡中完成大部分工作。选择一个分类器,然后选择Start

量词

回归

Regression,特别是linear regression很好,因为它很容易解释,因为它只是为每个属性赋予权重,并使用这些权重的乘法和加法来提供输出。

我使用了您的示例文件并使用LinearRegression对其进行了测试,但是对于这么少的示例,它确定最佳模型只是输出3.9667作为评级,这将给您一个平均绝对误差0.4722

不满意,接下来我尝试了SimpleLinearRegression,它提供了一个模型-0.02 * activites + 4.13,并给出了0.472的平均绝对误差。

SMOreg提供以下模型

weights:
 +       0.1147 * (normalized) lloc
 -       0.0404 * (normalized) nid
 -       0.1662 * (normalized) nle
 -       0.0647 * (normalized) nel
 +       0.3385 * (normalized) nip
 -       0.1352 * (normalized) activites
 -       0.019  * (normalized) inside-permissions
 -       0.0464 * (normalized) outside-permissions
 +       0.1602 * (normalized) all-permissions
 +       0.5921

,平均绝对误差为0.3859。但是在这一点上,我认为只有这么少的数据点,你就是overfitting你的数据。

最近邻居

使用k-nearest neighbors可能是一种可行的方法,如果您有更多数据(在Weka中称为KStar)。

决策树

DecisionStump算法输出此模型的平均绝对误差为0.3424,但也可能过度拟合。

inside-permissions <= 1.5 : 2.6
inside-permissions > 1.5 : 4.090909090909091
inside-permissions is missing : 3.966666666666667

更多数据

正如您所看到的,考虑到您只有12个数据点,模型和错误率并不是很好。要构建一个非常好的模型,您需要更多数据。为了准确了解模型的运行情况,您不仅需要有足够的数据来进行训练,而且还需要足够的数据作为单独的测试集,仅用于测试模型的性能。