格式化机器学习数据

时间:2017-07-20 18:43:25

标签: python machine-learning scikit-learn

我正在努力更好地理解如何将自己的数据表用于机器学习项目。

我的分类是:

[categoryname, modelitem, price, soldindays]

soldindays为目标。

我的数据表格式为1,200,000行:

categoryname / modelitem / price / soldindays
furniture    /  chair    / 100   / 22
wood         /  table    / 79    / 4
glass        /   tv      / 190   / 9
cardboard    / desk      / 493   / 198

我不完全确定如何重新格式化数据以获得良好的预测。到目前为止,我已经使用K nearest neighbros = 1,但不知何故,我的准确度水平在5%到78%之间变化。根据我选择训练的数据,这似乎有很大差异。我将尝试对所有这些进行训练而不仅仅是部分训练。

我通过将每个非数字项目转换为数字来格式化我的数据。我计算了每个非数字属性的唯一值。然后,我将每个列表中的每个项目按字母顺序排列,并将每个项目映射到其序号位置。

例如:

map_categorynames = [aarvarks = 1, airplanes = 2]
map_modelitems = [feet = 1, shoes = 2]

它是这样的:

categoryname / modelitem / price / soldindays
1878    /  87    / 100  / 22
197     /  290   / 79   / 4
2854    /  785   / 190  / 9
1148    /  401   / 493  / 198

我知道由于多种原因我可能会有很差的准确性,但我认为数据格式可能是最大的。如何以数字方式格式化我的特征,哪种模型/模型可能更适合我的“类型”问题?

我的第一个属性categoryname包含大约1000个不同的类别,modelitem也是如此。 pricesoldindays是整数0-10000。输出是预测soldindays,以找出指定项目在其属性下出售所需的时间。

我一直在努力阅读和观看视频并理解所有内容,但作者之间存在很多差异,以至于当很难坚持使用单一教育资源时,很难积累知识。

2 个答案:

答案 0 :(得分:0)

您目前使用称为LabelEncoding的方法对您的类别进行了编码。 SKLearn中有一个method可以为你做到这一点。

如果您使用此方法进行编码并使用诸如nearest-neighbors之类的模型,则表示您的类别中按字母顺序排列的类也在语义上非常接近。

对于非基于树的模型的分类值进行编码,使用OneHotEncoding要好得多。这将为每个填充了1或0的类创建一个列,具体取决于该条目是否属于列中指定的类。这看起来如下:

Category  | is_a | is_b | is_c
A         | 1    | 0    | 0
B         | 0    | 1    | 0

这可以确保A远离B,因为它与您的模型的C相同,这可以显着改善您的结果。

答案 1 :(得分:0)

问题类型

最重要的是,请注意这是一个回归型问题,而不是分类。您希望尽可能接近正确的天数,而不是必须得到确切的答案(或失去所有信用)。您的成功标准是正确的百分比;相反,它应该是某种平均误差百分比。您可以抛弃使用独立分类预测的技术。

DATA SHAPE

您如何知道您的数据包含足够的信息以进行准确的预测?通常,这一发现来自于试验各种ML算法。您是否对空间或任何类型的相关性进行了任何可视化,以估计最大可能的准确度?

当前方法

KNN 对此有好处。将两个字符串功能放在线性连续体上没有正确描述它们。你给出的编码告诉我们,aardvark 很多与飞机关系比与斑马关系更密切。你需要分开这些。正如Matthijs已经指出的那样,单热编码是将这些分成正交特征的理想方法。

modelitem功能是否独立于类别?如果是这样,那么它也应该是单热编码的。如果它是依赖的,类别的子类型,那么你有一个更难的问题:在分离主要时保持二级鉴别器相关。这是决策树是一个好工具的地方。

一般建议

将此视为经典回归问题,与许多入门讲座中的规范房屋定价示例一致。首先探索SGD和相关算法。如果你没有得到满意的结果,至少你有一个坚实的起点,并可以再次发布你的精炼问题。