Я предсказываю предпочтение клиента из набора объектов, использующих сверточную нейронную сеть. Ввод имеет следующий формат.
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)
Почему я получаю только 34952 столбца, когда меняю форму? Также я заметил, что каждый раз, когда я запускаю скрипт, размер выборки меняется.
Можем ли мы подавать данные с разной высотой и шириной (в данном случае это 6 X15) в качестве входных данных в Connet?