作者karco (karco)
看板DataScience
标题[问题] One-Hot Encoding能否合并使用
时间Wed Feb 6 21:29:04 2019
问题类别:数据预处理
使用工具: python pytorch scikit-learn
问题内容: 各位大大好,最近在研究对於资料处理的部分,
在面对无序特徵(nominal feature时),
我们通常习惯使用one-hot encoding的技巧来处理我们的数据。
将一个特徵(例如颜色)拆成n个特徵(红,橙,黄...),
再藉由二元的0跟1来表示。
那想请教的是,如果做处理类似的特徵时,
可以将one-hot encoding所产生的稀疏矩阵合并使用吗?
或是换句话说,可以对一个属於多类别的list进行one-hot encoding
以下举个简单的例子 先以常见的颜色问题举例,假设我们在描述衣服的颜色特徵,
我们会将以下特徵:
颜色
红
黄
蓝
转换成
颜色红 颜色黄 颜色蓝
[1 0 0]
[0 1 0]
[0 0 1]
那我想请教的是,如果今天衣服有多个颜色呢?
例如:
颜色
红蓝相间
红黄相间
黄蓝相间
我的脑海中主要出现三种方法 想请教大大们是否可行或是有哪些优缺?
方法1: 区分成颜色1 颜色2 这样使用one-hot encoding就会变成
颜色1红 颜色1黄 颜色1蓝 颜色2红 颜色2黄 颜色2蓝
[1 0 0 0 0 1]
.
.
.
思考:这种方法应该是可行,只是如果遇到颜色很多时,
可能会产生参数过大的问题,且产生的矩阵会太稀疏。
方法2:
既然都是在描写颜色特徵,能否直接在同一个one-hot encoding的矩阵中描述。
颜色红 颜色黄 颜色蓝
[1 0 1]
.
.
.
思考:这样可以避免掉方法1可能产生的问题,
只是不知道能不能将one-hot encoding这样子使用?
我目前的想法是觉得应该可行,因为1跟0是代表是与否而已(?
想请问这样的数据处理是否会产生问题?
方法3:
基本上混合了方法1与方法2,
在同一个one-hot encoding中表示,
但是是形成一个多维的矩阵来表示
颜色红 颜色黄 颜色蓝
[1 0 0
0 0 1]
思考:如上所示,用一个二维矩阵来表示衣服的全部颜色,
一列表示了一个颜色,这是我在网路上看到有人尝试过的方法,
但比较疑惑的是,如果衣服的颜色很多,会使列数增加,
是否又会导致问题一的问题,加上其他的特徵如果都是一维的(例如衣服的价钱,尺码)
这样是否会导致输入参数的维度不一致?
以上是我目前能想到的三个方法
不知道各位大大有什麽想法
目前倾向於使用方法2
因为我想要研究的题目
资料数量会很庞大 怕使用方法1与3会使得资料过於庞大
不知道方法2是否可行呢?
或是各位大大有没有什麽其他的处理方法呢?
在此先感谢资料科学版的各位大大
祝大家新年快乐
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 39.10.106.40
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1549459747.A.BB5.html
※ 编辑: karco (118.233.179.85), 02/06/2019 23:16:28
1F:推 p122607: 我个人觉得第二个方法好,就把各自当作独立特徵,不过那 02/07 10:06
2F:→ p122607: 就要预先列出在你的研究中所有可能会出现颜色类别。如果 02/07 10:06
3F:→ p122607: 你的资料颜色很重要,那是不是会使用到很多渐层色来标记 02/07 10:06
4F:→ p122607: ,那原始的资料也要够多才行 02/07 10:06
5F:推 yiefaung: 通常就法二 multilabel 02/07 16:47
感谢两位大大回覆
关於p大的留言 目前想实作的应用是原子的id
想藉由one-hot encoding来表示原子间的邻居关系
所以应该可以避免掉类似渐层色的问题
当然还是一边搜集更多原始资料中
另外针对y大的回覆,所以特徵也适用multilabel的方法罗?
一开始以为只能应用在label的处理上 感谢解答
※ 编辑: karco (118.233.179.85), 02/07/2019 23:45:04
6F:→ celestialgod: 想成什麽颜色有出现的话,法二就很直觉 02/14 15:26
7F:→ celestialgod: 法三看认成不同件衣服 02/14 15:27