如何将含文本的CSV转为RecordIO格式?解决Unsupported dtype报错
解决RecordIO转换时「ValueError: Unsupported dtype object on array」错误
这个错误的核心原因是你使用的smac.write_numpy_to_dense_tensor只支持数值型numpy数组,但你传入的X是文本类型的数组(dtype为object),因此触发了不支持的类型错误,必须调整数据格式。
调整步骤及示例代码
- 先将文本特征转换为数值型数据(可选用TF-IDF、词嵌入等方法),同时对标签做编码处理:
import io import sagemaker.amazon.common as smac from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.preprocessing import LabelEncoder import pandas as pd import numpy as np # 加载数据集(示例) df = pd.DataFrame({ 'Label': ['label a', 'label b'], 'Subject': ['Test one', 'Test two'], 'Body': ['Test Body', 'Test second'] }) # 合并Subject和Body作为统一文本特征 df['combined_text'] = df['Subject'] + ' ' + df['Body'] # 用TF-IDF将文本转为数值矩阵 tfidf = TfidfVectorizer() X = tfidf.fit_transform(df['combined_text']).toarray() # 对标签做编码,转为数值型数组 le = LabelEncoder() y = le.fit_transform(df['Label']).reshape(-1, 1) # 写入RecordIO格式 buf = io.BytesIO() smac.write_numpy_to_dense_tensor(buf, X, y) buf.seek(0)
- 关键注意点:
- 确保
X和y最终都是数值型numpy数组(比如float32、int32类型),绝对不能保留object类型的文本数据。 - 除TF-IDF外,也可选用Word2Vec、BERT嵌入等其他文本向量化方法,只要输出为数值矩阵即可。
内容的提问来源于stack exchange,提问作者user19665076
相关产品推荐
相关产品推荐

