Pandas

Python Pandas DataFrame 任意の変数を二値化する 回帰を分類にする時などに使える

任意の変数を二値化する

import pandas as pd

df = pd.DataFrame({'a': ['yes', 'no', 'yes', 'no'],
                   'b': [10, 2, 0, 5]})

print(df)

df['b'] = df['b'].map(lambda x: 1 if x >= 10 else 0)

print(df)

実行例

     a   b
0  yes  10
1   no   2
2  yes   0
3   no   5

     a  b
0  yes  1
1   no  0
2  yes  0
3   no  0

活用事例:回帰を分類にする時などに使える

SVMの実験中に以下のエラーが発生しました。

ValueError: Unknown label type: ‘continuous’

と出ており、これは回帰を分類のアルゴリズムで解こうとした時に発生している可能性があります。

Traceback (most recent call last):
  File "082_07.py", line 39, in <module>
    model.fit(X_train_std, y_train)
  File "C:\Users\user\anaconda3\envs\ml\lib\site-packages\sklearn\svm\_classes.py", line 230, in fit
    check_classification_targets(y)
  File "C:\Users\user\anaconda3\envs\ml\lib\site-packages\sklearn\utils\multiclass.py", line 172, in check_classification_targets
    raise ValueError("Unknown label type: %r" % y_type)
ValueError: Unknown label type: 'continuous'

yを任意の条件で二値化することで対応することを考えます。先程紹介したSVMのところから引用すると以下の処理です。y(目的変数)を、任意の条件、以下では x >= 10 で、1, 0に変換して格納し、その後 y として利用します。

# 10以上のときにTureにする
data['flg'] = data['area'].map(lambda x: 1 if x >= 10 else 0)
...
y = data['flg']