【问题标题】:Predict Google Play ratings with Weka使用 Weka 预测 Google Play 评分
【发布时间】:2013-04-24 13:42:21
【问题描述】:

我是 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. all-permissions - AndroidManifest 中的权限数
  10. 类 {4、4.6、3.8、2.6。 5、3.2、3.6、4.2、4.1}

最后一个类包含项目的 Google Play 评分。

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

我想用学习算法分析数据。 预测变量从 1 到 9。 我想确定哪些预测因素对 Google Play 评分的影响最大。

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

提前致谢, 彼得

【问题讨论】:

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


    【解决方案1】:

    类类型

    首先,如果您希望输出连续,我建议您将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 你的数据。

    最近的邻居

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

    决策树

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

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

    更多数据

    如您所见,考虑到您只有 12 个数据点,模型和错误率并没有那么高。要建立一个非常好的模型,您需要更多的数据。要准确了解模型的运行情况,您不仅需要有足够的数据进行训练,还需要有足够的数据作为单独的测试集保存,仅用于测试模型的性能。

    【讨论】:

    • 嗨!感谢您惊人且非常有用的帮助 :) 我会检查您对我的回答,我迟早会提供反馈。谢谢。
    • 我想知道,为什么我可以更改评级?所以现在我有这些评级:@attribute class {4, 4.6, 3.8, 2.6, 5, 3.2, 3.6, 4.2, 4.1} 如果我更改此行,我必须更改此文件中的每个“@data”行尾.如果我只使用 {1,2,3,4,5} 评级,我认为我会失去准确性。为什么它是一个好的解决方案?
    • @olhptr 你会失去精度(但可能会获得精度)。如果我使用离散类标签,我会明确使用{1, 2, 3, 4, 5}(或者可能是{1, 1.5, 2, 2.5, ...})。否则,每次获得新的唯一评级(4.63.8)时,您都必须添加另一个标签。另外,分类器不知道2.6BPositive 不同。但是,如果您切换到numeric 类型,那么分类器就会知道输出只是一个(连续范围)数字。希望对您有所帮助。
    • 所以,如果我没有误解你的悲伤,这是一个很好的分析结构:pastebin.com/eaKqHhfV 还是不是?
    • @olhptr 是的,设置google-play-rating numeric 将允许分类器输出一个数字。但是,由于您使用的是numeric,您可以保留每个数据点的原始评级(如3.6 等)。
    猜你喜欢
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2016-01-25
    • 2017-04-30
    相关资源
    最近更新 更多