pythonは独熱符号化を実現する
2288 ワード
たとえば、次のデータセットがあります.
方法1:get_を利用するdummies関数
import pandas as pd
testdata = pd.DataFrame({'pet': ['cat', 'dog', 'dog', 'fish'], 'age': [4, 6, 3, 3],
'salary': [4, 5, 1, 1]})
pet age salary
0 cat 4 4
1 dog 6 5
2 dog 3 1
3 fish 3 1
方法1:get_を利用するdummies関数
ある列を独熱符号化する
testdataの「age」列と「salary」列を独熱符号化し、testdataにマージするage = pd.get_dummies(testdata['age'], prefix='age')
salary = pd.get_dummies(testdata['salary'], prefix='salary')
testdata.drop(["age", "salary"], axis=1, inplace=True) # "age", "salary"
testdata = pd.concat((testdata, age, salary), axis=1) #
print(age)
print(testdata)
出力: age , dataframe , :
age_3 age_4 age_6
0 0 1 0
1 0 0 1
2 1 0 0
3 1 0 0
testdata :
pet age_3 age_4 age_6 salary_1 salary_4 salary_5
0 cat 0 1 0 0 1 0
1 dog 0 0 1 0 0 1
2 dog 1 0 0 1 0 0
3 fish 1 0 0 1 0 0
このtestdataは、トレーニングセットとしてモデルに直接配置できます.
ある数列のロットに対して独熱符号化を行う
次のように直接書いて、2つの列を一度に独熱符号化することもできます.df = pd.get_dummies(testdata, columns=['age',"salary"]) # columns
print(df) #
方法2:OneHotEncoder関数で from sklearn.preprocessing import OneHotEncoder
age = OneHotEncoder(sparse = False).fit_transform( testdata[['age']] )
sa = OneHotEncoder(sparse = False).fit_transform( testdata[['salary']])
final_output = np.hstack((age, sa))
print(final_output )
出力:[[0. 1. 0. 0. 1. 0.]
[0. 0. 1. 0. 0. 1.]
[1. 0. 0. 1. 0. 0.]
[1. 0. 0. 1. 0. 0.]]
pet列を追加したい場合は、次の方法を試してみてください.f = []
f.extend(age)
f.extend(sa)
f.append(testdata["pet"])
参考:Pythonマシン学習におけるDictVectorizerの使用説明pandasでのget_の利用dummies()によるユニヒートコーディング(One-Hot encoding)
age = pd.get_dummies(testdata['age'], prefix='age')
salary = pd.get_dummies(testdata['salary'], prefix='salary')
testdata.drop(["age", "salary"], axis=1, inplace=True) # "age", "salary"
testdata = pd.concat((testdata, age, salary), axis=1) #
print(age)
print(testdata)
age , dataframe , :
age_3 age_4 age_6
0 0 1 0
1 0 0 1
2 1 0 0
3 1 0 0
testdata :
pet age_3 age_4 age_6 salary_1 salary_4 salary_5
0 cat 0 1 0 0 1 0
1 dog 0 0 1 0 0 1
2 dog 1 0 0 1 0 0
3 fish 1 0 0 1 0 0
df = pd.get_dummies(testdata, columns=['age',"salary"]) # columns
print(df) #
from sklearn.preprocessing import OneHotEncoder
age = OneHotEncoder(sparse = False).fit_transform( testdata[['age']] )
sa = OneHotEncoder(sparse = False).fit_transform( testdata[['salary']])
final_output = np.hstack((age, sa))
print(final_output )
出力:
[[0. 1. 0. 0. 1. 0.]
[0. 0. 1. 0. 0. 1.]
[1. 0. 0. 1. 0. 0.]
[1. 0. 0. 1. 0. 0.]]
pet列を追加したい場合は、次の方法を試してみてください.
f = []
f.extend(age)
f.extend(sa)
f.append(testdata["pet"])
参考:Pythonマシン学習におけるDictVectorizerの使用説明pandasでのget_の利用dummies()によるユニヒートコーディング(One-Hot encoding)