如何将正负中性情感标签转换为数组?涉及算法及代码疑问
问题解决方案
一、情感标签转换为数组的修正代码
你现有np.where用法错误,该函数不支持直接传递多条件多值映射,要实现负向→0、中性→1、正向→2的标签数组转换,推荐两种可靠方法:
方法1:用np.select处理多条件映射
import numpy as np # 定义匹配条件与对应标签值 conditions = [ df['Sentimen'] == 'Negative', df['Sentimen'] == 'Netral', df['Sentimen'] == 'Positive' ] values = [0, 1, 2] # 生成标签数组,default处理未知情感类型 label_array = np.select(conditions, values, default=-1)
方法2:用map函数快速映射
# 定义情感-标签映射字典 sentiment_map = {'Negative': 0, 'Netral': 1, 'Positive': 2} # 转换为数组,fillna处理缺失值 label_array = np.array(df['Sentimen'].map(sentiment_map).fillna(-1), dtype=int)
你原代码中的labely属于笔误,修正后切片代码应为:
y = label_array[45:75]
二、朴素贝叶斯+粒子群优化+K折交叉验证实现流程
1. 前置准备
假设已完成文本特征提取(推荐用sklearn.feature_extraction.text.TfidfVectorizer生成特征矩阵X),确保X与标签数组y维度匹配。
2. 粒子群优化(PSO)寻找朴素贝叶斯最优超参数
以多项式朴素贝叶斯(MultinomialNB)为例,核心超参数为alpha(平滑系数),用PSO搜索最优值:
from sklearn.naive_bayes import MultinomialNB from sklearn.model_selection import cross_val_score from pyswarm import pso # 定义适应度函数:返回1-K折交叉验证准确率(PSO默认最小化目标) def fitness(params): alpha = params[0] if alpha <= 0: # alpha必须大于0,不符合则返回最差值 return 1.0 model = MultinomialNB(alpha=alpha) scores = cross_val_score(model, X, y, cv=5, scoring='accuracy') return 1 - scores.mean() # 设置PSO搜索范围(alpha∈(0.01,5)),执行优化 lb = [0.01] ub = [5.0] optimal_params, _ = pso(fitness, lb, ub, swarmsize=20, maxiter=50) best_alpha = optimal_params[0]
3. 最优超参数下的K折交叉验证
from sklearn.model_selection import KFold import numpy as np # 初始化5折交叉验证器,开启洗牌保证数据分布均匀 kf = KFold(n_splits=5, shuffle=True, random_state=42) accuracies = [] # 遍历每折数据训练、评估模型 for train_idx, test_idx in kf.split(X, y): X_train, X_test = X[train_idx], X[test_idx] y_train, y_test = y[train_idx], y[test_idx] model = MultinomialNB(alpha=best_alpha) model.fit(X_train, y_train) acc = model.score(X_test, y_test) accuracies.append(acc) # 输出验证结果 print(f"5折交叉验证平均准确率: {np.mean(accuracies):.4f}") print(f"准确率标准差: {np.std(accuracies):.4f}")
注意事项
- 若使用高斯朴素贝叶斯(
GaussianNB),需调整超参数搜索逻辑; - PSO的种群大小、迭代次数可根据数据规模调整,平衡搜索效率与最优解质量;
- 若存在类别不平衡,可将评估指标改为
f1_macro替代准确率。
内容的提问来源于stack exchange,提问作者Renu Hanjan
相关产品推荐
相关产品推荐

