python - 标签编码,one_hot 编码到标签
问题描述
我的用例是关于机器学习在物理层无线通信中的应用。我的输入特征是复值的,我将其转换为等效的实值特征,如下所示。
Y = np.concatenate((np.real(S_bar), np.imag(S_bar)))
Y = array([[-1., 1., 3., 1., -3., 1., -3., -3., 1., -1.],
[-1., 3., 3., -1., 1., 3., -3., 1., -1., 3.],
[ 1., -1., 3., 3., 3., -3., -1., -1., -1., -1.],
[ 3., 1., -3., 3., -3., 1., 1., 3., 3., -1.]])
Y 是一个 4 x 10 的训练矩阵,其中 4 行是特征,10 列是样本或训练示例。我想将其表示为 10 x 4 的 one_hot 编码训练标签,以使其适合 keras 环境,如下所示:
model.fit(X_train, Y_labels, epochs=5, batch_size=100)
我尝试了以下方式,但它不起作用。
一世。标签编码:
le = preprocessing.LabelEncoder()
y = []
for i in range(0,Y.shape[0]):
le.fit(Y[i,:])
temp = le.transform(Y[i,:])
y.append(temp)
y = np.array(y)
Y 被标记为:
array([[1, 2, 3, 2, 0, 2, 0, 0, 2, 1],
[1, 3, 3, 1, 2, 3, 0, 2, 1, 3],
[2, 1, 3, 3, 3, 0, 1, 1, 1, 1],
[3, 2, 0, 3, 0, 2, 2, 3, 3, 1]], dtype=int64)
ii. one_hot 编码:
encoder=OneHotEncoder(sparse=False)
encoder.fit(y.T)
labels = encoder.transform( y.T)
* 我的问题是,“标签”的形状为 (10,16),而模型预期为 (10,4)。请问如何使 one_hot 编码器的大小适合 Y_train 和 Y_test 的真实形状?或者有没有比这更好的方法来使用上面的示例。我真的很感激这方面的任何帮助。
解决方案
我会keras.utils.to_categorical
用来得到你所追求的:
from keras.utils import to_categorical
labels = to_categorical(y[0])
# labels.shape == (10, 4)
基本上 one-hot 为您编码目标标签。
推荐阅读
- gitlab - Gitlab存储库时间长度和文件存储大小
- ros - 使用 ROS 和凉亭模拟机器人蜘蛛
- html - 如何使用 Python 删除 html 标签?
- java - Java BufferedReader 冻结
- javascript - WebSocket 打开时间
- php - 如何从 UploadFile 类创建非映射派生 CV 类
- keras - 图像识别的类别不平衡
- spring-boot - 如何使用@ControllerAdvice 捕获 Spring boot 2 webflux 中的所有异常
- jquery - 如何在部分加载时绑定事件 Shopify
- java - Android - 有没有办法为服务使用消息处理程序并且仍然能够从绑定的活动中调用它的方法?