我正在努力更好地理解如何使用我自己的数据表进行机器学习项目。
我的类别包括:
[categoryname, modelitem, price, soldindays]
其中soldindays
是目标变量。
我的数据表有1,200,000行,格式如下:
categoryname / modelitem / price / soldindaysfurniture / chair / 100 / 22wood / table / 79 / 4glass / tv / 190 / 9cardboard / desk / 493 / 198
我不是很确定如何重新格式化数据以获得良好的预测。到目前为止,我使用了K nearest neighbros
= 1,但不知为何我的准确率在5%到78%之间变化。这似乎取决于我选择训练的数据有很大的不同。我将尝试使用所有数据进行训练,而不是只使用部分数据。
我对数据进行了格式化处理,将所有非数字项目转换为数字。我计算了每个非数字属性的唯一值。然后我对每个列表中的项目按字母顺序排序,并将每个项目映射到其序号位置。
例如:
map_categorynames = [aarvarks = 1, airplanes = 2]map_modelitems = [feet = 1, shoes = 2]
结果如下:
categoryname / modelitem / price / soldindays1878 / 87 / 100 / 22197 / 290 / 79 / 42854 / 785 / 190 / 91148 / 401 / 493 / 198
我知道准确率低的原因可能有很多,但我认为数据格式化可能是最大的问题。我该如何以数字方式格式化我的特征?哪种模型或一组模型可能更适合我的“类型”问题?
我的第一个属性categoryname
大约有1000个不同的类别,modelitem
也是如此。price
和soldindays
是0-10000的整数。输出是预测soldindays
,以确定给定其属性的指定项目需要多长时间才能售出。
我一直在尽力阅读和观看视频并理解所有内容,但作者之间的变化如此之大,以至于当很难坚持单一的教育来源时,很难积累知识。
回答:
问题类型
最重要的是,请注意这是一个回归类型的问题,而不是分类问题。你希望尽可能接近正确的销售天数,而不是必须得到确切的答案(否则将失去所有信用)。你的成功标准不应该是正确百分比;相反,它应该是某种平均误差百分比。你可以抛弃那些适用于独立分类预测的技术。
数据形状
你如何知道你的数据包含足够的信息来进行准确的预测?通常,这种发现来自于对各种机器学习算法的实验。你是否对空间进行了任何可视化,或进行了任何形式的相关性分析,以估计你的最大可能准确率?
当前方法
KNN对于这个任务并不好。你的两个字符串特征并不是通过将它们放在线性连续体上就能很好地描述的。你提供的编码告诉我们,土豚与飞机的关系比与斑马的关系要密切得多。你需要将这些分开。正如Matthijs
已经指出的那样,一热编码是将这些分成正交特征的理想方法。
modelitem
特征是否独立于类别?如果是,那么它也应该使用一热编码。如果它依赖于类别,是类别的一个子类型,那么你面临一个更困难的问题:在分离主要特征的同时保持次要区分因素的相关性。这就是决策树成为一个好工具的地方。
一般建议
将这视为一个经典的回归问题,类似于许多入门讲座中提到的典型房价示例。首先探索SGD和相关算法。如果你没有得到满意的结果,至少你有一个坚实的起点,可以再次发布你改进后的问题。