質問: pd.join(result) ``` 変換後のデータフレーム | 参加 | 欠席 | 予約なし | 年齢 | 性別 | ・・・・・・・・ | | --- | --- | --- | --- | --- | --- | | 1 | 0 | 0 | 18 | 男性 | | | 0 | 1 | 0 | 22 | 女性 | | | 1 | 0 | 0 | 33 | 男性 | | | 0 | 0 | 1 | 40 | 不明 | | 上記のように文字列をダミー変数化させてしまうと、目的変数が3つにわかれてしまうため、 目的変数を3つにわけて識別器で学習しなければいけないのでしょうか? factorize()関数を利用して整数値化させてしまえば、1列に「0,1,2」と表示できますが、 「参加」と「予約なし」の距離は、「参加」と「欠席」の距離の2倍という関係ではないので、 誤った処理になってしまうと感じております。 稚拙な質問となるかと存じますが、ご教示いただけましたら幸甚です。 何卒よろしくお願い申し上げます。
回答: 機械学習といっても様々な手法が存在します。 例えば、k近傍法のように、目的変数の3つの値をただのラベルとして扱うものであれば、0,1,2としてしまって問題ありません。 なぜなら、結果が各値を距離として扱うようなアルゴリズムではないからです。 いっぽうで、ディープラーニングをはじめとする、出力を数値(確率や距離)として出すアルゴリズムでは、ご懸念のように、「参加」と「予約なし」と「欠席」のそれぞれの距離関係は平等であるという前提を無視した結果が出力されてしまいます。 この場合、一般には、ご推察通り、3つのダミー変数に変換します。 このとき、3回に分けて学習をする必要があるとお考えのようですが、一般にディープラーニングをはじめ、結果を数値で出力するものの多くは、出力値を複数に設定できます。 ダミー変数が3つであれば、3つの確率を出力させ、この中で最も高い確率のものに分類するというのが定石です。