Прогноз после горячего кодирования - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь использовать пример dataFrame:

data = [['Alex','USA',0],['Bob','India',1],['Clarke','SriLanka',0]]

df = pd.DataFrame(data,columns=['Name','Country','Traget'])

Теперь я использовал get_dummies для преобразования строкового столбца в целое число:

column_names=['Name','Country']  

one_hot = pd.get_dummies(df[column_names])  

После преобразования столбцы:Возраст, Name_Alex, Name_Bob, Name_Clarke, Country_India, Country_SriLanka, Country_USA

Разделение данных.

x=df[["Name_Alex","Name_Bob","Name_Clarke","Country_India","Country_SriLanka","Country_USA"]].values  

y=df['Age'].values

Разделение набора данных в поезде и тестирование

from sklearn.cross_validation import train_test_split

x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=float(0.5),random_state=0)

Логистическая регрессия

from sklearn.linear_model import LogisticRegression

logreg = LogisticRegression()

logreg.fit(x_train, y_train)

Теперь модель обучена.

Для прогнозирования, скажем, я хочу предсказать "цель", указав "Имя" и "Страна".
Как: ["Алекс", "США"].

Предсказание.

Если бы я использовал это:

logreg.predict([["Alex","USA"]).    

, очевидно, это не будет работать.

Вопрос1) Как проверить прогноз после применения однократного кодирования во время обучения?

Вопрос2) Как выполнить прогноз на примере файла CSV, который содержит только «Имя» и «Страна»?

1 Ответ

0 голосов
/ 20 февраля 2019

Я предлагаю вам использовать кодировщики ярлыков sklearn и один пакет горячих кодировщиков вместо pd.get_dummies.

Как только вы инициализируете кодировщик этикеток и один горячий кодировщик для каждой функции, сохраните их где-нибудь, чтобы при необходимостипрогнозируя данные, вы можете легко импортировать сохраненные кодировщики меток и один горячий кодировщик и снова кодировать свои функции.

Таким образом, вы снова кодируете свои функции так же, как вы делали это во время обучения.

Ниже приведен код, который я использую для сохранения кодировщиков:

labelencoder_dict = {}
onehotencoder_dict = {}
X_train = None
for i in range(0, X.shape[1]):
    label_encoder = LabelEncoder()
    labelencoder_dict[i] = label_encoder
    feature = label_encoder.fit_transform(X[:,i])
    feature = feature.reshape(X.shape[0], 1)
    onehot_encoder = OneHotEncoder(sparse=False)
    feature = onehot_encoder.fit_transform(feature)
    onehotencoder_dict[i] = onehot_encoder
    if X_train is None:
      X_train = feature
    else:
      X_train = np.concatenate((X_train, feature), axis=1)

Теперь я сохраняю этот onehotencoder_dict и метку encoder_dict и позже использую его для кодирования.

def getEncoded(test_data,labelencoder_dict,onehotencoder_dict):
    test_encoded_x = None
    for i in range(0,test_data.shape[1]):
        label_encoder =  labelencoder_dict[i]
        feature = label_encoder.transform(test_data[:,i])
        feature = feature.reshape(test_data.shape[0], 1)
        onehot_encoder = onehotencoder_dict[i]
        feature = onehot_encoder.transform(feature)
        if test_encoded_x is None:
          test_encoded_x = feature
        else:
          test_encoded_x = np.concatenate((test_encoded_x, feature), axis=1)
  return test_encoded_x
...