网易首页 > 网易号 > 正文 申请入驻

朴素贝叶斯处理混合数据类型,基于投票与堆叠集成的系统化方法

0
分享至

本文深入探讨朴素贝叶斯算法的数学理论基础,并重点分析其在处理混合数据类型中的应用。通过投票集成和堆叠集成方法,构建了一个能够有效处理包含二元、类别、多项式和高斯分布特征的综合分类框架。实验基于电信客户流失数据集,验证了该方法在多样化数据环境中的有效性。

朴素贝叶斯算法作为经典的生成式机器学习算法,在分类任务中具有重要地位。现实世界的数据集往往包含多种数据类型,如何有效整合这些异构特征进行准确分类是一个重要的研究课题。本文提出基于集成学习的解决方案,通过投票机制和堆叠方法处理混合数据类型,为实际应用提供理论指导和技术实现。

朴素贝叶斯算法的理论基础

算法概述

朴素贝叶斯是一种基于贝叶斯定理的生成式学习算法,专门用于解决分类问题。该算法的核心在于朴素贝叶斯假设,即条件独立性假设:给定类别标签的情况下,所有输入特征相互独立。

以动物分类任务为例,假设我们需要分类的动物集合为 {大象, 狗, 猫},输入特征包括 weight 和 height。朴素贝叶斯假设认为,在预测动物类别时,体重特征和身高特征是条件独立的。具体而言,当模型计算某动物因体重为10磅而被分类为猫的条件概率 P(weight = 10 pounds |

虽然该假设在现实中往往不成立,但它显著简化了计算复杂度,使得算法在数据稀疏的情况下仍能保持良好性能。这与需要估计协方差矩阵的二次判别分析(QDA)等算法形成鲜明对比。

数学理论框架

目标函数定义

朴素贝叶斯的核心目标是寻找具有最大后验概率的类别标签。给定输入向量 x 和候选类别集合,算法寻求最优分类决策:

贝叶斯定理的应用

为计算后验概率 P(y|x),朴素贝叶斯运用贝叶斯定理,将其分解为先验概率和似然函数的乘积:

其中,分母 P(x) 表示特征的边际概率。在二元分类场景中,该概率可表示为:

由于 P(x) 对所有候选类别而言都是常数,因此在最终的分类决策中可以忽略,这进一步简化了计算过程。

条件独立性假设的数学意义

朴素贝叶斯假设的核心价值在于显著降低计算复杂度。在没有独立性假设的情况下,条件概率 P(x|y) 需要通过乘法法则展开:

其中 n 表示输入特征的维数。

这种展开方式带来的计算复杂度是指数级的。以二元分类为例,所需计算的依赖关系数量随特征数量呈指数增长:当 n=10 时,需要计算约 2,046 个依赖关系;当 n=20 时,这个数字达到约 200 万;当 n=30 时,则超过 20 亿。

朴素贝叶斯假设通过消除特征间的条件依赖关系,将复杂的多元条件概率简化为一元条件概率的乘积:

因此,最终的目标函数可以表示为:

参数估计方法

最大似然估计

朴素贝叶斯分类器采用最大似然估计(MLE)方法确定最优参数。MLE 的目标是寻找能够最大化似然函数的参数集合 Θ。

为提高数值计算的稳定性,通常对似然函数取对数,将乘积运算转换为求和运算:

其中 Θ 表示完整的参数集合,L(Θ) 表示似然函数。

预测决策规则

在学习得到最优参数 Θ* 后,模型通过寻找最大化后验概率的类别标签进行预测:

这里需要注意几个重要的符号变化:

  • ŷ(x;Θ) 表示预测函数,它以新的输入向量 x 和学习得到的参数 Θ为输入
  • P(y|x,Θ) 表示给定输入 x 和学习参数 Θ时类别 y 的后验概率
  • P(y|Θ*) 表示基于学习参数的类别先验概率估计
  • P(xⱼ|y,Θ*) 表示给定类别 y 时特征 xⱼ 的条件概率估计

混合数据类型处理方法

现实世界的数据集通常包含多种数据类型,包括二元特征、类别特征、连续数值特征等。不同类型的特征具有不同的概率分布特性,需要采用相应的朴素贝叶斯变体进行处理。

本文采用来自 UC Irvine 机器学习存储库的伊朗客户流失数据集进行验证。该数据集包含 3,500 个样本和 14 个特征,是一个典型的二元分类任务(流失预测)。

数据集特征分布如下:

朴素贝叶斯算法假设条件概率 P(x|y) 遵循特定的预定义分布:

如果假设的分布不能准确反映真实的数据分布,则估计的概率将出现偏差。因此,本文采用以下系统性方法:

  1. 基于条件数据分布特性对输入特征进行分类
  2. 针对不同特征类型准备相应的数据预处理流程
  3. 构建多个专门化的朴素贝叶斯分类器
  4. 采用集成学习方法整合多个分类器
  5. 对最终结果进行综合评估

特征分类分析

分布分析方法

本文通过生成分位数-分位数(QQ)图来分析各特征在不同类别条件下的分布特性。QQ 图将实际数据分布与理论正态分布进行比较,帮助识别最适合的概率分布模型。

分析结果将特征分为四个主要类别:

二元特征

识别出的二元特征包括:complains、tariff_plan、status

这些特征表现出明显的二元分布特性,适合使用伯努利朴素贝叶斯(BernoulliNB)处理。

类别特征

识别出的类别特征:age_group

该特征具有有序类别的特性,适合使用类别朴素贝叶斯(CategoricalNB)处理。

多项式特征

识别出的多项式特征包括:age、charge_amount

这些特征呈现离散计数分布特性,适合使用多项式朴素贝叶斯(MultinomialNB)处理。

高斯特征

识别出的高斯特征包括:call_failure、subscription_length、seconds_of_use、frequency_of_use、frequency_of_sms、distinct_called_numbers、customer_value

这些特征近似服从正态分布,适合使用高斯朴素贝叶斯(GaussianNB)处理。

实验实现

数据预处理

数据加载与分割

import os
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from collections import Counter
from imblearn.over_sampling import SMOTE
# 数据集加载
current_dir = os.getcwd()
parent_dir = os.path.dirname(current_dir)
csv_file_path = f'{parent_dir}/_datasets/{file_name}'
df = pd.read_csv(csv_file_path)
# 特征与目标变量分离
target_col = 'churn'
X = df.drop(target_col, axis=1)
y = df[target_col]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 使用SMOTE处理类别不平衡问题
minority_class = y_train.value_counts().idxmin()
minority_df = y_train[y_train == minority_class]
majority_class = y_train.value_counts().idxmax()
majority_df = y_train[y_train == majority_class]
smote_target = min(len(minority_df) * 3, len(majority_df))
sampling_strategies = {
majority_class: max(len(majority_df), smote_target),
minority_class: smote_target
}
smote_train = SMOTE(sampling_strategy=sampling_strategies, random_state=42)
X_train, y_train = smote_train.fit_resample(X_train, y_train)
print(Counter(y_train))

处理结果显示:SMOTE前类别分布为 Counter({0: 2135, 1: 385}),SMOTE后为 Counter({0: 2135, 1: 1155}),有效改善了类别不平衡问题。

专门化分类器构建

针对不同数据类型构建相应的处理流水线:

from sklearn.naive_bayes import MultinomialNB, BernoulliNB, GaussianNB, CategoricalNB
from sklearn.preprocessing import MinMaxScaler, OneHotEncoder, OrdinalEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
# 二元特征处理流水线
binary_features = ['complains', 'tariff_plan', 'status']
bnb = Pipeline([
('preprocessor', ColumnTransformer([
('passthrough', 'passthrough', binary_features)], remainder='drop')
),
('classifier', BernoulliNB())
])
# 类别特征处理流水线
categorical_features = ['age_group',]
catnb = Pipeline([
('preprocessor', ColumnTransformer([
('ordinal_encoder',
OrdinalEncoder(handle_unknown='use_encoded_value', unknown_value=-1),
categorical_features)],
remainder='drop')
),
('classifier', CategoricalNB())
])
# 多项式特征处理流水线
multinomial_features = ['age', 'charge_amount']
mnb = Pipeline([
('preprocessor', ColumnTransformer([
('onehot', OneHotEncoder(handle_unknown='ignore'),
multinomial_features)],
remainder='drop')
),
('classifier', MultinomialNB())
])
# 高斯特征处理流水线
continuous_features = [
'call_failure',
'subscription_length',
'seconds_of_use',
'frequency_of_use',
'frequency_of_sms',
'distinct_called_numbers',
'customer_value'
]
gnb = Pipeline([
('preprocessor', ColumnTransformer([
('scaler', MinMaxScaler(), continuous_features)], remainder='drop')
),
('classifier', GaussianNB())
])

集成学习实现

投票集成方法

from sklearn.ensemble import VotingClassifier
voting_classifier = VotingClassifier(
estimators=[
('gnb', gnb),
('bnb', bnb),
('mnb', mnb),
('cnb', catnb)
],
voting='soft', # 软投票:基于概率平均
weights=[1, 1, 1, 1] # 等权重设置
).fit(X_train, y_train)

堆叠集成方法

import numpy as np
from sklearn.linear_model import LogisticRegression
X_meta_train = np.hstack(
(prob_train_bnb, prob_train_catnb, prob_train_mnb, prob_train_gnb)
)
meta_learner = LogisticRegression( # 逻辑回归作为元学习器
random_state=42,
solver='liblinear',
multi_class='auto'
).fit(X_meta_train, y_train) # 基于组合特征训练元模型

模型预测与评估

y_pred_voting = voting_classifier.predict(X_test)
X_meta_test = np.hstack((prob_test_bnb, prob_test_catnb, prob_test_mnb, prob_test_gnb))
y_pred_stacking = meta_learner.predict(X_meta_test)

实验结果与分析

集成模型性能

堆叠集成模型在测试集上达到了 81.6% 的准确率和 53.6% 的 F1 分数。该结果表明模型在多数类预测方面表现良好,但在少数类(类别1)的精确率方面仍有改进空间。

具体性能指标如下:

  • 训练集准确率:0.8103
  • 测试集准确率:0.8159
  • 训练集F1分数:0.7239
  • 测试集F1分数:0.5360

上图展示了ROC曲线和精确率-召回率曲线的比较结果,其中天蓝色线表示堆叠方法,深蓝色线表示投票方法。

单一模型性能对比

各个朴素贝叶斯变体的性能表现存在显著差异:

  • BernoulliNB(仅处理二元特征)表现最优,准确率达到 0.875
  • CategoricalNBMultinomialNB的准确率均为 0.825,性能相当
  • GaussianNB(仅处理连续特征)表现不佳,准确率仅为 0.614

这一结果表明,对于当前数据集而言,二元特征蕴含了最具判别性的信息。GaussianNB 性能不佳的原因可能包括:数据集中的噪声影响、特征分布偏离高斯假设,以及多种数据类型混合带来的复杂性。

总结

本文提出了一种系统性的方法,通过专门化流水线和集成学习技术,有效解决了朴素贝叶斯算法在处理混合数据类型时面临的挑战。该方法的主要贡献包括:

  1. 建立了基于数据分布特性的特征分类框架
  2. 构建了针对不同数据类型的专门化处理流水线
  3. 验证了集成学习在提升混合数据分类性能方面的有效性

虽然本文提出的方法具有一定的有效性,但仍存在以下局限性:

  1. 特征分类过程需要领域专家的参与,自动化程度有限
  2. 集成方法增加了模型的复杂性和计算开销
  3. 在极度不平衡的数据集上,性能提升仍有限

除投票法和堆叠法外,处理混合数据类型还可以考虑以下方法:

特征工程方法:这仍然是数据科学的基础技术。通过领域专业知识,可以将原始特征转换为更加统一且信息丰富的表示形式,使单一模型能够更好地处理多样化的输入。

深度学习架构:多模态神经网络为处理异构数据提供了新的解决方案。这类网络通过设计独立的输入层来同时处理各种数据类型,能够自动学习不同模态之间的复杂关系。

基于树的集成方法:梯度提升机(GBM)、随机森林等算法天然具备处理混合数据类型的能力,无需进行独热编码或数值缩放等显式预处理步骤。对于高度复杂的数据集,图神经网络(GNN)也展现出了巨大的潜力。

每种方法都有其独特的优势和适用场景。最佳选择通常取决于具体的数据集特征、可用的计算资源以及预期的性能目标。随着机器学习技术的不断发展,混合数据类型的处理方法将更加多样化和智能化。

https://avoid.overfit.cn/post/13c6dffdab224bf9a631730f465c9c1e

作者:Kuriko IWAI

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
哈登!骨折?骑士接下来怎么办?

哈登!骨折?骑士接下来怎么办?

篮球盛世
2026-02-26 10:40:39
想当中央委员有多难?

想当中央委员有多难?

特例的猫
2026-02-26 17:40:03
第一联赛实至名归!本赛季英超9队参加欧战,全部晋级16强

第一联赛实至名归!本赛季英超9队参加欧战,全部晋级16强

懂球帝
2026-02-27 06:37:33
新加坡大满贯赛:国乒连丢2冠!国乒女双1:3日本,张本美和进决赛

新加坡大满贯赛:国乒连丢2冠!国乒女双1:3日本,张本美和进决赛

国乒二三事
2026-02-26 18:44:31
外交部:中方支持伊朗政府和人民维护国家稳定和正当权益

外交部:中方支持伊朗政府和人民维护国家稳定和正当权益

环球网资讯
2026-02-26 15:25:31
“谢娜带双胞胎女儿上课”冲上热搜,本人连发68个感叹号发文谴责偷拍行为:恳请不要再将镜头对准未成年孩子

“谢娜带双胞胎女儿上课”冲上热搜,本人连发68个感叹号发文谴责偷拍行为:恳请不要再将镜头对准未成年孩子

观威海
2026-02-26 10:06:03
服务区红包被捡走续:监控视频曝光,舆论反扑失主,强烈要求自证

服务区红包被捡走续:监控视频曝光,舆论反扑失主,强烈要求自证

千言娱乐记
2026-02-26 22:03:00
上海65岁以上老人留意! 多项便民服务可享, 办事生活更省心!

上海65岁以上老人留意! 多项便民服务可享, 办事生活更省心!

荷兰豆爱健康
2026-02-27 01:12:12
8场7球!带队杀入欧冠16强!1亿巨星太硬气,不去豪门,降维打击

8场7球!带队杀入欧冠16强!1亿巨星太硬气,不去豪门,降维打击

阿泰希特
2026-02-26 15:50:47
全国统一执行,3月1日起,公职人员戴上紧箍咒,老百姓迎来大便利

全国统一执行,3月1日起,公职人员戴上紧箍咒,老百姓迎来大便利

墨兰史书
2026-02-25 23:12:05
火箭队里德·谢泼德认为火箭队需要“多投三分”,理由很充分

火箭队里德·谢泼德认为火箭队需要“多投三分”,理由很充分

好火子
2026-02-27 04:53:17
日本永住许可新规:压倒骆驼的最后一根稻草,5年签证成为前置门槛

日本永住许可新规:压倒骆驼的最后一根稻草,5年签证成为前置门槛

东京在线
2026-02-26 22:26:29
终于知道为什么各大车企疯狂降价了,原来不知不觉中,风向大变了

终于知道为什么各大车企疯狂降价了,原来不知不觉中,风向大变了

范瞼舍长
2026-02-27 00:31:21
刚刚!津巴布韦停止向中国出口一切锂矿制品,包括原矿和精炼锂矿

刚刚!津巴布韦停止向中国出口一切锂矿制品,包括原矿和精炼锂矿

别人都叫我阿腈
2026-02-26 18:40:33
我见过最傻的父母,攥着大把的存款和退休金,却等着给子女当遗产

我见过最傻的父母,攥着大把的存款和退休金,却等着给子女当遗产

i书与房
2026-02-25 17:22:34
两极反转!网友被父母的老式旅游折服了!评论区全部是真香现场

两极反转!网友被父母的老式旅游折服了!评论区全部是真香现场

另子维爱读史
2026-02-26 21:36:17
合资开年大降价,今年谁都别想好过?

合资开年大降价,今年谁都别想好过?

汽车公社
2026-02-25 09:11:26
巴拿马强夺港口还禁人!中国反制加码:钱凯港提速,运河不再必需

巴拿马强夺港口还禁人!中国反制加码:钱凯港提速,运河不再必需

娱乐的硬糖吖
2026-02-26 18:44:04
巨额赔偿500万!小米起诉自媒体账号实控人竟是李斌?蔚来回应

巨额赔偿500万!小米起诉自媒体账号实控人竟是李斌?蔚来回应

金石随笔
2026-02-26 08:25:02
比电子布还猛!光纤价格飙涨80%   这7大寡头迎戴维斯双击

比电子布还猛!光纤价格飙涨80% 这7大寡头迎戴维斯双击

元芳说投资
2026-02-26 06:00:08
2026-02-27 06:59:00
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
1932文章数 1456关注度
往期回顾 全部

科技要闻

单季营收681亿净利429亿!英伟达再次炸裂

头条要闻

美国政府对外交官下令:开始行动

头条要闻

美国政府对外交官下令:开始行动

体育要闻

从排球少女到冰壶女神,她在米兰冬奥练出6块腹肌

娱乐要闻

向华强公开表态 财产留给儿媳妇郭碧婷

财经要闻

中国AI调用量超美国 4款大模型霸榜前5

汽车要闻

40岁的吉利,不惑于内外

态度原创

本地
游戏
时尚
公开课
军事航空

本地新闻

津南好·四时总相宜

原神牛逼和鸣潮牛逼,感觉都不如我们!?逼逼?!"/> 主站 商城 论坛 自运营 登录 注册 原神牛逼和鸣潮牛逼,感觉都不如我们!?逼逼?! 泥头车 20...

今年春天最美搭配:西装+半裙,怎么穿都好看!

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

美政府给新伊核协议设限内容遭披露

无障碍浏览 进入关怀版