NLP(五):支持向量机SVM原理及文本分类的sklearn实现

目录

1.SVM原理

2.sklearn库SVM算法的参数介绍

2.1算法库概述

2.2sklearn内置的SVM核函数

2.3SVM分类算法库参数小结

3.基于的SVM分类器的文本分类的sklearn实现


基于朴素贝叶斯的文本分类实现参见我的博客:

NLP学习计划(四):朴素贝叶斯原理及文本分类的sklearn实现https://blog.csdn.net/weixin_42483560/article/details/89296776


 

1.SVM原理

直接贴上自己的SVM(参考书籍为西瓜书及其他文档)学习笔记:


2.sklearn库SVM算法的参数介绍

2.1算法库概述

scikit-learn中SVM的算法库分为分类的三个类:SVC, NuSVC,和Linear。和回归类的三个类:SVR, NuSVR,和LinearSVR 。相关的函数类都包裹在sklearn.svm模块之中。

SVC和 NuSVC差不多,区别仅仅在于对损失的度量方式不同,而LinearSVC从名字就可以看出,他是线性分类,也就是不支持各种低维到高维的核函数,仅仅支持线性核函数,对线性不可分的数据不能使用。

对于SVR, NuSVR,和LinearSVR 3个回归的类,三者特别同上。

如果有经验知道数据是线性可以拟合的,那么使用LinearSVC去分类 或者LinearSVR去回归,它们不需要我们去慢慢的调参去选择各种核函数以及对应参数, 速度也快。如果我们对数据分布没有什么经验,一般使用SVC去分类或者SVR去回归,这就需要我们选择核函数以及对核函数调参了。

而对于NuSVC和NuSVR,如果我们对训练集训练的错误率或者说支持向量的百分比有要求的时候,可以选择NuSVC分类 和 NuSVR 。它们有一个参数来控制这个百分比。

2.2sklearn内置的SVM核函数

在scikit-learn中内置的核函数一共有4种:

1.线性核函数(Linear Kernel)表达式为:K(x,z)=x∙zK(x,z)=x∙z,就是普通的内积。

2.多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为:K(x,z)=(γx∙z+r)dK(x,z)=(γx∙z+r)d ,其中,γ,r,dγ,r,d都需要自己调参定义,比较麻烦。

3.高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是sklearn库和libsvm库默认的核函数。表达式为:K(x,z)=exp(−γ||x−z||2)K(x,z)=exp(−γ||x−z||2), 其中,γ大于0,需要自己调参定义。般情况下,对非线性数据使用默认的高斯核函数会有比较好的效果,

4.Sigmoid核函数(Sigmoid Kernel)也是线性不可分SVM常用的核函数之一,表达式为:K(x,z)=tanh(γx∙z+r)K(x,z)=tanh(γx∙z+r), 其中,γ,rγ,r都需要自己调参定义。

2.3SVM分类算法库参数小结

参考链接:https://www.cnblogs.com/pinard/p/6117515.html


3.基于的SVM分类器的文本分类的sklearn实现

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report
from sklearn.model_selection import *

# 导入数据
train_data= pd.read_csv('F:\PY-Learning\CNEWS\cnews\cnews.train.txt', names=['title', 'content'], sep='\t', engine='python', encoding='UTF-8') # (50000, 2)
test_data = pd.read_csv('F:\PY-Learning\CNEWS\cnews\cnews.test.txt', names=['title', 'content'], sep='\t',engine='python',encoding='UTF-8') # (10000, 2)
val_data = pd.read_csv('F:\PY-Learning\CNEWS\cnews\cnews.val.txt', names=['title', 'content'], sep='\t',engine='python',encoding='UTF-8') # (5000, 2)

x_train = train_data['content']
x_test = test_data['content']
x_val = val_data['content']

y_train  = train_data['title']
y_test = test_data['title']
y_val  = val_data['title']
# print(y_val)
###################################################
#############处理样本#################################

## 默认不去停用词的向量化
count_vec = CountVectorizer()
x_count_train = count_vec.fit_transform(x_train )
x_count_test = count_vec.transform(x_test )

## 去除停用词
count_stop_vec = CountVectorizer(analyzer='word', stop_words='english')
x_count_stop_train = count_stop_vec.fit_transform(x_train)
x_count_stop_test = count_stop_vec.transform(x_test)

## 模型训练
mnb_count = SVC()
mnb_count.fit(x_count_train, y_train)
mnb_count_y_predict = mnb_count.predict(x_count_test)
mnb_count.score(x_count_test, y_test)

## TF−IDF处理后在训练
## 默认配置不去除停用词
tfid_vec = TfidfVectorizer()
x_tfid_train = tfid_vec.fit_transform(x_train)
x_tfid_test = tfid_vec.transform(x_test)

## 模型训练
mnb_tfid = SVC()
mnb_tfid.fit(x_tfid_train, y_train)
mnb_tfid_y_predict = mnb_tfid.predict(x_tfid_test)
mnb_tfid.score(x_tfid_test, y_test)

 

 

 

 

 

  • 3
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
新闻文本分类是自然语言处理(NLP)中的一个重要应用场景,它可以将大量的新闻文本按照不同的主题分类,为用户提供更加精准的信息检索服务。在这里,我们将介绍如何使用Python来进行新闻文本分类。 1. 数据收集 首先,我们需要获取新闻文本数据集。可以从互联网上爬取新闻网站的文章,或者从已有的数据集中获取。一个常用的新闻文本数据集是Reuters-21578,包含21578条新闻文本,按照46个不同的主题分类。可以从网站上下载:https://archive.ics.uci.edu/ml/datasets/reuters-21578+text+categorization+collection 2. 数据预处理 在获取数据集后,我们需要对其进行预处理。这包括去除HTML标签、数字、标点符号和停用词等不必要的信息,以及进行词干提取(stemming)和词形还原(lemmatization)等文本预处理操作。可以使用Python中的NLTK包或SpaCy包来完成这些操作。 3. 特征提取 在预处理完成后,我们需要将文本数据转换成数值型特征向量,以便于机器学习算法进行处理。常用的特征提取方法包括词袋模型(bag of words)、TF-IDF、词嵌入(word embedding)等。可以使用Python中的sklearn包或gensim包来完成这些操作。 4. 模型选择和训练 在特征提取完成后,我们需要选择合适的机器学习算法来进行分类。常用的算法包括朴素贝叶斯(Naive Bayes)、支持向量机SVM)、决策树(Decision Tree)等。可以使用Python中的sklearn包来构建分类器,并使用训练数据集对其进行训练。 5. 模型评估 在模型训练完成后,我们需要使用测试数据集对其进行评估。可以使用Python中的sklearn包中的评估函数,如accuracy_score、precision_score、recall_score、f1_score等来评估分类器的性能。 6. 模型应用 最后,我们可以使用训练好的分类器对新的文本数据进行分类,以实现新闻文本分类的功能。 以上就是使用Python进行新闻文本分类的基本流程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值