问题:在机器学习特征工程中,假如每类特征需要转化为相同的维度进行拼接,那该怎么办呢?接一个全连接层MLP就可以了。
例子:将(128,64) 维度的向量转化为(128,32)维。
import torch
import torch.nn as nn
# 定义多层感知机模型
class MLP(nn.Module):
def __init__(self):
super(MLP, self).__init__()
self.fc1 = nn.Linear(64, 64) # 第一个全连接层,输入维度为64,输出维度为64
self.fc2 = nn.Linear(64, 32) # 第二个全连接层,输入维度为64,输出维度为32
self.relu = nn.ReLU() # 激活函数使用ReLU
def forward(self, x):
x = self.relu(self.fc1(x)) # 输入经过第一个全连接层和激活函数
x = self.fc2(x) # 第一个全连接层的输出经过第二个全连接层
return x
# 创建MLP模型实例
mlp_model = MLP()
# 定义输入数据
input_data = torch.randn(128, 64)
# 使用MLP模型进行转换
output_data = mlp_model(input_data)
# 打印输出数据的维度
print("Output shape:", output_data.shape)
现在就可以去拼接特征了,如果想提升准确率,还是需要加一个损失函数进行训练一下,直接和后面任务的损失函数进行组合就可以啦。或者单独的训练也可以啦。
注意:向量拼接之前,最好进行特征归一化,将特征转化为可比的数值范围。