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

3
我已经将用于机器学习的输入数据制作成了csv文件。这些数据是2D数组的输入和标签。例如:

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

[[23:222:225],"talk"]

[[23:132:215:111:29:192],"talk"]

[55:32:1:23:41:243:255:11:182:192:231:201] play
[23:222:225] talk
我尝试使用以下代码进行训练:
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

1
您不能将“字符串”直接用作“ML”或“DL”模型的输入,您必须使用不同的技术将字符串编码为数字向量,然后将其用作模型的输入。 - Kishore Sampath
2个回答

1
你需要一种模型可以预测输出的方式。如果你有一定数量的字符串需要预测,那么你就需要将每个独特的字符串映射到一个二进制变量上。
例如,一个二维向量,其中第一维表示“play”,第二维表示“talk”。
你的数据看起来像这样:
[[55:32:1:23:41:243:255:11:182:192:231:201],[1,0]] # “play”,没有“talk”
[[23:222:225], [0,1]] # 没有“play”,“talk”
现在,模型可以学习预测输出是否为[1,0](play)或[0,1](talk)。
这种表示被称为独热编码,你可以在this blogpost中了解它!

1
这个方法不适用于分类数据吗?我有不同的数组表示相同的活动,例如“谈话”,这样做会导致它不能正常工作吗? - Kok129

0

你不能将模型训练为字符串类别。相反,你需要将每个字符串编码为唯一的整数值。

有一篇关于如何编码分类数据的博客文章。请查看3种编码深度学习分类变量的方法


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接