You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将正负中性情感标签转换为数组?涉及算法及代码疑问

问题解决方案

一、情感标签转换为数组的修正代码

你现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:05:17