使用Gaussian Naive Bayes检测Quillbot改写文本遇稀疏矩阵报错求助
解决GaussianNB处理文本特征时的稀疏矩阵报错问题
问题原因
CountVectorizer转换文本后输出的是稀疏矩阵,而GaussianNB(高斯朴素贝叶斯)仅支持稠密的numpy数组作为输入,因此触发了TypeError。
解决方案
有两种可行的解决方式:
方案1:将稀疏矩阵转为稠密数组
对X_train和X_test调用toarray()方法,把稀疏矩阵转换成numpy稠密数组:
# 转换为稠密数组 X_train_dense = X_train.toarray() X_test_dense = X_test.toarray() # 训练模型 model = GaussianNB() model.fit(X_train_dense, y_train) # 评估 accuracy = model.score(X_test_dense, y_test) print("Model accuracy on test set: {:.2f}%".format(accuracy * 100))
⚠️ 注意:如果文本词汇量很大,稠密数组会占用大量内存,可能导致性能问题。
方案2:改用支持稀疏矩阵的朴素贝叶斯模型
推荐使用MultinomialNB(多项式朴素贝叶斯),它专门针对文本分类场景设计,原生支持稀疏矩阵,内存占用更低,效果通常更优:
# 替换模型为MultinomialNB from sklearn.naive_bayes import MultinomialNB # 初始化模型 model = MultinomialNB() # 直接用稀疏矩阵训练(无需转换) model.fit(X_train, y_train) # 评估 accuracy = model.score(X_test, y_test) print("Model accuracy on test set: {:.2f}%".format(accuracy * 100)) # 可选:输出详细分类报告 y_pred = model.predict(X_test) print(classification_report(y_test, y_pred))
完整修改后的代码(方案2推荐版)
import pandas as pd from sklearn.naive_bayes import MultinomialNB # 替换为MultinomialNB from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report from sklearn.feature_extraction.text import CountVectorizer # 读取数据集 df = pd.read_csv('Desktop/Dataset.csv', encoding='utf-8') df.columns = ['text', 'type'] # 划分训练测试集 train_df, test_df = train_test_split(df, test_size=0.3, random_state=42) # 文本向量化 vectorizer = CountVectorizer() X_train = vectorizer.fit_transform(train_df['text']) X_test = vectorizer.transform(test_df['text']) y_train = train_df['type'].values y_test = test_df['type'].values # 初始化并训练模型 model = MultinomialNB() model.fit(X_train, y_train) # 评估模型 accuracy = model.score(X_test, y_test) print("Model accuracy on test set: {:.2f}%".format(accuracy * 100)) # 输出分类报告 y_pred = model.predict(X_test) print("\nClassification Report:") print(classification_report(y_test, y_pred))
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

