理解散列技巧的结果

2024-05-09 01:42:49 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个DF with language列,我试图理解使用HashingEncoder得到的结果

简化DF(DF中有更多列):

      language country
0      English      US
1      English      US
2      English      US
3      English      AU
4      Italian      IT
5   Portuguese      JP
6      English      US
7      English      AU
8      English      US
9       German      DE
10      French      CA
11     English      UK
12     English      US
13     English      US
14     Italian      IT
15     Italian      IT
16     English      UK
17     English      US
18     English      US
19     English      AU
20     English      AU
21     English      AU
22     Italian      IT
23     English      UK
24     English      US
25      French      FR
26     English      UK
27     English      US
28     English      US
29    Japanese      AU
30     English      AU
31     English      AU
32     English      US
33     English      AU
34     English      AU
35     English      UK
36     English      AU
37     English      UK
38     English      US
39     English      US
40     English      US
41     English      AU
42     English      US
43     English      UK
44     English      AU
45     English      AU
46     English      UK
47     English      US
48     English      AU
49     English      US

我已经使用以下代码转换了语言列:

from category_encoders.hashing import HashingEncoder
ce_hash = HashingEncoder(cols = ['language'])
df2 = ce_hash.hashing_trick(df,N=2)
df2['lang'] = df['language']

结果是:

   col_0  col_1        lang
0     26      7     English
1     20     13     English
2     23     10     English
3     18     15     English
4     22     11     Italian
5     19     14  Portuguese
6     20     13     English
7     19     14     English
8     19     14     English
9     19     14      German

为什么同一种语言的col_0 col_1中会有不同的值

更新: 当我从DF中删除其他列,只留下language列时,结果如下所示:

   col_0  col_1        lang
0      1      0     English
1      1      0     English
2      1      0     English
3      1      0     English
4      0      1     Italian
5      0      1  Portuguese
6      1      0     English
7      1      0     English
8      1      0     English
9      1      0      German

我猜想hashing_trick方法正在使用来自DF的其他列的信息

Q:如何使用哈希技巧对语言类别进行最小冲突编码


Tags: 语言dflangenglishitcollanguageau
1条回答
网友
1楼 · 发布于 2024-05-09 01:42:49

根据Wikipedia,哈希技巧:

turns arbitrary features into indices in a vector or matrix

这里N是输出维度(上述向量中的索引数),因此为了最小化冲突,增加输出维度,例如:

df2 = ce_hash.hashing_trick(df, N=6, cols=['language'])
df2['lang'] = df['language']
print(df2)

输出

   col_0  col_1  col_2  col_3  col_4  col_5        lang
0      0      0      0      0      1      0     English
1      0      0      0      0      1      0     English
2      0      0      0      0      1      0     English
3      0      0      0      0      1      0     English
4      0      0      0      1      0      0     Italian
5      0      1      0      0      0      0  Portuguese
6      0      0      0      0      1      0     English
7      0      0      0      0      1      0     English
8      0      0      0      0      1      0     English
9      1      0      0      0      0      0      German

关于用于散列的输入列的数量,通过查看code可以看出:

if cols is None:
    cols = X.columns.values

基本上,它将使用输入的所有列df散列技巧函数不使用调用对象的任何信息

最后,要自动确定输出维度的数量,请使用fit_transform

df2 = ce_hash.fit_transform(df)
df2['lang'] = df['language']
print(df2)

输出

   col_0  col_1  col_2  col_3  col_4  col_5  col_6  col_7        lang
0      0      0      0      0      1      0      0      0     English
1      0      0      0      0      1      0      0      0     English
2      0      0      0      0      1      0      0      0     English
3      0      0      0      0      1      0      0      0     English
4      0      0      0      0      0      1      0      0     Italian
5      0      1      0      0      0      0      0      0  Portuguese
6      0      0      0      0      1      0      0      0     English
7      0      0      0      0      1      0      0      0     English
8      0      0      0      0      1      0      0      0     English
9      0      0      0      0      0      0      1      0      German

相关问题 更多 >

    热门问题