рдкрдВрдбреЛрдВ рдореЗрдВ get_dummies () рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╕реНрдХреЗрд▓реЗрд░реЛрд▓реЙрдЬреА рдХреЗ рд╕рд╛рде рдЯреНрд░реЗрди / рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ (рдпрд╛ "fit_transform" рдФрд░ "рд░реВрдкрд╛рдВрддрд░") рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рд▓реЛрдЧ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрдВрдбреЛрдВ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ (рдФрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рдХреЛрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдпреЛрдЧрджрд╛рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ)ред
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреИрд╕реЗ рдПрдХ рдирдореВрдирд╛ рдлреНрд░реЗрдо рд╕реЗ рдЖрджрд╛рдиреЛрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрджреНрдо рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛
@ chrish42 , рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
FYI рдХрд░реЗрдВ scikit-learn рдореЗрдВ OneHotEncoder рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдЙрдирдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
import pandas as pd
from sklearn.pipeline import TransformerMixin
class DummyEncoder(TransformerMixin):
def __init__(self, columns=None):
self.columns = columns
def transform(self, X, y=None, **kwargs):
return pd.get_dummies(X, columns=self.columns)
def fit(self, X, y=None, **kwargs):
return self
рджреЗ рд░рд╣реА рд╣реИ
In [15]: df
Out[15]:
A B C
0 1 a a
1 2 b a
In [16]: DummyEncoder().transform(df)
Out[16]:
A B_a B_b C_a
0 1 1 0 1
1 2 0 1 1
рд╕реНрддрдВрднреЛрдВ рдХреЗ рдХреНрд░рдо рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред
@TomAugspurger , рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдХреЗрд▓реЗрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рд╣реА рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд░реБрдЪрддреА рд╣реИред рдореИрдВ рдХрд┐рд╕реА рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ get_dummes () рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рдХрд╣рд╛ рдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рдареАрдХ рдЙрд╕реА рдХреЙрд▓рдо рдХреЛ рдмрдирд╛рддреЗ рд╣реБрдП), рднрд▓реЗ рд╣реА рджреВрд╕рд░реЗ рдбрд╛рдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдЙрдкрд╕рдореВрд╣ рд╣реЛред рдХреБрдЫ рдХреЙрд▓рдо рдЖрджрд┐ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ "рдЯреНрд░реЗрди / рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп"ред рдХреНрдпрд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реИ? (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐рд╕реА рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред)
рдореИрдВ sklearn рдореЗрдВ OneHotEncoder
рд╡рд░реНрдЧ рд╕реЗ рдЕрд╡рдЧрдд рд╣реВрдБ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЕрдиреНрдп рд╕реАрдорд╛рдПрдБ рд╣реИрдВред
рдореИрдВрдиреЗ @ chrish42 рдЬреИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд df_train DataFrame рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
`` `
df_train = pandas.DataFrame ({"рдХрд╛рд░": ["рд╕реАрдЯ", "рдмреАрдПрдордбрдмреНрд▓реНрдпреВ"], "рд░рдВрдЧ": ["рд▓рд╛рд▓", "рд╣рд░рд╛"]})
pandas.get_dummies (df_train)
car_bmw car_seat color_green color_red
реж реж рез реж рез рез
рез рез реж рез рез реж
Then we are provided with
``` .python
df_test = pandas.DataFrame({"car":["seat","mercedes"], "color":["red","green"]})
pandas.get_dummies(df_test )
car_mercedes car_seat color_green color_red
0 0 1 0 1
1 1 0 1 0
рдЪреВрдБрдХрд┐ рдореИрдВрдиреЗ df_train рдореЗрдВ рд╡реИрд░рд┐рдПрдмрд▓ "рдХрд╛рд░" рдХреЗ рд▓рд┐рдП "рдорд░реНрд╕рд┐рдб" рдорд╛рди рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рд╣реЙрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
`` `
car_bmw car_seat color_green color_red
реж реж рез реж рез рез
рез реж реж рез рез реж
Where the column car_mercedes actually never appears.
This could be solved by allowing get_dummies to receive an input dictionary stating the accepted values that we allow for each column.
Returning to the previous example, we could give as input to get_dummies the following dict of sets
``` .python
accepted_values_per_column = {'car': {'bmw', 'seat'}, 'color': {'green', 'red'}}
рдФрд░ рд╣рдо get_dummies рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ
`` `
get_dummies (df_test, accept_values_per_column = Accept_values_perm_column)
car_bmw car_seat color_green color_red
реж реж рез реж рез рез
рез реж реж рез рез реж
`` `
рдФрд░ рдЙрдореНрдореАрдж рдХрд░реЗрдВ рдХрд┐ get_dummies (df_test) рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реМрдЯрд╛ рд╣реИ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрджрд┐ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЪрд░ Categorical
рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ
In [5]: df_train = pd.DataFrame({"car":Series(["seat","bmw"]).astype('category',categories=['seat','bmw','mercedes']),"color":["red","green"]})
In [6]: df_train
Out[6]:
car color
0 seat red
1 bmw green
In [7]: pd.get_dummies(df_train )
Out[7]:
car_seat car_bmw car_mercedes color_green color_red
0 1 0 0 0 1
1 0 1 0 1 0
рдореВрд▓ рдкреНрд░рд╢реНрди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдкрдиред
рдФрд░ рдЬрдм рдЖрдк рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рд╡рд╛рдкрд╕ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк gradorical.from_codes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдФрд░ рдмрд┐рдЯ рдХреА рдЕрд╡рд╛рдВрдЫрд┐рдд рд╕рд▓рд╛рд╣ред рдпрджрд┐ рдЖрдк рд╡рд░реНрдЧреАрдХрд░рдгреЛрдВ рдкрд░ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рдЯреАрдХ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рдХреЙрд▓рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реИ) рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдХреЛрд▓рд┐рдирд░рд┐рдЯреА рд╣реЛрдЧреАред
5 рдЕрдХреНрдЯреВрдмрд░, 2015 рдХреЛ 05:34 рдкрд░, рдЬреЗрдл рд░реАрдмреИрдХ рд╕реВрдЪрдирд╛рдПрдБ @ithub.com рдиреЗ рд▓рд┐рдЦрд╛:
рдпрджрд┐ рдЖрдк рд╕рдВрднрд╡рддрдпрд╛ рдЕрдирдмреЛрд▓реНрдб рдЪрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ рдЪрд░ рдХреЛ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ
[рел]: df_train = pd.DataFrame ({"рдХрд╛рд░": рд╢реНрд░реГрдВрдЦрд▓рд╛ (["рд╕реАрдЯ", "рдмреАрдПрдордбрдмреНрд▓реНрдпреВ"]) рдореЗрдВред ), "рд░рдВрдЧ": [ "рд▓рд╛рд▓", "рд╣рд░реА"]})
[рем] рдореЗрдВ: df_train
рдЖрдЙрдЯ [6]:
рдХрд╛рд░ рдХрд╛ рд░рдВрдЧ
0 рд╕реАрдЯ рд▓рд╛рд▓
1 рдмреА.рдПрдо.рдбрдмреНрд▓реНрдпреВ рд╣рд░рд╛[M] рдореЗрдВ: pd.get_dummies (df_train)
рдЖрдЙрдЯ [7]:
car_seat car_bmw car_merrs color_green color_red
реж рез реж реж реж рез
рез реж рез реж рез рез реж
рдореВрд▓ рдкреНрд░рд╢реНрди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдкрдиред-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред
@TomAugspurger @jreback рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛
train_a = pd.DataFrame ({"IsBadBuy": [0,1,0], "Make": ['Toyota', 'Mazda', 'BMW']})
IsBadBuy Make_BMW Make_Mazda Make_Toyota
реж реж реж реж рез
рез рез реж рез рез реж
реи реж рез реж реж
test_a = pd.DataFrame ({"Make": ['Toyota', 'BMW']})
рдкреНрд░рд┐рдВрдЯ pd.get_dummies (test_a, рдХреЙрд▓рдо = ['рдореЗрдХ'])
Make_BMW Make_Toyota
реж реж рез
рез рез реж
рдпрд╣рд╛рдВ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ Make_Mazda рдХреЙрд▓рдо рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ ML рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдЯреНрд░реЗрди рдореЗрдВ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реЛрдВрдЧреЗред
рдПрдХ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рд╕реНрддрдВрднреЛрдВ рдХреА рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╛рдд рджреА рд╣реИ рдпрджрд┐ рдЖрдк https://m.youtube.com/watch?v=KLPtEBokqQ0 рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ
_____________________________
рдкреНрд░реЗрд╖рдХ: рдЕрдЬрдп рд╕рдХреНрд╕реЗрдирд╛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рдкреНрд░реЗрд╖рд┐рдд: рдЧреБрд░реБрд╡рд╛рд░, 12 рдЬрдирд╡рд░реА, 2017 18:31
рд╡рд┐рд╖рдп: рдкреБрди: [рдкрдВрдбреЛрдВ-рджреЗрд╡ / рдкрдВрдбреЛрдВ] рдЗрдЪреНрдЫрд╛ рд╕реВрдЪреА: get_dummies () рдЯреНрд░реЗрди / рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ (# 8918) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп
To: рдкрдВрдбреЛрдВ-рджреЗрд╡ / рдкрдВрдбреЛрдВ [email protected]
Cc: рдЯреЙрдо рдСрдЧреНрд╕рдкрд░реНрдЧрд░ [email protected] , рдЙрд▓реНрд▓реЗрдЦ рдЙрд▓реНрд▓реЗрдЦ @noreply.github.com
@jreback рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛
train_a = pd.DataFrame ({"IsBadBuy": [0,1,0], "Make": ['Toyota', 'Mazda', 'BMW']})
IsBadBuy Make_BMW Make_Mazda Make_Toyota
реж реж реж реж рез
рез рез реж рез рез реж
реи реж рез реж реж
test_a = pd.DataFrame ({"Make": ['Toyota', 'BMW']})
рдкреНрд░рд┐рдВрдЯ pd.get_dummies (test_a, рдХреЙрд▓рдо = ['рдореЗрдХ'])
Make_BMW Make_Toyota
реж реж рез
рез рез реж
рдпрд╣рд╛рдВ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ Make_Mazda рдХреЙрд▓рдо рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ ML рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдЯреНрд░реЗрди рдореЗрдВ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реЛрдВрдЧреЗред
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред
рдзрдиреНрдпрд╡рд╛рдж @TomAugspurger
PyTata Chicago 2016 рдореЗрдВ @TomAugspurger рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рдмрд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреА рдЧрдИ рдереАред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрди рд╕рднреА рдХрд╛рд░рдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХрд╛ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд┐рдирдХреЗ рдХрд╛рд░рдг рдпрд╣ рдореБрджреНрджрд╛ / рдЕрдиреБрд░реЛрдз рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред IMHO рдпрд╛ рддреЛ рдЙрд╕рдХреА рдХрдХреНрд╖рд╛ DummyEncoder рдпрд╛ рдХреБрдЫ рдЙрдЪрд┐рдд рд╕рдордХрдХреНрд╖реЛрдВ рдХреЛ рдкрдВрдбреЛрдВ рдореЗрдВ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рдВ, рдореИрдВ рдЙрд╕рдХреЗ рдЧрд┐рддреБрдм рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрд╕рдХреА рдХрдХреНрд╖рд╛ рдХреА рдирдХрд▓ / рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднреАрддрд░ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛-рдореЙрдбрд▓рд┐рдВрдЧ рдореЗрдВ рдЬрд▓реНрджреА рдЬрд╛рддрд╛ рд╣реИ
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдФрд░ рдкрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдкрд╛рдВрдбрд╛ scikit- рд╕реАрдЦрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рд╣реИ
рджреЛрдиреЛрдВ рдХреЗ рдКрдкрд░ рдмрдиреА рдПрдХ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдХрдорд░рд╛ред
рдмреБрдз рдкрд░, 10 рдордИ, 2017 рдХреЛ рд╢рд╛рдо 6:13 рдмрдЬреЗ, рдмреНрд░рд╛рдпрди рд╡рд╛рдпрд▓реА рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
PyData Chicago 2016 рдХреА рдмрд╛рдд @TomAugspurger рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рд╣реИ
https://github.com/TomAugspurger рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕рдиреЗ рдП
рдЗрд╕ рдореБрджреНрджреЗ / рдЕрдиреБрд░реЛрдз рдкрд░ рд╕рднреА рдХрд╛рд░рдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХрд╛ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред IMHO рдпрд╛ рддреЛ рдЙрд╕рдХреА рдХрдХреНрд╖рд╛ DummyEncoder рдпрд╛ рдХреБрдЫ рдЙрдЪрд┐рдд
рдкрдВрдбреЛрдВ рдореЗрдВ рд╕рдорддреБрд▓реНрдп рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рдВ рдореИрдВ рдЙрд╕рдХреЗ рдЧрд┐рддреБрдм рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ
рдФрд░ рдЙрд╕рдХреА рдХрдХреНрд╖рд╛ рдХреА рдирдХрд▓ рдХрд░реЗрдВ / рдЙрд╕рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднреАрддрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИредBTW рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @TomAugspurger https://github.com/TomAugspurger рдореЗрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдирдпрд╛ рдкрд╕рдВрджреАрджрд╛ Pyata рдЧреБрд░реБред рдореИрдВ рд╕рдм рдХреБрдЫ рд╡рд╣ рдиреАрдЪреЗ рд╢рд┐рдХрд╛рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ
рдХрд┐рдпрд╛ / рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрд╡рд╢реЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ .. рдПрдХ рдбрд░рд╛рд╡рдирд╛ / рдкреАрдЫрд╛ рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ .. рдЖрдк
рдмрд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред :)-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/pandas-dev/pandas/issues/8918#issuecomment-30062538888 ,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABQHIpTqgHSE7iFVF9Pp4_YoKB9DPLcEks5r4kSrgaJpZM4DB6Hb
ред
рдпрд╣рд╛рдБ рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рдЯ / рдкрд░рд┐рд╡рд░реНрддрди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдбрдореА рдЪрд░ред
https://github.com/joeddav/get_smarties
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдпреЛрдЧрджрд╛рди рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛!
рдпрд╣ # 14017 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ
рдореИрдВрдиреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЯреНрд░реЗрди рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рд╣реЙрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдЪрд░ред рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЛ рднреА рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдорд╢реАрди рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред
https://github.com/yashu-seth/dummyPy
рдЖрдк рдЗрд╕ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдП рдЧрдП рд▓реЛрдЧ dask-ml рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ
@TomAugspurger рдпрд╣ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рдПрдХрд▓ рд░рд┐рдХреЙрд░реНрдб рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реЙрдЯ рдПрдиреНрдХреЛрдбреЗрдб рдХреЙрд▓рдо рджреЗрддрд╛ рд╣реИред
рдореИрдВ рдХреНрдпрд╛ рдЦреЛ рд░рд╣рд╛ рд╣реВрдБ?
рдЖрдпрд╛рдд pyodbc
рдЖрдпрд╛рдд рдЕрдЪрд╛рд░
Sklearn.linear_model рдЖрдпрд╛рдд рд╕реЗ LogisticRegression
sklearn.linear_model рд╕реЗ LinearRegression рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдЖрдпрд╛рдд рдПрдирдкреАрдкреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдиреНрди
рдкреАрдбреА рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдкрд╛рдВрдбрд╛
sklearn.pipeline рд╕реЗ TransformerMixin рдЖрдпрд╛рдд рдХрд░реЗрдВ
sklearn.pipeline рд╕реЗ make_pipeline рдЖрдпрд╛рдд рдХрд░реЗрдВ
рд╡рд░реНрдЧ рдбрдореАрдЗрдВрдХреЛрдбрд░ (рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░рдХреНрд╕рд┐рди):
рдбреАрдлрд╝ рдлрд┐рдЯ (рд╕реНрд╡, рдПрдХреНрд╕, рд╡рд╛рдИ = рдХреЛрдИ рдирд╣реАрдВ):
self.index_ = X.index
self.columns_ = X.columns
self.cat_columns_ = X.select_dtypes (рд╢рд╛рдорд┐рд▓ = ['рд╢реНрд░реЗрдгреА'] рдХреЙрд▓рдо
self.non_cat_columns_ = X.columns.drop (self.cat_columns_)
self.cat_map_ = {col: X[col].cat for col in self.cat_columns_}
left = len(self.non_cat_columns_)
self.cat_blocks_ = {}
for col in self.cat_columns_:
right = left + len(X[col].cat.categories)
self.cat_blocks_[col], left = slice(left, right), right
return self
def transform(self, X, y=None):
return np.asarray(pd.get_dummies(X))
def inverse_transform(self, X):
non_cat = pd.DataFrame(X[:, :len(self.non_Cat_columns_)],
columns=self.non_cat_columns_)
cats = []
for col, cat in self.cat_map_.items():
slice_ = self.cat_blocks_[col]
codes = X[:, slice_].argmax(1)
series = pd.Series(pd.Categorical.from_codes(
codes, cat.categories, ordered=cat.ordered
), name=col)
cats.append(series)
df = pd.concat([non_cat] + cats, axis=1)[self.columns_]
return df
cnxn = pyodbc.connect ('DRIVER = {SQL Server}; SERVER = {XXXXX}; DATABASE = {ML_Learn_Taxi}; UID = {XXXX}; PWD = XXXX}');
sql = "" "
рд╢реАрд░реНрд╖ 1 CONVERT рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (int, [order_key]) order_key
, CONVERT (int, [service_date_key]) service_date_key
, [Order_source_desc]
, 1 рдХреЗ рд░реВрдк рдореЗрдВ 'рд╡рд╛рдкрд╕реА_рдлреНрд▓реИрдЧ'
[ML_Return_Customer] рд╕реЗред [Dbo] [ред
рдЬрд╣рд╛рдВ [рдХреНрд░рдо_рд╕реНрд░реЛрдд_рджреЗрд╕] = 'рдСрдирд▓рд╛рдЗрди'
рд╕рдВрдШ
рд╢реАрд░реНрд╖ 2 CONVERT рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (int, [order_key])
, CONVERT (int, [service_date_key])
, [Order_source_desc]
2
[ML_Return_Customer] рд╕реЗред [Dbo] [ред
рдЬрд╣рд╛рдВ [рдХреНрд░рдо_рд╕реНрд░реЛрдд_рджреИрд╕реА] = 'рдЗрдирдмрд╛рдЙрдВрдб рдХреЙрд▓'
рд╕рдВрдШ
рд╢реАрд░реНрд╖ 1 CONVERT рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (int, [order_key])
, CONVERT (int, [service_date_key])
, [Order_source_desc]
, 1
[ML_Return_Customer] рд╕реЗред [Dbo] [ред
рдЬрд╣рд╛рдВ [рдХреНрд░рдо_рд╕реНрд░реЛрдд_рджрд┐рд▓] = 'рдЖрдЙрдЯрдмрд╛рдЙрдВрдб рдХреЙрд▓'
"" "
prod_sql = "" "
рд╢реАрд░реНрд╖ 1 CONVERT рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (int, [order_key]) order_key
, CONVERT (int, [service_date_key]) service_date_key
, [Order_source_desc]
, 1 рдХреЗ рд░реВрдк рдореЗрдВ 'рд╡рд╛рдкрд╕реА_рдлреНрд▓реИрдЧ'
[ML_Return_Customer] рд╕реЗред [Dbo] [ред
рдЬрд╣рд╛рдВ [рдХреНрд░рдо_рд╕реНрд░реЛрдд_рджреЗрд╕] = 'рдСрдирд▓рд╛рдЗрди'
"" "
InputDataSet = pd.read_sql (sql, cnxn)
рдкреНрд░реЛрдбрдбреИрдЯрд╕реЗрдЯ = pd.read_sql (prod_sql, cnxn)
рдкреНрд░рд┐рдВрдЯ (" * * * * * рдбреЗрдЯрд╛
* * * * * ")рдкреНрд░рд┐рдВрдЯ (" * рд╢реНрд░реЗрдгреА рдХреЙрд▓рдо рдЬрд╛рдирдХрд╛рд░реА"
* * ")InputDataSet.info ()
рдкреНрд░рд┐рдВрдЯ (" * рд░реИрдЦрд┐рдХ рдкреНрд░рддрд┐рдЧрдорди)
* * ")X = InputDataSet.drop ('рд░рд┐рдЯрд░реНрди_рдлреНрд▓реИрдЧ', рдЕрдХреНрд╖ = 1)
y = InputDataSet ['return_flag']
A = ProdDataSet.drop ('рд░рд┐рдЯрд░реНрди_рдлреНрд▓реИрдЧ', рдЕрдХреНрд╖ = 1)
рдмреА = рдкреНрд░реЛрдбрдбрд╕реЗрдЯрд╕реЗрдЯ ['рд╡рд╛рдкрд╕реА_рдлреНрд▓реИрдЧ']
рдПрдирдХреЗ = рдбрдореАрдиреЗрдХрд░ ()
enc.fit (рдПрдХреНрд╕)
рдЙрддреНрдкрд╛рджрди = рдПрдирдХрд╛рдЙрдВрдЯрд░рдлреЙрд░реНрдо (рдП)
рдкреНрд░рд┐рдВрдЯ (рдкреНрд░реЙрдб)
OUTPUT: * * * * рдбреЗрдЯрд╛
* * * *рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдереЛрдбрд╝рд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИред рдореИрдВ рдПрдХ рдХреЙрд▓рдо рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ "рдлрд┐рдЯ" рдХреЙрд▓ рдореЗрдВ рдЖрдк рдмрд╕ рдХрд░рддреЗ рд╣реИрдВ:
categories = sorted(training_data.iloc[:, column_index].value_counts(dropna=True).index)
рдлрд┐рдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЖрдк рдЬрд┐рд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕реАрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдЖрдк categories
рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред
рдФрд░ рдлрд┐рд░ "рдкрд░рд┐рд╡рд░реНрддрди" рдореЗрдВ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ:
from pandas.api import types as pandas_types
categorical_data = testing_data.iloc[:, [column_index]].astype(
pandas_types.CategoricalDtype(categories=categories),
)
one_hot_encoded = pandas.get_dummies(categorical_data)
рдФрд░ рдпрд╣ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдореИрдкрд┐рдВрдЧ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ-рд╣реЙрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдореВрд▓реНрдп рдореМрдЬреВрдж рдирд╣реАрдВ рдереЗ, рддреЛ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди NaN рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рдореВрд▓реНрдп рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЙрд▓рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдореИрдВ рдмрд╕ рд╣рд░ рдХреЛрдИ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЙрд╕реЗ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред ;-)
@ рдЕрдореНрдмрд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдЕрдЪреНрдЫрд╛, рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдПрдХ рд▓рдВрдмреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдПрдХ рдиреЛрдЯрдмреБрдХ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧреА / рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддреА рд╣реИ: https://nbviewer.jupyter.org/github/SuperCowPowers/scp-labs/blob/master/notebook/Categorical_Encoding_Dangers.ipynb
Kaggle XGBoost рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХреЛрдб рдХреЗ рдиреАрдЪреЗ рджреЗрдЦрд╛ред рдпрд╣ рдЯреНрд░рд┐рдХ рдХрд░рддрд╛ рд╣реИред
X_train = pd.get_dummies(X_train)
X_valid = pd.get_dummies(X_valid)
X_test = pd.get_dummies(X_test)
X_train, X_valid = X_train.align(X_valid, join='left', axis=1)
X_train, X_test = X_train.align(X_test, join='left', axis=1)
рдореИрдВрдиреЗ рднреА рдХрдИ рдмрд╛рд░ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдиреАрдЪреЗ рдПрдХ рд╡рд░реНрдЧ (рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рд▓реЗрддреЗ рд╣реБрдП) рд▓рд┐рдЦрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдЧрдИ рд╣реИрдВред
import pandas
from sklearn.preprocessing import LabelEncoder
class CategoryEncoder:
'''
labelEncoding : boolean -> True If the categorical columns are to be label encoded
oneHotEncoding : boolean -> True If the categorical columns are to be one hot encoded (using pandas.get_dummies method)
dropFirst : boolean -> True if first column is to be dropped (usually to avoid multi-collinearity) post one hot encoding
Doesn't matter if oneHotEncoding = False
df : pandas.DataFrame() -> dataframe object that needs to be encoded
catCols : list -> list of the categorical columns that need to be encoded
'''
def __init__(self,labelEncoding=True,oneHotEncoding=False,dropFirst=False):
self.labelEncoding = labelEncoding
self.oneHotEncoding = oneHotEncoding
self.dropFirst = dropFirst
self.labelEncoder = {}
self.oneHotEncoder = {}
def fit(self,df,catCols=[]):
df1 = df.copy()
if self.labelEncoding:
for col in catCols:
labelEncoder = LabelEncoder()
labelEncoder.fit(df1.loc[:,col].astype(str))
df1.loc[:,col] = labelEncoder.transform(df1.loc[:,col])
self.labelEncoder[col] = labelEncoder.classes_
if self.oneHotEncoding:
for col in catCols:
cats = sorted(df1.loc[:,col].value_counts(dropna=True).index)
self.oneHotEncoder[col] = cats
def transform(self,df,catCols=[]):
df1 = df.copy()
if self.labelEncoding:
for col in catCols:
labelEncoder = self.labelEncoder[col]
labelEncoder = {v:i for i,v in enumerate(labelEncoder.tolist())}
print(labelEncoder)
df1.loc[:,col] = df1.loc[:,col].map(labelEncoder)
if self.oneHotEncoding:
for col in catCols:
oneHotEncoder = self.oneHotEncoder[col]
df1.loc[:,col] = df1.loc[:,col].astype(pandas.CategoricalDtype(categories=oneHotEncoder))
df1 = pandas.get_dummies(df1,columns=catCols,drop_first=self.dropFirst)
return df1
рдПрдирдХреЛрдбрд░ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЖрд░рдВрдн рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
enc1 = CategoryEncoder(True,False) # Will label encode but not one-hot encode
enc2 = CategoryEncoder(False,True,True) # Will one-hot encode but not label encode
enc3 = CategoryEncoder(True,True,True) # Will label encode first and then one-hot encode
# List of categorical columns you want to encode
categorical_columns = ['col_1', 'col_2']
enc1.fit(train_df, categorical_columns)
enc1.transform(test_df, categorical_columns) # Returns the dataframe encoded columns
рдиреЛрдЯ: рдпрд╣ рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦреЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рд╕реНрддрдВрдн рдирд╛рдо рдЬреЛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрджрд┐ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЪрд░
Categorical
рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВрдореВрд▓ рдкреНрд░рд╢реНрди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдкрдиред