r - 在神经网络分析中使用什么值?
问题描述
我有以下练习:
- 使用 k 折交叉验证创建神经网络。评估不同配置的性能。
在此之后,我应该将这些值与使用决策树模型获得的值进行比较,以获得相同的数据。
对于给定的数据:
我必须规范化这些值,并且我能够规范化它们。但问题是,更改比赛字段中的值是否有意义,例如:
- 亚洲 - 0
- 白色 - 1
- 其他 - 2
然后将值标准化(0 到 1),还是应该只使用“年龄”、“薪水”和“学术水平”字段?
因变量将是一个新列,将薪水分为“高”和“低”。
在神经网络中规范化和使用哪些领域是有意义的?我可以对所有这些进行归一化并使用神经网络中的所有字段吗?
解决方案
这是个有趣的问题。在使用神经网络(从现代视角)时,通常最好使用尽可能多的数据,并尽量减少手动预处理的数量。
选项 1是最糟糕的:只使用数字属性(标准化)。
选项 2更进一步:在顺序明显的地方也使用分类属性。我想这就是你打算用“学术水平”做的事情。在这些情况下,您可以尝试将这些值转换为标准化数字。不理想,但总比不使用它们好。
选项 3:对于顺序没有意义的分类属性,您可以为每个选项创建一个布尔属性!这看起来很可怕,因为它会迅速增加维度,但这通常是一个好方法。例如,如果您有 4 个工作类别,您可以尝试使用 4 列,每个工作选项一个列。
选项 4:到目前为止,最好的方法(但也是最难实现的)是使用嵌入。这类似于彻底改变深度学习在自然语言处理中的使用的想法。
语言的问题与您自己的问题相似:如何将输入的单词数字化。第一种方法是将字符串中的每个单词翻译成一个向量,其中向量的长度为词汇表中单词的个数,除当前单词的索引外,全部为0。这称为单热编码。想象一下我们的词汇是“俄罗斯、苹果、湖、梨”。那么“Apple”这个词将被编码为 [0, 1, 0, 0]。很好,但这会删除很多信息。例如,Apple 与 Pear 比与俄罗斯更相似,但 [0, 1, 0, 0] 与 [0, 0, 0, 1] 与 [1, 0, 0, 0] 相似。
但是我们可以使用密集向量!(如 [0.12, 0.42, -0.01, 0.9]。)例如,通常将字典中的任何单词编码为 300 维向量。语义相似性和意义的微妙之处将被编码在向量的不同维度中。
那么......为什么不对有问题的属性做同样的事情呢?像您建议的那样排序比赛输入是没有意义的,并且可能会混淆算法。为什么“亚洲”价值最高?为什么是“西班牙裔”和“白人”之间的“黑人”?(使用种族这样的社会结构突出了为什么这是有问题的。)
现在,词嵌入通常经过预训练并被重用。在您的情况下,您需要将这些向量作为模型参数的一部分进行训练(查找“嵌入层”)。从头开始实现它可能不是一件容易的事,但你至少知道这些可能性是件好事。如果您想尝试这个想法,我建议您研究一下 Fastai 的表格学习,即使对于没有太多经验的人来说,这也确实使所有这些都非常容易上手。
推荐阅读
- c# - 如何替换文本文件中以特定单词开头并以 C# 中的特殊字符结尾的字符串?
- angular - Angular HttpClient TypeError: Object(...) is not a function
- python - xlrd.biffh.XLRDError:Excel xlsx 文件;不支持
- python - 有没有一种更简单的方法可以将列表随机拆分为子列表而不在 python 中重复元素?
- python - 删除分号作为行分隔符使用 pandas.read_csv 读取 csv 文件
- haskell - 如果是模棱两可的类型,如何确定类型?
- html - 材质-UI。如何用我的自定义一类覆盖库二类选择器
- python-3.x - 如何删除给定字符串中“更多:”之后出现的句子?
- volttron - volttron BACnet 使用虚拟盒子 ubuntu 进行扫描
- reactjs - 无法从地图中获取数据