机器学习分类问题实践——sklearn.preprocessing.MultiLabelBinarizer在中文one-hot编码中的应用

MultiLabelBinarizer

在机器学习自然语言处理的分类问题中,我们经常需要处理大量的中文字符,我们希望知道每一条数据中的某个数据项的出现中文字符的种类,并且进行标注从而进行下一步的处理。
这样描述比较抽象,举个例子,在处理党员干部的违规违纪通报时,对不同违纪的干部有不同的处分,如开除党籍,警告等,现在我们有100条党员干部的违纪通报,希望将每一个干部的处分转化为由0和1组成的序列。

from sklearn.preprocessing import MultiLabelBinarizer as MLB

point_df = pd.read_excel(config.test_path,header=None)#利用config类读取标记数据4274train.xlsx
point_df.dropna(inplace=True)#保存有效数据
point_df = point_df.rename(columns={0:"label",1:"content"})
print(point_df["label"] )
point_df['label'] = point_df['label'].apply(lambda x:x.split())
print(point_df["label"] )

mlb = MLB()#实例化类MultiLabelBinarizer(classes=None, sparse_output=False)
corpus_y = mlb.fit_transform(point_df["label"])

print(corpus_y)

第一次print(point_df['label'])的结果为:

0                 撤销党内职务
1                 撤销党内职务
2                 撤销党内职务
3                 撤销党内职务
4                 撤销党内职务
5                 撤销党内职务
6                 撤销党内职务
7                 撤销党内职务
8                 撤销党内职务
9                 撤销党内职务
10           留党察看一年 政务降级
11           留党察看一年 政务降级
12    留党察看一年 政务降级 退缴相关款项
13    留党察看一年 政务降级 退缴相关款项
14         留党察看一年 退缴相关款项
15         留党察看一年 退缴相关款项
16           留党察看一年 政务处理
17                 政务记大过
18                 政务记大过
19                 政务记大过
20                 政务记大过
21            政务记大过 政务处理
22          政务记大过 退缴相关款项
23            政务记大过 组织处理
24                  政务记过
25                  政务记过
26                  政务记过

第二次print(point_df[‘label’])的结果为:

0                   [撤销党内职务]
1                   [撤销党内职务]
2                   [撤销党内职务]
3                   [撤销党内职务]
4                   [撤销党内职务]
5                   [撤销党内职务]
6                   [撤销党内职务]
7                   [撤销党内职务]
8                   [撤销党内职务]
9                   [撤销党内职务]
10            [留党察看一年, 政务降级]
11            [留党察看一年, 政务降级]
12    [留党察看一年, 政务降级, 退缴相关款项]
13    [留党察看一年, 政务降级, 退缴相关款项]
14          [留党察看一年, 退缴相关款项]
15          [留党察看一年, 退缴相关款项]
16            [留党察看一年, 政务处理]
17                   [政务记大过]
18                   [政务记大过]
19                   [政务记大过]
20                   [政务记大过]
21             [政务记大过, 政务处理]
22           [政务记大过, 退缴相关款项]
23             [政务记大过, 组织处理]
24                    [政务记过]
25                    [政务记过]
26                    [政务记过]
Name: label, dtype: object

最后print(corpus_y)输出结果为:

[[1 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0]
 [0 0 0 0 1 1 0 0]
 [0 0 0 0 1 1 0 0]
 [0 0 0 0 1 1 0 1]
 [0 0 0 0 1 1 0 1]
 [0 0 0 0 0 1 0 1]
 [0 0 0 0 0 1 0 1]
 [0 1 0 0 0 1 0 0]
 [0 0 1 0 0 0 0 0]
 [0 0 1 0 0 0 0 0]
 [0 0 1 0 0 0 0 0]
 [0 0 1 0 0 0 0 0]
 [0 1 1 0 0 0 0 0]
 [0 0 1 0 0 0 0 1]
 [0 0 1 0 0 0 1 0]
 [0 0 0 1 0 0 0 0]
 [0 0 0 1 0 0 0 0]
 [0 0 0 1 0 0 0 0]]

可见sklearn.preprocessing.MultiLabelBinarizerpandas
的数据结果连用会得到很好的编码效果。
另外如果sklearn.preprocessing.MultiLabelBinarizer的输入只是一整段字符串的话,结果会对每一个字进行分类。如:

text = '卷积神经网络 要求输入 数据长度 保持一致'
from sklearn.preprocessing import MultiLabelBinarizer as MLB

text = text.split()
print(text)#利用空格切出每个小标签(我的训练语料用空格分好的)
mlb = MLB()#实例化类MultiLabelBinarizer(classes=None, sparse_output=False)
corpus_y = mlb.fit_transform(text)#将标签转化成one-hot形式的序列
print (corpus_y)

输出为:


['卷积神经网络', '要求输入', '数据长度', '保持一致']
[[0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0]
 [0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0]
 [0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1]
 [1 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值