Machine learning 用Weka预测谷歌播放的收视率

Machine learning 用Weka预测谷歌播放的收视率,machine-learning,google-play,weka,metrics,prediction,Machine Learning,Google Play,Weka,Metrics,Prediction,我是Weka 3.7.9的新手。 我有一个arff文件,其中包含以下属性、类和数据: 此文件表示Android项目。 那么,1-9。属性是不同类型的度量: lloc-逻辑代码行 nid-ID的数量 nle-嵌套级别 nel-元素数 nip-输入元素的数量 activites-AndroidManifest中的活动数 inside permissions-AndroidManifest中的内部权限数 External permissions-AndroidManifest的外部权限数 all p

我是Weka 3.7.9的新手。 我有一个arff文件,其中包含以下属性、类和数据:

此文件表示Android项目。 那么,1-9。属性是不同类型的度量:

lloc-逻辑代码行 nid-ID的数量 nle-嵌套级别 nel-元素数 nip-输入元素的数量 activites-AndroidManifest中的活动数 inside permissions-AndroidManifest中的内部权限数 External permissions-AndroidManifest的外部权限数 all permissions—AndroidManifest中的权限数 类{4,4.6,3.8,2.6.5,3.2,3.6,4.2,4.1} 最后一个类包含项目的Google Play评级

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

我想用学习算法分析数据。 预测值从1到9。 我想确定,哪些预测因素主要影响Google Play的收视率

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

提前感谢,, 彼得

班级类型 首先,如果希望输出是连续的,我建议您将类类型更改为numeric。否则,我建议将类标签类型保持为现在的标称类型,但将评级更改为{1,2,3,4,5}

例如,如果您更改为数字输出,以便可以预测4.5颗星,那么您将需要使用支持数字类的分类器

使用Weka 我建议看一看,了解更多关于使用Weka的知识,可能通过阅读一些教程。例如,双击ARFF文件后,您应该在“分类”选项卡中完成大部分工作。选择一个分类器,然后选择开始

分类器 回归 特别好的是,它很容易解释,因为它简单地为每个属性分配一个权重,并使用这些权重的乘法和加法来给出输出

我使用了您的示例文件,并使用线性回归对其进行了测试,然而,对于如此少的样本,它确定最佳模型只是输出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。但在这一点上,我认为有这么少的数据点,你就是你的数据

近邻 使用可能是一种可行的方法,如果您在Weka中有更多的数据,则称之为KStar

决策树 DecisionStump算法输出该模型的平均绝对误差为0.3424,但可能再次过度拟合

inside-permissions <= 1.5 : 2.6
inside-permissions > 1.5 : 4.090909090909091
inside-permissions is missing : 3.966666666666667
更多数据
如您所见,考虑到您只有12个数据点,模型和错误率并不是很高。要构建一个真正好的模型,您需要更多的数据。要准确了解模型的性能,您不仅需要有足够的数据进行培训,还需要有足够的数据作为单独的测试集保存,仅用于测试模型的性能。

Hi!谢谢你的帮助:我会检查你的回答,我迟早会给出反馈。谢谢。我想知道,为什么我可以更改收视率?现在我有了这些评级:@attributeclass{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.6或3.8时,您必须添加另一个标签。另外,分类器不知道2.6与B或正数不同。但是,如果切换到数值类型,则分类器知道输出只是一个连续的范围数。希望这能有所帮助。所以,如果我没有误解你所说的,这是一个很好的分析结构:还是不是?@olhptr是的,设置google play rating numeric将允许分类器输出一个数字。但是,由于您使用的是数字,因此可以保留每个数据点的原始评级,如3.6等。。