如何在 2 列上训练 ML 模型以解决分类问题?
Posted
技术标签:
【中文标题】如何在 2 列上训练 ML 模型以解决分类问题?【英文标题】:How to train ML model on 2 columns to solve for classification? 【发布时间】:2019-12-20 15:56:45 【问题描述】:我正在对其进行情绪分析的数据集中有三列(0
,1
,2
类):
text thing sentiment
但问题是我只能在text
或thing
上训练我的数据并得到预测sentiment
。有没有办法在text
和thing
上训练数据,然后预测sentiment
?
问题案例(比如):
|text thing sentiment
0 | t1 thing1 0
. |
. |
54| t1 thing2 2
这个例子告诉我们情绪也应该取决于thing
。如果我尝试将两列连接在另一列下方,然后尝试,但这是不正确的,因为我们不会将两列之间的任何关系提供给模型。
我的测试集还包含两列test
和thing
,我必须根据这两列上的训练模型来预测情绪。
现在我使用的是tokenizer
,然后是下面的模型:
model = Sequential()
model.add(Embedding(MAX_NB_WORDS, EMBEDDING_DIM, input_length=X.shape[1]))
model.add(SpatialDropout1D(0.2))
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
关于如何进行或使用哪种模型或编码操作的任何指示?
【问题讨论】:
【参考方案1】:您可能希望转移到 Keras 函数 API 并训练多输入模型。
根据 Keras 的创建者 François CHOLLET 在他的著作Deep Learning with Python [Manning, 2017](第 7 章,第 1 节)中:
某些任务需要多模式输入:它们合并来自不同输入源的数据,使用不同类型的神经层处理每种类型的数据。想象一个深度学习模型试图预测一件二手衣服的最可能的市场价格,使用以下输入:用户提供的元数据(如商品的品牌、年龄等),用户提供的文字说明和商品图片。如果您只有可用的元数据,您可以对其进行一次热编码并使用密集连接的网络来预测价格。如果您只有可用的文本描述,则可以使用 RNN 或 1D convnet。如果你只有图片,你可以使用 2D convnet。但是你怎么能同时使用这三个呢?一种天真的方法是训练三个独立的模型,然后对它们的预测进行加权平均。但这可能不是最理想的,因为模型提取的信息可能是多余的。更好的方法是通过使用可以同时查看所有可用输入模式的模型来联合学习更准确的数据模型:具有三个输入分支的模型。
【讨论】:
谢谢它需要一些时间来实现这种方式我会尝试和评论。如果你知道有人可以解决这个问题,请标记他们。【参考方案2】:我认为Concatenate 功能是解决这种情况的方法,总体思路应该如下。请根据您的用例进行调整。
### whatever preprocessing you may want to do
text_input = Input(shape=(1, ))
thing_input = Input(shape=(1,))
### now bring them together
merged_inputs = Concatenate(axis = 1)([text_input, thing_input])
### sample output layer
output = Dense(3)(merged_inputs)
### pass your inputs and outputs to the model
model = Model(inputs = [text_input, thing_input], outputs = output)
【讨论】:
嘿,我也更新了测试数据集的问题。 嵌入层去哪儿了?【参考方案3】:您必须将多个列作为列表,然后在对原始数据进行嵌入和预处理后合并进行训练。 示例:
train = pd.read_csv('COVID19 multifeature Emotion - 50 data.csv', nrows=49)
# This dataset has two text column field and different class level
X_train_doctor_opinion = train["doctor-opinion"].str.lower()
X_train_patient_opinion = train["patient-opinion"].str.lower()
X_train = list(X_train_doctor_opinion) + list(X_train_patient_opinion))
然后预处理和嵌入
【讨论】:
以上是关于如何在 2 列上训练 ML 模型以解决分类问题?的主要内容,如果未能解决你的问题,请参考以下文章