如何使用Weka Java API执行线性回归时处理字符串值

时间:2014-04-11 08:14:38

标签: java algorithm machine-learning weka mahout

我正在使用Weka Java API执行线性回归。数据集包括UserId,用户访问的URL,页面上的时间花费。由于URL是String属性,因此在使用上述数据集执行线性回归时遇到问题。是他们任何准备使用的方法,它将字符串转换为Weka中的等效Int值。我在Mahout中看到了类似的功能,但在Weka中找不到它。我可以通过计算每个字符的ASCII总和来轻松创建一个函数来输出字符串的Int值,但我想要一个更可靠且已经过测试的解决方案。

2 个答案:

答案 0 :(得分:1)

您是正确的,线性回归仅对数值进行操作。但是,从分类值到数字的任何旧转换都没有问题。例如,散列字符串会给出一个数字,但会给出完全无意义的结果作为线性回归的特征。

数字值应具有有序和有意义的大小。 “foo.com”是135092,“bar.com”是985882是什么意思?线性回归会试图将“bar.com”解释为“比foo.com大5倍的东西”,这是无稽之谈。

您可能正在考虑使用1-of-n编码,您可以为每个可能的值(URL)创建新的0/1功能。对于URL,这是不可行的。域名 - 也许。

答案 1 :(得分:0)

虽然Weka LinearRegression分类不适用于String数据类型,但您可以尝试将所有网站转换为名义,这可以通过算法计算。我不太清楚算法究竟是如何执行的,但根据我的经验,它在某些情况下改善了结果(因为名义可以算作重复值,值之间的距离如果不相等则等于1)。