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

如何用连续情感值预测不平衡二分类Delta变量?求适用模型

针对不平衡二分类的情感值预测方案

核心思路

你的数据属于严重不平衡的二分类任务,线性回归不适合这类场景——它的目标是拟合连续值,无法有效捕捉二分类的概率分布,更应对不了类别失衡问题。需要选用专门的二分类模型,配合针对不平衡数据的优化策略,同时用合适的指标评估效果。

推荐模型及实现(Python)

1. 带类别权重的逻辑回归

逻辑回归是二分类任务的基础模型,通过给少数类(Delta=1)设置更高权重,强制模型关注少数类的预测。适合验证单个特征(sentiment)的预测能力,且结果易解释。

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, roc_auc_score
import pandas as pd

# 假设数据存储在DataFrame df中
df = pd.DataFrame({
    'sentiment': [-1.038, 1.263, -1.900, 0.038, 0.000, 0.458],
    'Delta': [0, 0, 0, 1, 0, 0]
})

X = df[['sentiment']]
y = df['Delta']

# 划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 自动根据样本比例调整类别权重
model = LogisticRegression(class_weight='balanced')
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
y_proba = model.predict_proba(X_test)[:, 1]

print(classification_report(y_test, y_pred))
print(f"ROC-AUC Score: {roc_auc_score(y_test, y_proba):.4f}")

2. 带不平衡优化的梯度提升树(XGBoost)

如果sentiment和Delta之间存在非线性关系(比如中间区间的情感值更易对应Delta=1),树模型能更好捕捉这种模式。XGBoost的scale_pos_weight参数可直接针对不平衡数据优化。

import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, roc_auc_score
import pandas as pd

df = pd.DataFrame({
    'sentiment': [-1.038, 1.263, -1.900, 0.038, 0.000, 0.458],
    'Delta': [0, 0, 0, 1, 0, 0]
})

X = df[['sentiment']]
y = df['Delta']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 计算权重:负类样本数/正类样本数(对应90%负类的情况,权重约为9)
scale_pos_weight = len(y_train[y_train==0]) / len(y_train[y_train==1])
model = xgb.XGBClassifier(scale_pos_weight=scale_pos_weight, random_state=42)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
y_proba = model.predict_proba(X_test)[:, 1]

print(classification_report(y_test, y_pred))
print(f"ROC-AUC Score: {roc_auc_score(y_test, y_proba):.4f}")

3. 带先验调整的高斯朴素贝叶斯

如果sentiment近似服从正态分布,高斯朴素贝叶斯是轻量高效的选择,可通过手动设置先验概率适配不平衡数据。

from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, roc_auc_score
import pandas as pd

df = pd.DataFrame({
    'sentiment': [-1.038, 1.263, -1.900, 0.038, 0.000, 0.458],
    'Delta': [0, 0, 0, 1, 0, 0]
})

X = df[['sentiment']]
y = df['Delta']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 设置先验概率:对应90%负类、10%正类的分布
model = GaussianNB(priors=[0.9, 0.1])
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
y_proba = model.predict_proba(X_test)[:, 1]

print(classification_report(y_test, y_pred))
print(f"ROC-AUC Score: {roc_auc_score(y_test, y_proba):.4f}")

关键评估指标说明

数据不平衡时,准确率完全没有参考价值(模型全预测0就能拿到90%+准确率),必须关注以下指标:

  • Precision/Recall/F1-Score:重点看少数类(Delta=1)的数值,反映模型对少数类的预测能力
  • ROC-AUC:衡量模型区分正负类的能力,不受类别不平衡影响
  • 混淆矩阵:直观查看正负类的预测错误情况

额外优化技巧(可选)

如果模型效果仍不理想,可以尝试:

  • 过采样少数类:用SMOTE算法生成少数类的合成样本,平衡数据分布
  • 欠采样多数类:随机剔除部分多数类样本,降低类别失衡程度
  • 特征衍生:构造sentiment的平方、绝对值等特征,捕捉潜在的非线性关系

内容的提问来源于stack exchange,提问作者McArthur Nik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:30:58