如何将GloVe生成的50d向量传入Naive-Bayes模型训练并解决TypeError报错
错误原因及解决方案
核心错误原因
- 你选择的
BernoulliNB仅支持二值型特征(特征值只能是0/1或布尔值),你传入的GloVe 50维词嵌入是连续浮点数,不符合该模型的输入要求,因此触发类型转换报错。 - 额外检查项:确认
X_train是维度为(样本数量, 50)的二维数组,避免嵌套一维数组的格式问题。
正确调整方案
方案1:更换适配连续特征的朴素贝叶斯模型(推荐)
词嵌入属于连续分布型特征,应使用GaussianNB(高斯朴素贝叶斯)训练,修改代码如下:
from sklearn.naive_bayes import GaussianNB bnbclf = GaussianNB() bnbclf.fit(X = X_train, y = y_train, sample_weight = [cw[i] for i in y_train])
方案2:坚持用BernoulliNB的前置处理(不推荐,会丢失大量特征信息)
如果必须使用伯努利朴素贝叶斯,需要先对所有特征做二值化转换,示例代码如下:
from sklearn.naive_bayes import BernoulliNB from sklearn.preprocessing import Binarizer # 按阈值0对特征做二值化,可根据需求调整阈值 binarizer = Binarizer(threshold=0) X_train_bin = binarizer.fit_transform(X_train) bnbclf = BernoulliNB() bnbclf.fit(X = X_train_bin, y = y_train, sample_weight = [cw[i] for i in y_train])
内容的提问来源于stack exchange,提问作者Divij Gera
相关产品推荐
相关产品推荐

