这不是与编程直接相关的问题,而是选择正确的数据挖掘算法。
我想从他们的名字,他们居住的地区,以及他们是否有互联网产品推断人们的年龄。它背后的想法是:
我不确定这些假设是否成立,但我想测试一下。所以我所拥有的是来自我们客户数据库的100K观察结果
因为我有很多名义输入,所以我认为回归不是一个好选择。因为目标是数字的,所以我认为决策树也不是一个好选择。任何人都可以建议我适用于这种情况的方法吗?
答案 0 :(得分:3)
新答案
我会尝试使用回归,但是按照我指定的方式。我会尝试二进制化每个变量(如果这是正确的术语)。 Internet变量是二进制的,但我会把它变成两个独立的二进制值。我将用一个例子来说明,因为我觉得它会更有启发性。在我的例子中,我将使用三个名字(Gertrude,Jennifer和Mary)和互联网变量。
我有4个女人。以下是他们的数据:
Gertrude, Internet, 57
Jennifer, Internet, 23
Gertrude, No Internet, 60
Mary, No Internet, 35
我会生成一个矩阵A,就像这样(每行代表我名单中的一个女人):
[[1,0,0,1,0],
[0,1,0,1,0],
[1,0,0,0,1],
[0,0,1,0,1]]
前三列代表名称,后两两列代表互联网/无互联网。因此,列代表
[Gertrude, Jennifer, Mary, Internet, No Internet]
您可以使用更多名称(名称为500列)和区域(这些列为20列)来执行此操作。然后你将解决标准的线性代数问题A * x = b,其中b对于上面的例子是
b=[[57],
[23],
[60],
[35]]
您可能会担心A现在将是一个巨大的矩阵,但它是一个巨大的,极其稀疏的矩阵,因此可以非常有效地以稀疏矩阵形式存储。每行中有3个1,其余的都是0.然后你可以用稀疏矩阵求解器来解决这个问题。您将需要对结果预测年龄进行某种相关性测试,以确定其有效性。
答案 1 :(得分:3)
我认为您可以设计反映您要确定的拆分的离散变量。您似乎不需要对其确切年龄进行回归。
一种可能性是聚类年龄,然后将聚类视为离散变量。如果这不合适,另一种可能性是将年龄分成平均分配的箱子。
一种可以很好地用于您的目的的技术是,不是直接对年龄进行聚类或分区,而是对每个名称的平均年龄进行聚类或分区。也就是说,生成所有平均年龄的列表,并改为使用它。 (如果你这里的离散类别太精细了,分类器中可能会有一些统计问题。)
然而,最好的情况是,如果您清楚地知道您认为适合“年轻”和“年老”的年龄范围。然后,直接使用它们。
答案 2 :(得分:2)
你可能会看看babynamewizard。它显示了名称频率随时间的变化,并有助于将您的名称转换为数字输入。此外,您应该能够使用census.gov数据中的人口密度来获取与您的区域相关联的数值。我建议增加一个关于DSL接入可用性的标志 - 许多农村地区没有DSL覆盖。无覆盖=对互联网服务的需求减少。
我的第一个倾向是将你的反应分成两组,那些很可能在学校或工作中使用过计算机的人和那些不太可能的人。在职业生涯早期或学校教育阶段接触计算机的使用可能会影响他们在以后的生活中使用计算机的可能性。然后,您可以分别考虑群组的回归。这应该消除您的输入的一些自然相关性。
答案 3 :(得分:1)
我会使用一种接受名义属性和数字类的分类算法,如M5(树或规则)。也许我会将它与装袋元分类器结合起来以减少差异。最初的算法M5是由R. Quinlan和Yong Wang发明的。
中实施它也可以在开源机器学习软件Weka
中找到有关详细信息,请参阅:
Ross J. Quinlan:Learning with Continuous Classes。参加:第五届澳大利亚人工智能联合会议,新加坡,343-348,1992。
ÿ。 Wang,I.H。Witten:Induction of model trees for predicting continuous classes。参见:1997年第九届欧洲机器学习会议的海报论文。
答案 4 :(得分:1)
我认为与您略有不同,我相信树木是处理名义数据的优秀算法,因为它们可以帮助您构建一个模型,您可以轻松地解释并识别这些名义变量中的每一个的影响,并且它是不同的值。 您还可以使用虚拟变量回归来表示名义属性,这也是一个很好的解决方案。 但是你也可以使用其他算法,如SVM(smo),将名义变量的先前转换为二元虚拟变量,与回归相同。