使用支持向量机和朴素贝叶斯对文本分类

一、支持向量机文本分类

1.1 支持向量机分类器(SVC)

支持向量机分类器(Support Vector Classifier),缩写为SVC。SVC 是 sklearn.svm 模块的一部分,提供了对支持向量机(SVM)算法的实现。SVM 是一种监督学习模型,用于分类和回归任务。SVC 是 SVM 用于分类的实现。

1.2 SVC的用法及参数

通过以下方式创建 SVC 对象并进行训练:

from sklearn.svm import SVC

# 创建一个线性核SVC
clf = SVC(kernel='linear', C=1.0, probability=True)

# 训练模型
clf.fit(X_train, y_train)

# 预测
predictions = clf.predict(X_test)

主要参数

  • kernel:
  • 核函数的类型,默认为 ‘rbf’(径向基函数)。
    可选值包括 ‘linear’、‘poly’、‘rbf’、‘sigmoid’ 以及可自定义的核函数。
    ‘linear’ 表示线性核,‘poly’ 表示多项式核,‘rbf’ 表示径向基核,‘sigmoid’ 表示 sigmoid 核。
    根据问题的特性选择合适的核函数。线性核适合高维数据,非线性核适合复杂的决策边界。
  • C:
  • 正则化参数,默认为 1.0。
    C 越大,意味着越希望模型在训练集上有更少的错误(可能导致过拟合)。
    C 越小,意味着越希望模型更简单(可能导致欠拟合)。
  • degree:
    多项式核函数的多项式次数,仅在 kernel=‘poly’ 时有效,默认为 3。
    如果使用多项式核,可以调整 degree 以控制多项式的复杂度。
  • gamma:
    核函数系数,用于 ‘rbf’、‘poly’ 和 ‘sigmoid’ 三种核函数。
    ‘scale’(默认):1 / (n_features * X.var())。
    ‘auto’:1 / n_features。
    值越大,表示决策边界越不平滑(可能导致过拟合)。
  • probability:
    是否启用概率估计,默认为 False。
    启用后可以使用 predict_proba 和 predict_log_proba 方法。
  • shrinking:
    是否启用收缩启发式算法,默认为 True。
    收缩启发式可以加速计算,但在某些情况下可能会减慢计算速度。
  • decision_function_shape:
    多分类的决策函数形状,默认为 ‘ovr’(一对多)。
    ‘ovo’ 表示一对一策略。可以选择最适合多分类任务的方法。
  • random_state:
    随机种子,用于生成随机数,默认为 None。
    如果设置了 random_state,则每次运行都会得到相同的结果,这对于可重复性很重要。
    主要方法
  • fit:
    用于训练模型,接收训练数据 X 和目标标签 y。
  • predict:
    用于进行预测,接收测试数据 X。
  • predict_proba:
    用于预测样本属于每个类别的概率(需要启用 probability 参数)。
  • score:
    返回模型在给定数据上的准确率。

1.3 SVC分类器应用

首先对文本进行预处理、分词及向量化(可参考博文:LDA主题模型及Python实现3.1节文本预处理和3.2的文本向量化),然后划分数据集和测试集:

X_train, X_test, y_train, y_test = train_test_split(tf,              # 包含文本数据的数组或列表,即特征集、向量化的文本
                                                    labels,           # 对应于texts的标签数组或列表,即我们要预测的目标变量
                                                    test_size=0.2,    # 确定测试集的比例。这里设置为0.2意味着20%的数据将被用作测试集,而剩余的80%将用作训练集。
                                                    random_state=42)  # 是随机数生成器的种子值。
                                                                      # 使用相同的数据集和相同的random_state,我们每次运行这段代码时,都会得到完全相同的分割结果。

创建SVM分类器:

# 创建SVM分类器
svm_model = SVC(kernel='linear', decision_function_shape='ovr')
svm_model.fit(X_train, y_train)

# 在测试集上应用模型
predictions = svm_model.predict(X_test)

