在数据集具有唯一值的要素列时尝试在DSX中构建模型时的评估错误

时间:2018-01-23 19:11:52

标签: machine-learning ibm-cloud data-science-experience

如果其中一个功能列具有唯一的分类值,那么在使用IBM Watson Machine Learning在IBM Data Science Experience(DSX)中构建二进制分类模型时,我会收到评估错误。

我使用的数据集看起来像这样 -

Customer,Cust_No,Alerts,Churn
Ford,1000,8,0
GM,2000,50,1
Chrysler,3000,10,0
Tesla,4000,48,1
Toyota,5000,15,0
Honda,6000,55,1
Subaru,7000,12,0
BMW,8000,52,1
MBZ,9000,13,0
Porsche,10000,54,1
Ferrari,11000,9,0
Nissan,12000,49,1
Lexus,13000,10,0
Kia,14000,50,1
Saab,15000,12,0
Faraday,16000,47,1
Acura,17000,13,0
Infinity,18000,53,1
Eco,19000,16,0
Mazda,20000,52,1

在DSX中,上传上述CSV数据,然后使用自动模型构建器创建模型。选择“流失”作为标签列,选择“客户和警报”作为功能列。选择二进制分类模型并使用默认值 训练/测试分割的设置。训练模型。模型构建失败,出现评估错误。相反,如果我们选择Cust_No和Alerts作为要素列,则会成功创建模型。这是为什么 ?

2 个答案:

答案 0 :(得分:1)

在DSX中构建模型时,数据会在训练,测试和保持中分开。这些数据集是不相交的。

  • 如果选择了Customer字段,那么这是一个字符串字段,必须将其转换为数值,以便具有模型ML算法的含义(线性回归/逻辑回归/决策树等)。

如何做到这一点: 该算法迭代来自Customer字段的每个值,并创建一个字典,将字符串值映射到数值(请参阅spark StringIndexer - https://spark.apache.org/docs/2.2.0/ml-features.html#stringindexer)。 在评估或评分模型时,根据在训练点制作的字典将来自测试子集的字符串字段转换为数字。如果找不到值,则有两个选项(跳过整个记录或抛出错误 - 第一个选项由DSX选择)。

考虑到Customer字段中的所有值都是唯一的,这意味着测试数据集中的所有记录都没有到达评估阶段,并且从此处无法评估模型的错误。

  • 如果是Cust_No,则该字段已经是数字,不需要进行类别编码操作。即使在训练中未找到评估步骤的值,也将按原样使用这些值。

答案 1 :(得分:0)

退一步说,在我看来,除了Alerts之外,您的数据并不真正包含预测信息。

customerCust_no字段基本上是ID列,似乎不包含预测信息。

您可以发布Evaluation error的屏幕截图吗?我可以尝试帮助,我在DSX上工作。