如何用字符串训练机器学习?

时间:2021-06-05 19:48:47

标签: python pandas tensorflow machine-learning keras

我已将机器学习的输入数据设为 csv 文件。数据是二维数组输入和标签 示例

[[[55:32:1:23:41:243:255:11:182:192:231:201],"播放"]

[[23:222:225],“谈话”]

[[[23:132:215:111:29:192],“谈话”]

<头>
[55:32:1:23:41:243:255:11:182:192:231:201]
[23:222:225] 谈话

我尝试使用以下代码进行训练

import tensorflow as tf
import numpy as np
np.set_printoptions(precision=3, suppress=True)
import pandas as pd
from tensorflow.keras import layers
from tensorflow.keras.layers.experimental import preprocessing
import io

data = pd.read_csv('./newTest4.csv',  header=None)
data_features=data.copy()
data_labels=data_features.pop(0)
data_features=np.array(data_features)
data_labels=np.array(data_labels)
data_labels 


data_model=tf.keras.Sequential ([
layers.Dense(64),
layers.Dense(1)
])
data_model.compile(loss=tf.losses.MeanSquaredError(),optimizer=tf.optimizers.Adam())


data_model.fit(data_features,data_labels,epochs=100)

但是输出是

UnimplementedError:  Cast string to float is not supported
     [[node mean_squared_error/Cast (defined at <ipython-input-18-ce25e735eaa4>:1) ]] [Op:__inference_train_function_1561]
Function call stack:
train_function

2 个答案:

答案 0 :(得分:1)

您需要一种模型可以预测输出的方法。如果您要预测的字符串数量固定,则必须将每个唯一的字符串映射到一个二进制变量。

一个例子是一个二维向量,其中第一个维度代表“玩”,第二个维度代表“谈话”。

您的数据如下所示:

[[[55:32:1:23:41:243:255:11:182:192:231:201],[1,0]] #“玩”,不“说话”

[[23:222:225], [0,1]] # 没有“播放”、“谈话”

现在,模型可以学习预测输出是 [1,0](播放)还是 [0,1](谈话)。

这种表示被称为one-hot encoding,你可以在this blogpost中阅读它!

答案 1 :(得分:0)

您不能将类别作为字符串来训练模型。而是将每个字符串编码为唯一的整数值。

有一篇关于如何编码分类数据的博客文章。检查3 Ways to Encode Categorical Variables for Deep Learning