指定输入形状并准备5个分类的2个数字变量的x_train数据,以便使用Functional API传递给Conv1D

我正在尝试使用Keras,LSTM和Conv1D处理“供体选择”数据集。数据集具有一个文本列,5个分类数据列和2个数字列。我已处理问题的文本数据从5个分类列和2个数字列开始。下面是我要开发的模型的图片

指定输入形状并准备5个分类的2个数字变量的x_train数据,以便使用Functional API传递给Conv1D

该模型的右侧是我努力将五个分类列和两个数字列连接起来的地方。

对于我拥有的五个分类数据:

  1. 将它们转换为唯一键值对的字典
  2. 将其应用于列
  3. 将步骤2的输出转换为一个热编码变量
  4. 将输出调整为(-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数组中?

YSYQQ 回答:指定输入形状并准备5个分类的2个数字变量的x_train数据,以便使用Functional API传递给Conv1D

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3124052.html

大家都在问