pandas.DataFrameのマルチラベルを簡単にバイナライズする方法
はじめに
機械学習をしていると、付与ラベルをone-hotベクトルに変換する必要がよく発生するのですが、pandas
のDataFrame
とscikit-learn
のMultiLabelBinarizer
を使えば簡単に変換できることを知りました。備忘録として記事にします。
変換対象のデータ
以下の表データが格納されたcsvファイル(sample.csv
)をone-hotベクトルとしてバイナライズすることを目指します。ラベルデータは、セミコロンがデリミターとして格納されていることを想定します。
text | labels |
---|---|
あいうえお | ひらがな |
カキクケコ | カタカナ |
ドラえもん | カタカナ;ひらがな |
バイナライズ後のデータは以下の通りです。labels
列のデータはリスト形式になっているので、簡単に機械学習器のターゲット変数に入力することが可能になります。
text | labels |
---|---|
あいうえお | [1, 0] |
カキクケコ | [0, 1] |
ドラえもん | [1, 1] |
数行でマルチバイナライズされたone-hotベクトル列を作成することができました。
ラベルデータのリスト化
リスト化はPythonの標準機能であるsplit
を使えば簡単にできます。
>>> df = pd.read_csv('sample.csv')
>>> df
text labels
0 あいうえお ひらがな
1 カキクケコ カタカナ
2 さしスセソ ひらがな;カタカナ
>>>
>>> df['labels'] = df['labels'].apply(lambda x: x.split(';'))
>>> df
text labels
0 あいうえお [ひらがな]
1 カキクケコ [カタカナ]
2 さしスセソ [ひらがな, カタカナ]
この時点でlabels
列に格納されているのは文字列ではなく配列になっています。
マルチバイナライズ化
マルチバイナライズは、scikit-learn
のMultiLabelBinarizer
というクラスを使って行います。ラベルのリストはmlb.classes_
という変数で確認することができます。
>>> from sklearn.preprocessing import MultiLabelBinarizer
>>>
>>> mlb = MultiLabelBinarizer()
>>>
>>> mlb.fit_transform(df['labels'])
array([[1, 0],
[0, 1],
[1, 1]])
>>> mlb.classes_
array(['ひらがな', 'カタカナ'], dtype=object)
Pandasに再格納
zip
とlist
を使えば、pandas.DataFrame
に再格納が可能です。
>>> df = pd.DataFrame(list(zip(df['text'], mlb.fit_transform(df['labels']))))
>>> df.columns = ['text', 'labels']
>>> df
text labels
0 あいうえお [1, 0]
1 カキクケコ [0, 1]
2 さしスセソ [1, 1]
参考文献
Author And Source
この問題について(pandas.DataFrameのマルチラベルを簡単にバイナライズする方法), 我々は、より多くの情報をここで見つけました https://qiita.com/maechanneler/items/b6a06a9e296f02af0801著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .