[解決済み] get_dummies (Pandas) と OneHotEncoder (Scikit-learn) の長所と短所は何ですか?
質問
機械学習分類器のために、カテゴリ変数を数値に変換するさまざまな方法を学んでいます。 私は
pd.get_dummies
メソッドと
sklearn.preprocessing.OneHotEncoder()
という2つのメソッドがあり、パフォーマンスと使用方法の点でどのように異なるかを確認したいと思いました。
の使い方に関するチュートリアルを見つけました。
OneHotEncoder()
に
https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical-features/
から
sklearn
のドキュメントがこの機能に関してあまり役に立たなかったからです。正しくできていないような気もしますが...。
を使用することの長所と短所を説明してもらえますか?
pd.dummies
の上に
sklearn.preprocessing.OneHotEncoder()
と逆は?
私が知っているのは
OneHotEncoder()
が疎な行列を与えることは知っていますが、それ以外の使い方はよくわかりません。
pandas
メソッドに比べてどのような利点があるのかがわかりません。 私はそれを非効率的に使用しているのでしょうか?
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
sns.set()
%matplotlib inline
#Iris Plot
iris = load_iris()
n_samples, m_features = iris.data.shape
#Load Data
X, y = iris.data, iris.target
D_target_dummy = dict(zip(np.arange(iris.target_names.shape[0]), iris.target_names))
DF_data = pd.DataFrame(X,columns=iris.feature_names)
DF_data["target"] = pd.Series(y).map(D_target_dummy)
#sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \
#0 5.1 3.5 1.4 0.2
#1 4.9 3.0 1.4 0.2
#2 4.7 3.2 1.3 0.2
#3 4.6 3.1 1.5 0.2
#4 5.0 3.6 1.4 0.2
#5 5.4 3.9 1.7 0.4
DF_dummies = pd.get_dummies(DF_data["target"])
#setosa versicolor virginica
#0 1 0 0
#1 1 0 0
#2 1 0 0
#3 1 0 0
#4 1 0 0
#5 1 0 0
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
def f1(DF_data):
Enc_ohe, Enc_label = OneHotEncoder(), LabelEncoder()
DF_data["Dummies"] = Enc_label.fit_transform(DF_data["target"])
DF_dummies2 = pd.DataFrame(Enc_ohe.fit_transform(DF_data[["Dummies"]]).todense(), columns = Enc_label.classes_)
return(DF_dummies2)
%timeit pd.get_dummies(DF_data["target"])
#1000 loops, best of 3: 777 µs per loop
%timeit f1(DF_data)
#100 loops, best of 3: 2.91 ms per loop
どのように解決するのですか?
OneHotEncoder
は文字列の値を直接処理することができません。もし、名目上の特徴が文字列であれば、まずそれを整数にマップする必要があります。
pandas.get_dummies
はちょっと逆です。デフォルトでは、columnsが指定されない限り、文字列列を一発表現にのみ変換します。
関連
-
[解決済み] urllib、urllib2、urllib3、requestsモジュールの違いは何ですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] mixinとは何か、なぜ有用なのか?
-
[解決済み] pipとcondaの違いは何ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Django filter queryset __in for *every* item in list