我正在尝试使用Keras,LSTM和Conv1D处理“供体选择”数据集。数据集具有一个文本列,5个分类数据列和2个数字列。我已处理问题的文本数据从5个分类列和2个数字列开始。下面是我要开发的模型的图片
该模型的右侧是我努力将五个分类列和两个数字列连接起来的地方。
对于我拥有的五个分类数据:
- 将它们转换为唯一键值对的字典
- 将其应用于列
- 将步骤2的输出转换为一个热编码变量
- 将输出调整为(-1,1)
以上代码如下:
def crea_flaten_catgorical(xdata,colname):
nme_1 = colname + '_shape'
ip_mdl = Input(shape=(1,),name=nme_1)
return ip_mdl
def gen_catg_inp_list(xdata,colnme,inp_lst):
uniq_vals = np.unique(xdata[colnme])
val_map = {}
for i in range(len(uniq_vals)):
val_map[uniq_vals[i]] = i
print(val_map)
a=xdata[colnme].map(val_map)
inp_lst.append(a.values)
print(inp_lst[:50])
return inp_lst
inp_mdl = crea_flaten_catgorical(X_trn,'schol_state')
input_model_2.append(inp_mdl)
inp_mdl = crea_flaten_catgorical(X_trn,'tea_prfx')
input_model_2.append(inp_mdl)
inp_mdl = crea_flaten_catgorical(X_trn,'prj_grd_catg')
input_model_2.append(inp_mdl)
inp_mdl = crea_flaten_catgorical(X_trn,'clean_catg')
input_model_2.append(inp_mdl)
inp_mdl = crea_flaten_catgorical(X_trn,'clean_subcatg')
input_model_2.append(inp_mdl)
#Working with actual data
inp_xtrn_lst = []
inp_xtrn_lst2 = gen_catg_inp_list(X_trn,'schol_state',inp_xtrn_lst)
inp_xtrn_lst = []
inp_xtrn_lst3 = gen_catg_inp_list(X_trn,'tea_prfx',inp_xtrn_lst)
inp_xtrn_lst = []
inp_xtrn_lst4 = gen_catg_inp_list(X_trn,'prj_grd_catg',inp_xtrn_lst)
inp_xtrn_lst = []
inp_xtrn_lst5= gen_catg_inp_list(X_trn,'clean_catg',inp_xtrn_lst)
inp_xtrn_lst = []
inp_xtrn_lst6= gen_catg_inp_list(X_trn,'clean_subcatg',inp_xtrn_lst)
print(len(inp_xtrn_lst2))
#one hot encoding but no reshaping
xtrnscholst_arr =to_categorical(inp_xtrn_lst2)
print(xtrnscholst_arr)
xtrnteaprfx_arr = to_categorical(inp_xtrn_lst3)
xtrnprjgrdgcatg_arr = to_categorical(inp_xtrn_lst4)
xtrncleancatg_arr = to_categorical(inp_xtrn_lst5)
xtrncleansubcatg_arr = to_categorical(inp_xtrn_lst6)
print(X_trn_num_1,len(xtrnscholst_arr),xtrnscholst_arr)
#reshaping
xtrnscholst_arr= xtrnscholst_arr.reshape(xtrnscholst_arr.shape[1],xtrnscholst_arr.shape[2])
xtrnteaprfx_arr= xtrnteaprfx_arr.reshape(xtrnteaprfx_arr.shape[1],xtrnteaprfx_arr.shape[2])
xtrnprjgrdgcatg_arr= xtrnprjgrdgcatg_arr.reshape(xtrnprjgrdgcatg_arr.shape[1],xtrnprjgrdgcatg_arr.shape[2])
xtrncleancatg_arr= xtrncleancatg_arr.reshape(xtrncleancatg_arr.shape[1],xtrncleancatg_arr.shape[2])
xtrncleansubcatg_arr= xtrncleansubcatg_arr.reshape(xtrncleansubcatg_arr.shape[1],xtrncleansubcatg_arr.shape[2])
#check the shapes
print(xtrnscholst_arr.shape,type(xtrnscholst_arr),xtrnscholst_arr.ndim)
print(xtrnteaprfx_arr.shape)
print(xtrnprjgrdgcatg_arr.shape)
print(xtrncleancatg_arr.shape)
print(xtrncleansubcatg_arr.shape)
print(X_trn_num_1.shape)
print(X_trn_num_2.shape)
对于两个数值数据列
这两列没有特殊处理
X_trn_num_1 = (X_trn[['teanum_prevpostprj']].to_numpy())
X_trn_num_2 = (X_trn[['price']].to_numpy())
现在,当我尝试对这5列和2列进行堆叠时,出现了我无法解决的错误,因此需要您的帮助。
rest_num_input = np.hstack((xtrnscholst_arr,xtrnteaprfx_arr,xtrnprjgrdgcatg_arr,xtrncleancatg_arr,xtrncleansubcatg_arr,X_trn_num_1,X_trn_num_2))
print(rest_num_input.shape)
(87398,510)
这个问题是:答案
如何将这5个分类列和2个数字列堆叠到适合NN输入的单个nd数组中?