[解決済み] Sklearnの決定木にカテゴリデータを渡す
質問
Sklearn Decision Treeにカテゴリデータをエンコードする方法については、いくつかの投稿がありますが、Sklearnのドキュメントからは、以下のようになりました。
決定木の利点は以下の通りです。
(...)
数値データとカテゴリデータの両方を扱うことができる。他の手法は、通常、1種類の変数しか持たないデータセットの分析に特化している。詳しくはアルゴリズムをご覧ください。
しかし、次のスクリプトを実行すると
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
data = pd.DataFrame()
data['A'] = ['a','a','b','a']
data['B'] = ['b','b','a','b']
data['C'] = [0, 0, 1, 0]
data['Class'] = ['n','n','y','n']
tree = DecisionTreeClassifier()
tree.fit(data[['A','B','C']], data['Class'])
は以下のようなエラーを出力します。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/sklearn/tree/tree.py", line 154, in fit
X = check_array(X, dtype=DTYPE, accept_sparse="csc")
File "/usr/local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 377, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: could not convert string to float: b
Rではカテゴリデータを渡すことが可能だと思いますが、Sklearnでは可能でしょうか?
どのように解決するのですか?
一般的な回答とは異なり、私はこの目的のためにScikit-Learnによって提供されるツールを使用することを希望します。そうする主な理由は、それらが簡単に パイプライン .
Scikit-Learn自体、カテゴリデータを扱うための非常に優れたクラスを提供しています。独自の関数を書く代わりに
LabelEncoder
であり、これは
この目的のために特別に設計された
.
ドキュメントから以下のコードを参照してください。
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(["paris", "paris", "tokyo", "amsterdam"])
le.transform(["tokyo", "tokyo", "paris"])
これは機械学習アルゴリズムのために、自動的に数値にエンコードしてくれます。また、整数から文字列に戻すことも可能です。これは単に
inverse_transform
を次のように呼び出すだけです。
list(le.inverse_transform([2, 2, 1]))
これは
['tokyo', 'tokyo', 'paris']
.
また、決定木以外の多くの分類器、例えばロジスティック回帰やSVMなどでは、カテゴリ変数を
ワンホットエンコーディング
. Scikit-learnは、このような場合にも
OneHotEncoder
クラスによってサポートされています。
これが役立つといいのですが!
関連
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
-
[解決済み] pandasでsklearn fit_transformを使用し、numpy配列の代わりにdataframeを返すには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] バブルソートの宿題
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] 新しいpip backtrackingの実行時問題の解決