如何为keras模型提供功能?

时间:2019-02-16 20:26:47

标签: python machine-learning keras feature-selection

我正在尝试获得有关ML的动手经验,并学习如何训练能够根据姓名预测性别的模型。

我对名称进行矢量化处理(使用了三种不同的方法进行处理)并将它们作为输入传递给模型,但是尽管如此,我只能使模型如此精确(最大约70%)

这时,在我的语料库中有32K个名称,我几乎耗尽了其他名称的来源(毕竟,如果我一直在争取其他名称,那么我的字典有时会足够大而不需要还是AI)。

所以我认为我可以通过提供有关名称的提示来“帮助”我的网络,以帮助提高其准确性。

如果我正确地理解了特征,我可以使用它们来帮助模型建立更好的准确性,方法是赋予它附加的特征以帮助更准确地预测班级。

例如这些:

<QuerySet [{'gender': 'Female', 'ends_with_a': 8089}, {'gender': 'Male', 'ends_with_a': 677}]>,
<QuerySet [{'gender': 'Female', 'ends_with_na': 1710}, {'gender': 'Male', 'ends_with_na': 93}]>

a结尾的名字更有可能属于女性。等等。我找不到能自动从单词中合成特征的工具,因此我想自己必须自己弄清楚并提取它们。

我不了解的是如何将这些特征传递给模型,而当我要求模型为我预测班级时,模型却不要求这些特征。

准备好数据后,这是一个熊猫框架:

        gender  gender_count    name    vectorized   indexised  nlp_vectorized
20908   1       5               jasmely [0, ..]      [9, ...]   [0.44732133, 0.5620067 ...]

我使用向量化输入模型进行训练:

X = names_frame["vectorized"].values
X = np.array([np.array(l) for l in X])
Y = names_frame["gender"].values
model = Sequential()
model.add(Dense(16, input_dim=26, activation='sigmoid'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=40, batch_size=500, validation_split=.2, callbacks=[PlotLossesKeras()], verbose=False)

我可以将特征与数据一起添加到dataframe中,但是如何将其提供给模型?

0 个答案:

没有答案