我正在努力更好地理解如何将自己的数据表用于机器学习项目 .
我的分类是:
[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
也是如此 . price
和 soldindays
是整数0-10000 . 输出是预测 soldindays
,以找出指定项目在其属性下出售需要多长时间 .
我一直在努力阅读和观看视频并理解这一切,但作者之间存在如此多的差异,以至于当很难坚持一个单一的教育来源时,很难积累知识 .
2 回答
PROBLEM TYPE
最重要的是,请注意这是一个回归型问题,而不是分类 . 您希望尽可能接近正确的天数,而不是必须得到确切的答案(或失去所有信用) . 您的成功标准不应该是正确的百分比;相反,它应该是某种平均误差百分比 . 您可以抛弃使用独立分类预测的技术 .
DATA SHAPE
您如何知道您的数据包含足够的信息以进行准确的预测?通常,这一发现来自于试验各种ML算法 . 您是否对空间或任何类型的相关性进行了任何可视化,以估计最大可能的准确度?
CURRENT METHOD
KNN对此并不好 . 通过将它们放在线性连续体上,无法正确描述您的两个字符串功能 . 你给出的编码告诉我们,aardvark与飞机的关系比与斑马的关系更密切 . 你需要分开这些 . 正如
Matthijs
已经指出的那样,单热编码是将这些分成正交特征的理想方法 .modelitem
功能是否独立于该类别?如果是这样,那么它也应该是单热编码的 . 如果它是依赖的,类别的子类型,那么你有一个更难的问题:在分离主要时保持次要鉴别器相关 . 这是决策树是一个好工具的地方 .GENERAL RECOMMENDATION
将此视为经典回归问题,与许多入门讲座中的规范房屋定价示例一致 . 首先探索SGD和相关算法 . 如果你没有得到满意的结果,至少你有一个坚实的起点,并可以再次发布你的精炼问题 .
您当前使用称为LabelEncoding的方法对您的类别进行了编码 . SKLearn中有一个method可以为你做到这一点 .
如果使用此方法进行编码并使用诸如nearest-neighbors之类的模型,则表示类别中按类别关闭的类也在语义上非常接近 .
对于非基于树的模型的分类值进行编码,使用OneHotEncoding要好得多 . 这将为每个填充了1或0的类创建一个列,具体取决于该条目是否属于列中指定的类 . 这看起来如下:
这样可以确保A远离B,因为它与您的模型的C相距离,这可以显着提高您的结果 .