Makine öğrenimi sınıflandırıcıları için kategorik değişkenleri sayısal hale dönüştürmek için farklı yöntemler öğreniyorum. pd.get_dummies
Yönteme rastladım ve sklearn.preprocessing.OneHotEncoder()
performans ve kullanım açısından nasıl farklı olduklarını görmek istedim.
Ben nasıl kullanılacağı hakkında bir öğretici buldum OneHotEncoder()
üzerinde https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical-features/ beri sklearn
dokümantasyon Bu özellikle ilgili çok yararlı değildi. Doğru yapmadığımı hissediyorum ... ama
Bazı kullanmanın avantajlarını ve dezavantajlarını açıklayabilir pd.dummies
üzerinde sklearn.preprocessing.OneHotEncoder()
ve tersi? Bunun OneHotEncoder()
size seyrek bir matris verdiğini biliyorum, ancak bunun dışında nasıl kullanıldığından ve pandas
yönteme göre faydalarının ne olduğundan emin değilim . Verimsiz mi kullanıyorum?
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