기계 학습 분류기를 위해 범주 형 변수를 숫자로 변환하는 다양한 방법을 배우고 있습니다. 나는 pd.get_dummies
방법을 발견했고 sklearn.preprocessing.OneHotEncoder()
성능과 사용 측면에서 어떻게 다른지보고 싶었습니다.
내가 사용하는 방법에 대한 자습서 발견 OneHotEncoder()
에 https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical-features/ 이후를 sklearn
문서는이 기능에 너무 도움이되지 않았습니다. 제대로하고 있지 않다는 느낌이 있지만 ...
일부는 pd.dummies
over 사용의 장단점을 설명 할 수 있습니까 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