# 查看预测结果
df['predictions'] = svm_model.predict(tf)
print(df[['content', 'type', 'predictions']].head())

二、朴素贝叶斯文本分类

2.1 朴素贝叶斯分类器

MultinomialNB 是 scikit-learn 中的一个朴素贝叶斯分类器,用于处理离散特征的分类任务。它基于多项式分布,对于词频等离散计数特征特别有效,因此常用于文本分类等问题。

2.2 MultinomialNB的用法及参数

通过以下方式创建 MultinomialNB 对象并进行训练:

from sklearn.naive_bayes import MultinomialNB

# 创建MultinomialNB分类器
clf = MultinomialNB(alpha=1.0, fit_prior=True)

# 训练模型
clf.fit(X_train, y_train)

# 预测
predictions = clf.predict(X_test)

主要参数

  • alpha:
    平滑参数,默认为 1.0。
    alpha 是拉普拉斯平滑(Laplace Smoothing)或勒贝格平滑(Lidstone Smoothing)参数,用于防止概率为零的情况。
    较高的 alpha 值会降低模型的过拟合风险,适用于小数据集。
    平滑参数有助于避免零概率的问题,即在训练集中未出现的词在测试集上出现时,不会导致分类器无法处理。
  • fit_prior:
    指定是否考虑先验概率,默认为 True。
    如果为 True,模型会根据数据估计类别的先验概率。
    如果为 False,模型会假设所有类别的先验概率相等,对于一些实际问题(如某个类别特别少),可以考虑设置 fit_prior=False。
  • class_prior:
    指定每个类别的先验概率,默认情况下为 None,没有显式设置类别的先验概率,由模型自动估计。
    如果设置了 class_prior,则会覆盖 fit_prior 的设置。
  • force_alpha:
    强制使用指定的 alpha 参数。
    默认情况下为 ‘warn’,即显示警告而不强制。如果为 True,则强制使用 alpha 参数。

1.3 MultinomialNB分类器应用

同样,首先对文本数据进行预处理和数据集划分,然后创建朴素贝叶斯分类器:

# 创建朴素贝叶斯分类器
nb_model = MultinomialNB()
nb_model.fit(X_train, y_train)

# 在测试集上应用模型
predictions = nb_model.predict(X_test)

# 查看预测结果
df['predictions'] = nb_model.predict(tf)
print(df[['content', 'type', 'predictions']].head())

三、两种分类算法的差别

  1. 原理和方法
  • SVM:
    SVM 是一种最大化分类边界的监督学习模型。
    它通过寻找一个最优超平面来分隔不同的类别,并尝试最大化类别之间的间隔。
    对于文本数据,通常使用线性核,因为文本数据通常是高维稀疏数据。
  • Naive Bayes:
    Naive Bayes 是一种基于贝叶斯定理的概率模型。
    它假设特征是相互独立的。
    对于文本数据,常用的多项式朴素贝叶斯(MultinomialNB)适合处理词频或TF-IDF特征。
  1. 性能
  • 准确性:
    SVM:通常在大型、高维数据上表现较好。由于其复杂的优化算法,它往往比朴素贝叶斯准确。
    Naive Bayes:由于特征独立的假设,它在某些情况下可能不准确,但在小数据集或简单问题上表现良好。
  • 训练速度:
    SVM:训练过程可能比较慢,尤其是数据量大时。然而,核函数可以通过非线性映射提升性能。
    Naive Bayes:非常快速,适合大型数据集。
  • 预测速度:
    SVM:预测速度中等,尤其在复杂模型(如使用非线性核)中。
    Naive Bayes:非常快,因为它只需要简单的概率计算。
  1. 应用场景
  • SVM:
    适用于数据维数高且类别数量较多的场景。
    对异常值敏感,适合处理干净的数据。
  • Naive Bayes:
    适用于特征独立且类别分布明显的场景。
    对数据噪音不敏感,适合处理有噪音的数据。
  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值