所以,我正在进行有关预测NBA 2019冠军的小项目,但似乎我的代码不够清晰,无法使keras理解我想要的东西。我已经在数据集中传递了过去冠军的名单,并将其作为获取当前冠军的输出类。
我正在使用2014年至2018年常规赛季球队统计数据集,我假设我应该拥有2019年的统计数据。通过在我认为有用的每个功能中提供一种热编码,使我的NN可以很好地编码我的数据集。
x = pd.concat([df.drop(['Unnamed: 0','Team','Game','Date','Opponent','LastSeasonChamp'], axis = 1), df_ohc], axis = 1)
y = df['LastSeasonChamp']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.35)
x_train = tf.keras.utils.normalize(x_train.values, axis = 1)
x_test = tf.keras.utils.normalize(x_test.values, axis = 1)
n_classes = 30
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(x_train.shape[1], input_shape = (x_train.shape[0],x_train.shape[1]), activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(np.mean([x_train.shape[1], n_classes], dtype = int), activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(n_classes, activation = tf.nn.softmax))
model.compile(optimizer = 'adagrad' , loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train.values, epochs = 3)
model.evaluate(x_test, y_test)
model.save('nba_champ_2019')
new_model = tf.keras.models.load_model('nba_champ_2019')
pred = new_model.predict(x_test)
y_pred = to_categorical(pred)
所以,我可以期望y_pred是一个包含0和1的列,但是我得到的只是一个充满1的列。
答案 0 :(得分:0)
to_categorical
函数用于将类ID列表转换为一键矩阵。您在这里不需要它。在这种情况下,应删除预期的输出。