One-hot编码后的预测
Prediction After One-hot encoding
我正在尝试使用示例数据帧:
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)在训练过程中应用one-hot编码后如何测试预测?
问题2)如何对仅包含“Name”和“Country”的示例csv文件进行预测?
我建议您使用 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
我正在尝试使用示例数据帧:
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)在训练过程中应用one-hot编码后如何测试预测?
问题2)如何对仅包含“Name”和“Country”的示例csv文件进行预测?
我建议您使用 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