一键编码后的预测

时间:2019-02-20 12:20:01

标签: python pandas machine-learning one-hot-encoding

我正在尝试使用示例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])  

转换后的列为: 年龄,姓名亚历克斯,姓名鲍勃,姓名克拉克,印度国家/地区,国家斯里兰卡,美国国家/地区

切片数据。

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)

现在,模型已经过训练。

对于预测,假设我要通过提供“名称”和“国家/地区”来预测“目标”。
像:[“ Alex”,“ USA”]。

预测。

如果我使用了这个

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

显然,它将无法正常工作。

问题1)在训练过程中应用一键编码后如何测试预测?

问题2)如何对仅包含“名称”和“国家/地区”的示例csv文件进行预测?

1 个答案:

答案 0 :(得分:2)

我建议您使用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