数据规范化的参考

Val*_*ron 6 machine-learning neural-network

有关NN和其他机器学习算法的数据规范化(不确定这是否是正确的术语)的最佳实践是什么?我的意思是你如何向NN /算法表示数据.

例如,您如何表示商店代码?商店555不大于或小于554,它只是一个分类.NNs/algo模型是否只是自己过滤掉或者你是否需要刺激它们进行分类而不是数学上的区分?

感谢您在指导我获取适当​​信息方面的任何帮助.我显然是新手.

编辑:感谢大家的答案.我一直在挖掘相当多的数据挖掘书籍,虽然我发现有一些关于数据预处理的话题花了一两章,但我对它如何最完全地掩盖它有点惊讶.再次感谢.

dou*_*oug 12

我从未发现任何涉及"数据预处理"主题的综合资源.

您的问题涉及在机器学习基本谓词步骤识别每个变量(的变量只是指字段在SQL表或各列中数据矩阵)中的数据作为任一连续的离散的.离散变量也称为因子和分类变量.(还有第三种类型,时间(通常是您选择的语言中的专用数据类型),它是前两种类型之间的真正混合.)

我可以推荐的一个来源(绝不是我读过的最好的甚至是最好的,而是它只是一个我可以从记忆中回忆起的标题,它可以很好地描述手头的问题并提供一些有根据的指导):

统计Nutshell由Sarah Boslaugh和Paul Andrew Watters,O'Reilly Eds.(第10章分类变量)

离散/分类变量

分类变量(R中的"因子")是性别(值:男性/女性),居住(例如佛蒙特州,爱达荷州等),眼睛颜色以及您的问题,商店编号等变量.商店编号可能是555,但您应该将其记录为字符串而不是整数或浮点数(即,算法将值555视为"五五十五".如果您正在执行在统计平台(例如,SAS,SPSS,R),那么该平台将提供具体指导工作.就R例如,它是常见的设置门店数量为因素,当你导入数据.

连续变量和因子之间的区别对于任何分析工作都是绝对必要的,因为它决定了(i)您可以针对您的数据运行的分析操作; (ii)您可以使用的预测算法类型.

W/r/t第一项,交叉制表(R中的函数xtabs)是一种常见的分析操作,只能对因子执行.(注意:它被称为列联表,如果不是原始计数,则记录百分比.)假设您有一个数据集,该数据集由聚合的服务器访问日志中的行组成,因此一行是一个会话中的一个用户.假设您已配置日志以记录引用URL和浏览器类型等.这两个变量的交叉表只显示每个变量的每个值的所有组合的用户频率.因此,如果数据中有三个引用URL和四种浏览器类型,则生成的表将具有12个单元格.同样,交叉制表仅适用于离散变量.

另一个原因变量区分成离散的和连续的,这样就可以选择和/或与响应变量(你正在试图预测一个)是离散或连续配置符合你的机器学习算法.

变量类型(再次,我指的是列在数据集中)的正交分类测量响应(有时独立与相关的).因此,例如,您为每个未注册的访问者记录各种会话详细信息,例如查看的页面,查看的总页数,每页的总时间,入站推荐链接,出站链接等 - 这些都是测量变量.衡量这些的一个原因是预测新用户是否最终会注册,如果是这样,他们将注册高级服务.这些是响应变量.

在这种情况下,响应变量可能是注册用户高级订阅者,并且两者的值都是yes或no,这使得它成为离散变量.

当你的响应变量 - 你想要预测的东西 - 是一个因子/离散变量时,你就会遇到分类问题.您的机器学习算法返回的是类标签(例如,注册用户或' 不是r/u).

另一方面,如果您的响应变量是连续的(假设您想预测您的体育博彩网站上的新客户的预期终身价值,作为下注总金额)那么您的问题不是分类而是回归.换句话说,您的算法必须返回一个值,通常是一个浮点值.

许多机器学习算法,包括神经网络,你在你的问题中提到(也如,支持向量机,和KNN),可以很容易地配置在两种模式下运行 - 分类或回归.

连续变量

连续变量是时间(以秒为单位),每个用户的登录会话数, 体重,年龄,消耗的总卡路里等等 - 用浮点数表示的事物或者用整数表示的事物并且相应地增加(即,1秒超过56)秒是57秒).

处理这些(一旦确定数据集中的哪些变量实际上是连续的)通常只涉及将标准化,缩放或标准化混淆的步骤.虽然它们在实践中可互换使用,但实际上它们指的是由不同情况证明的单独变换.

根据您的意愿使用或不使用这些术语,但将三者分开可能有助于协调您在文献中看到的或在实践中使用的所有技术.

  • 重新调整:例如,改变计量单位; 重新缩放你加/减一个常数然后乘以/除另一个常数.这比描述更容易显示,例如,从摄氏温度转换为华氏温度,你将32加到摄氏温度然后将该值乘以9/5;

  • 正常化:除以标准.因此,例如,如果您的数据集中的一行是[1.23,2.21,0.84,3.54,1.90],那么按其标准(在这种情况下大约为4.8)逐个推导它.当你这样做时,你得到的标准化行是[0.255,0.458,0.174,0.734,0.39].如果使用Python + NumPy,则表达式为normalized_row1 = row1/LA.norm(row1),谓词import语句将numpy.linalg导入为LA');

  • 标准化:指减法和除法的两步过程,例如,以"标准正态"形式得到一个变量,你减去平均值并除以标准差,之后你的随机变量的平均值为0, SD为1.