np数组拟合模型时报could not convert string to float错误如何解决
问题根因
你的特征数组x中存储的是字符串格式的向量文本,而非实际的浮点型数值数组。即便移除了换行符,带方括号的完整字符串也无法被scikit-learn自动转换为模型要求的浮点输入,因此触发该报错。
解决步骤
- 先将所有字符串格式的向量转换为浮点型二维数组,参考代码如下:
import numpy as np x_processed = [] for vec_str in x: # 移除字符串首尾的方括号,按空白分割为单个数字字符串后转浮点 num_list = vec_str.strip('[]').strip().split() float_vec = np.array(num_list, dtype=np.float32) x_processed.append(float_vec) # 转换为shape为(样本数, 向量维度)的数值数组 x_processed = np.array(x_processed)
- 替换适配负特征的分类模型:你当前使用的
MultinomialNB(多项式朴素贝叶斯)仅支持非负特征输入,而Doc2Vec输出的向量包含大量负值,直接输入会触发新报错,建议替换为GaussianNB(高斯朴素贝叶斯)、逻辑回归等支持负特征的模型,训练代码调整如下:
from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import train_test_split xtrain, xtest, ytrain, ytest = train_test_split(x_processed, y, test_size=0.2, random_state=42) model = GaussianNB() model.fit(xtrain, ytrain) print(model.score(xtest, ytest))
内容的提问来源于stack exchange,提问作者mxverik
相关产品推荐
相关产品推荐

