Форма ввода в сверточную нейронную сеть - PullRequest
0 голосов
/ 08 ноября 2018

Я предсказываю предпочтение клиента из набора объектов, использующих сверточную нейронную сеть. Ввод имеет следующий формат.

Customer    Objects  x1   x2   x3    x4 . .......x15
a1           fruits  0.5  .9   0.9   0.7
a1           veggies 0.2  .6   0.3   0.2
a1        condiments 0.0  .8   0.9   0.0
a1           dairy   0.4  .2   0.3   0.3
a1        pastries   0.6  .7   0.8   0.0
a1        other      0.9  .0   0.6   0.4
a2           fruits  0.5  .9   0.9   0.7
a2           veggies 0.2  .6   0.3   0.2
a2        condiments 0.0  .8   0.9   0.0
a2           dairy   0.4  .2   0.3   0.3
a2        pastries   0.6  .7   0.8   0.0
a2        other      0.9  .0   0.6   0.4

и так далее. x1 ... x15 - это непрерывные переменные, представляющие покупательскую привычку конкретного покупателя в разные периоды. Я нормализовал эти переменные и кодировал метки, которые являются столбцами объектов. Я сохраняю столбец объектов в предикторах, поскольку переменные x в сочетании с объектами будут иметь значение, иначе они будут просто случайными числами. Ниже приведен мой код, который создает X, Y и изменяет форму X в формате, который можно передать в конверт.,

X = df
Y = df.loc[:, df.columns == 'objects']
Y = Y.values.ravel()
#Encode the class values to integers
encoder = LabelEncoder()
encoder.fit(Y)
Y_int = encoder.transform(Y)
#Hot encode the integer values
Y_cat = np_utils.to_categorical(Y_int)

# Generate Training and Validation Sets
X_train, X_test, y_train, y_test = train_test_split(X,Y_cat, test_size=.3)

print(X_train.shape, y_train.shape)
print(X_test.shape, y_test.shape)

((35000, 17), (35000, 6))
((15000, 17), (15000, 6))

def data_formatting_score(df):
  pred_col = [ 'x1', 'x2', 'x3',
               'x4', 'x5', 'x6', 'x7',....'x15']
  value_col = pred_col
  df_cust=df.pivot_table(index=['customer','objects'],dropna=False,aggfunc=np.sum)[value_col]
  df_c=df_c.fillna(value=0)
  df_np=np.array(list(df_c.groupby(by=[df_c.index.get_level_values(0),df_c.index.get_level_values(0)]).apply(pd.DataFrame.as_matrix)))
  return (df_np, df_c.index.get_level_values(0).unique())

X_train, indx = data_formatting_score(X_train)
a,b,c=X_train.shape

X_train = X_train.reshape(a,b,c,1)

print X_train.shape
(34952, 6, 15, 1)
  1. Почему я получаю только 34952 столбца, когда меняю форму? Также я заметил, что каждый раз, когда я запускаю скрипт, размер выборки меняется.

  2. Можем ли мы подавать данные с разной высотой и шириной (в данном случае это 6 X15) в качестве входных данных в Connet?

...