Python文本分类【NB、LR、SVM、CNN、RNN、TF-IDF、Word2Vec、FastText】

文本分类的python实现-基于Xgboost算法 描述 训练集为评论文本,标签为 pos,neu,neg三种分类,train.csv的第一列为文本content,第二列为label。 python的xgboost包安装方法,网上有很多详细的介绍 参数XGBoost的作者把所有的参数分成了三类:1、通用参数:宏观函数控制。2、Booster参数:控制每一步的booster。3、学习目标参数:控制训练目标的表现。 阅读详情

评估结果

模型时间空间精度
贝叶斯1高0.83
逻辑回归100高0.85
决策树27高0.76
随机森林16高0.78
--------------------------------------------------------------------------------
贝叶斯+TfIdf1高0.83
逻辑回归+TfIdf13高0.85
决策树+TfIdf30高0.76
随机森林+TfIdf16高0.80
--------------------------------------------------------------------------------
贝叶斯+FastText1低0.77
逻辑回归+FastText21低0.82
决策树+FastText6低0.71
随机森林+FastText23低0.80
SVM+FastText22低0.83
--------------------------------------------------------------------------------
贝叶斯+Word2Vec1低0.78
逻辑回归+Word2Vec20低0.82
决策树+Word2Vec6低0.75
随机森林+Word2Vec23低0.81
SVM+Word2Vec23低0.82
--------------------------------------------------------------------------------
贝叶斯+Word2Vec+TfIdf1低0.78
逻辑回归+Word2Vec+TfIdf60低0.83
决策树+Word2Vec+TfIdf7低0.75
随机森林+Word2Vec+TfIdf23低0.82
SVM+Word2Vec+TfIdf51低0.85
--------------------------------------------------------------------------------
CNN317(5 epoch)中0.83
GRU976(6 epoch)中0.78
--------------------------------------------------------------------------------
CNN+FastText181(4 epoch)中0.81
GRU+FastText1218(8 epoch)中0.84
CNN+Word2Vec134(3 epoch)中0.81
GRU+Word2Vec1159(8 epoch)中0.84
CNN+Word2Vec+TfIdf188(4 epoch)中0.80
GRU+Word2Vec+TfIdf1696(9 epoch)中0.82

1、贝叶斯

from a_Data_preprocessing import load_xy, vocabs
from numpy import zeros
from b_metrics import metric, Timer
from sklearn.naive_bayes import MultinomialNB

"""数据加载、预处理"""
X_train, X_test, y_train, y_test = load_xy(1)

def ls_of_w2id(ls_of_wids):
    length = len(ls_of_wids)
    ls_of_wid = zeros((length, vocabs))
    for i in range(length):
        for wid in ls_of_wids[i]:
            ls_of_wid[i, wid - 1] += 1
    return ls_of_wid  # 句向量

X_train = ls_of_w2id(X_train)
X_test = ls_of_w2id(X_test)

"""建模"""
t = Timer()  # 计时器
clf = MultinomialNB()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

"""预测结果"""
metric(y_test, y_pred)

2、贝叶斯+TF-IDF

from a_Data_preprocessing import load_xy, vocabs
from gensim.corpora import Dictionary
from gensim.models import TfidfModel
from numpy import zeros
from sklearn.naive_bayes import MultinomialNB
from b_metrics import metric, Timer

"""数据加载、预处理"""
X_train, X_test, y_train, y_test = load_xy()
dt = Dictionary(X_train)
X_train = [dt.doc2bow(x) for x in X_train]
X_test = [dt.doc2bow(x) for x in X_test]

tfidf = TfidfModel(X_train).idfs  # 字典:ID→TF-IDF向量

def ls_of_w2id(ls_of_wid):
    length = len(ls_of_wid)
    ls_of_idf = zeros((length, vocabs), dtype='float')
    for i in range(length):
        for (wid, cnt) in ls_of_wid[i]:
            ls_of_idf[i, wid] += cnt * tfidf[wid]
    return ls_of_idf  # TF-IDF句向量

X_train = ls_of_w2id(X_train)
X_test = ls_of_w2id(X_test)

"""建模"""
t = Timer()  # 计时器
clf = MultinomialNB()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

"""预测结果"""
metric(y_test, y_pred)

3、逻辑回归+词向量(FastText)

X = [[str(y)] + x for x, y in zip(X_train, y_train)]
model = FastText(X, size=size, window=window)
w2i = {w: i for i, w in enumerate(model.wv.index2word)}
vectors = model.wv.vectors
w2v = lambda w: vectors[w2i[w]]
X_train_v = [[w2v(w) for w in x] for x in X_train]
X_test_v = [[w2v(w) for w in x if w in w2i] for x in X_test]
with open(PATH_XY_VEC, 'wb') as f:
    pickle.dump((X_train_v, X_test_v, y_train, y_test), f)
from a_Data_preprocessing import load_xy
from numpy import mean
from sklearn.linear_model import LogisticRegression
from b_metrics import metric, Timer

"""数据加载、预处理"""
X_train, X_test, y_train, y_test = load_xy(2)
X_train = [mean(x, axis=0) for x in X_train]
X_test = [mean(x, axis=0) for x in X_test]

"""建模"""
t = Timer()  # 计时器
clf = LogisticRegression()
clf.fit(X_train, y_train)

"""预测结果"""
y_pred = clf.predict(X_test)
metric(y_test, y_pred)

4、神经网络(CNN或RNN)

from tensorflow.python.keras.preprocessing.sequence import pad_sequences
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Embedding, Dense
from tensorflow.python.keras.callbacks import EarlyStopping
from tensorflow.python.keras.utils import to_categorical
from numpy import argmax
from a_Data_preprocessing import load_xy, vocabs
from b_metrics import metric, Timer

"""配置"""
maxlen = 200  # 序列长度
input_dim = vocabs + 1
output_dim = 100  # 词向量维度
batch_size = 256
epochs = 99
verbose = 2
patience = 1  # 没有进步的训练轮数
callbacks = [EarlyStopping('val_acc', patience=patience)]
validation_split = .05

"""数据读取与处理"""
X_train, X_test, y_train, y_test = load_xy(1)
X_train = pad_sequences(X_train, maxlen)
X_test = pad_sequences(X_test, maxlen)
y_train = to_categorical(y_train, 9)
y_test = to_categorical(y_test, 9)

"""建模"""
from tensorflow.python.keras.layers import Conv1D, MaxPool1D, GlobalMaxPool1D
filters = 50  # 卷积滤波器数量
kernel_size = 10  # 卷积层滤波器大小
model = Sequential(name='CNN')
model.add(Embedding(input_dim, output_dim, input_length=maxlen, input_shape=(maxlen,)))
model.add(Conv1D(filters, kernel_size * 2, padding='same', activation='relu'))
model.add(MaxPool1D(pool_size=2))  # strides默认等于pool_size
model.add(Conv1D(filters * 2, kernel_size, padding='same', activation='relu'))
model.add(GlobalMaxPool1D())  # 对于时序数据的全局最大池化
model.add(Dense(9, activation='softmax'))
# from tensorflow.python.keras.layers import LSTM
# units = 100  # RNN神经元数量
# model = Sequential(name='RNN')
# model.add(Embedding(input_dim, output_dim, input_length=maxlen, input_shape=(maxlen,)))
# model.add(LSTM(units))  # 返回序列最尾结果
# model.add(Dense(9, activation='softmax'))
model.summary()

"""编译、训练"""
timer = Timer()
model.compile('adam', 'categorical_crossentropy', ['acc'])
model.fit(X_train, y_train, batch_size, epochs, verbose, callbacks, validation_split)

"""结果打印"""
y_pred = model.predict(X_test)
metric(argmax(y_test, axis=1), argmax(y_pred, axis=1))

5、神经网络+词向量(FastText)

from tensorflow.python.keras.preprocessing.sequence import pad_sequences
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
from tensorflow.python.keras.callbacks import EarlyStopping
from tensorflow.python.keras.utils import to_categorical
from numpy import argmax
from a_Data_preprocessing import load_xy, size
from b_metrics import metric, Timer

"""配置"""
maxlen = 200  # 序列长度
output_dim = size  # 词向量维度
batch_size = 512
epochs = 99
verbose = 2
patience = 1  # 没有进步的训练轮数
callbacks = [EarlyStopping('val_acc', patience=patience)]
validation_split = .05

"""数据读取与处理"""
X_train, X_test, y_train, y_test = load_xy(2)
X_train = pad_sequences(X_train, maxlen, dtype='float')
X_test = pad_sequences(X_test, maxlen, dtype='float')
y_train = to_categorical(y_train, 9)
y_test = to_categorical(y_test, 9)

"""建模"""
from tensorflow.python.keras.layers import Conv1D, MaxPool1D, GlobalMaxPool1D
filters = 50  # 卷积滤波器数量
kernel_size = 10  # 卷积层滤波器大小
model = Sequential(name='CNN')
model.add(Conv1D(filters, kernel_size * 2, padding='same', activation='relu', input_shape=(maxlen, size)))
model.add(MaxPool1D(pool_size=2))  # strides默认等于pool_size
model.add(Conv1D(filters * 2, kernel_size, padding='same', activation='relu'))
model.add(GlobalMaxPool1D())  # 对于时序数据的全局最大池化
model.add(Dense(9, activation='softmax'))
# from tensorflow.python.keras.layers import GRU
# units = 100
# model = Sequential(name='CNN')
# model.add(GRU(units, input_shape=(maxlen, size)))
# model.add(Dense(9, activation='softmax'))
model.summary()

"""编译、训练"""
timer = Timer()
model.compile('adam', 'categorical_crossentropy', ['acc'])
model.fit(X_train, y_train, batch_size, epochs, verbose, callbacks, validation_split)

"""结果"""
y_pred = model.predict(X_test)
metric(argmax(y_test, axis=1), argmax(y_pred, axis=1))

附录

模型评估模块

from time import time
from sklearn.metrics import classification_report, confusion_matrix
from a_Data_preprocessing import id2label
from seaborn import heatmap
from matplotlib import pyplot
from pandas import DataFrame

class Timer:
    def __init__(self):
        self.t = time()

    def __del__(self):
        print('\033[033m%.2f分钟\033[0m' % ((time() - self.t) / 60))

def metric(y_test, y_pred):
    i2l = id2label()
    y_test = [i2l[i] for i in y_test]
    y_pred = [i2l[i] for i in y_pred]
    report = classification_report(y_test, y_pred)
    print(report)
    labels = [i2l[i] for i in range(9)]
    matrix = confusion_matrix(y_test, y_pred)
    matrix = DataFrame(matrix, labels, labels)
    heatmap(matrix, center=400, fmt='d', annot=True)
    pyplot.show()

其它

首发日期
2019年5月9日
语料地址
https://github.com/AryeYellow/PyProjects/tree/master/tf2/新闻分类
TensorFlow版本
2.0 Preview
Python使用doc2vec和LR进行文本分类 (1)数据预处理 a.对文本数据进行贴标签处理,标签数据类似入下:平素体质:健康状况:良,既往有“高血压病史”多年。#1其中1表示患有高血压,0表示没有患有高血压。 然后进行分开,文本存储在一个文件,标签存储在一个文件,文本内容和标签行对行对应。 b.对文本文件的内容进行分词。import jieba#读取数据生成sentences file=open(u'/home/ubuntu/file/ 阅读详情

相关推荐

python数据分析之利用多种机器学习方法实现文本分类、情感预测_python文本分析

外链图片转存中…(img-SrlDKfRS-1712525505010)]

2401_83704218的博客 929

基于文本分类的机器学习-LR类处理多分类问题

基础知识部分: Logistic 回归是一种常用的处理二分类问题的线性模型。 Softmax回归是logistic 回归问题再多分类上的推广,对于多分类问题,类别标签lable : y可以有C个取值,给定一个样本x,softmax回归预测判断属于类别c的条件概率为: 其中,w 是第c类的权重向量 在tensorflow框架下表示为: ##在Tensorflow图中为训练数据输入x和输出y创建占位符 self.x = placeholder(tf.float32, [None, self.s

weixin_45144934的博客 796

工具推荐 使用python语言实现CNN文本分类模型

作者:禅与计算机程序设计艺术 1.简介 文本分类是自然语言处理的一个重要分支,其目的是将一段文本按照一定规则进行分类。常用的文本分类方法有基于规则的方法、基于统计学习方法(如朴素贝叶斯法)和卷积神经网络(CNN)方法。本文主要介绍使用Python语言实现CNN文本分类模型。

AI天才研究院 841

使用LR和SVM对文本数据进行分类

使用LR和SVM对文本数据进行分类 import numpy as np import pandas as pd training = pd.read_csv("D:/ML/competition/daguan/new_data/train_set.csv") # print(training.head()) # # print(training.shape) # print(training....

devcy的博客 695

【NCBI】SRA toolkit安装及使用-Windows&Linux版本

由于市面上的文章介绍SRA toolkit基本上都是基于Linux,而在windows下运行SRA toolkit基本上可以达到相同的效果且更为方便,故本文将分别阐明在Windows和Linux环境下SRA toolkit的安装及使用。

weixin_48076899的博客 2万+

蒙特卡洛+概率潮流!基于蒙特卡洛和新能源出力模拟的概率潮流分布程序代码!

最后,导出光照强度、风速、网损和节点电压的概率分布图,并计算了各节点电压和网损的平均值和方差,展示了接入前后的节点电压对比图。在不确定性增加的电力系统中,概率潮流成为含随机因素规划问题的求解前提,可以更加真实地反映电力系统的全面信息。此外,概率潮流还可用于研究风电和光伏发电出力以及电动汽车消耗功率和向电力系统反向供电功率的不确定性对电力系统的影响,发现系统运行中的潜在风险,为系统运行控制提供参考。概率潮流的目的是揭示电网中随机变量对系统的影响,发现电网中的薄弱环节,为规划和调度部门的决策提供有价值的信息。

weixin_48747334的博客 1921

NLP逻辑回归模型(LR)实现分类问题实例详解

之前写了一个贝叶斯分类的问题,这次使用LR实现一个分类问题(调库实现),首先就是收集数据,这次使用的是一个某简书大佬的一个小项目的数据集(也可以自己收集一个数据集,进行分类),格式如下: 1 今天早盘带学员以15元左右买入《300223北京君正》明天有望大涨,请关注 勿追买!金股热线:400-6289775现代投资【国富咨询】 0 您尾号7544卡13日14:26网上银行支出(消费)158元。...

任萌新的小生活 2702

deepseek本地部署及应用部署指南

如果你找到的日志是[send] via NET/IB/0,则表示网络通信是通过IB网络的,但是没有开启GDRDMA技术,则会有大致5%的性能损耗(网传,未实测)。新增的环境变量配置,主要用于启用IB网络通信,而非使用以太网进行通信,详细的每一个参数的具体含义,可以在英伟达NCCL的官方网站上找到说明。下一步,我会对已经完成部署的模型进行压测,来探索系统的性能极限在哪里,以及如何在生产环境中何如进行进一步的性能优化,期待你的关注。

weixin_39797121的博客 2625

LR如何在语言理解NLU中实现文本分类

对于Sirius也好,微软小冰也罢,还有度秘、小智、小i等等一些列的问答机器人,已经从方面影响着人类。它们功能强大,既可聊天讲笑话,又可作为业务的客服帮你处理事务,还可知无不言言无不尽的回答各式专业问题,可谓工作小能手。比如像这样:(本来在逗小冰,结果在这午夜,就猝不及防的这麻辣小龙虾刺痛了味蕾.......)还有就像问题解决型机器人,存在的目的是为了帮用户解决具体问题,例如:售前咨询、售后报修、

AI深入浅出 2101

实战:如何通过修改VTS和HTS调整GC4653 sensor帧率(附完整计算步骤)

本文以GC4653图像传感器为例,详细解析了通过修改VTS和HTS寄存器来精确调整输出帧率的完整流程。文章深入剖析了帧率计算公式FPS = PCLK / (VTS × HTS)的核心原理,并提供了从获取寄存器参数、计算目标VTS值到系统验证的实战步骤,帮助工程师掌握独立优化Sensor性能、提升低照度画质的关键技能。

gin88的博客 341

深入解析YT8521S千兆以太网PHY芯片的设计与调试要点

本文深入解析了YT8521S千兆以太网PHY芯片的设计与调试要点。重点剖析了硬件设计中的电源方案、RGMII接口电平配置(尤其是1.8V电平方案)以及PCB布局布线等关键细节,并提供了从硬件检查、驱动配置到性能测试的完整调试流程,帮助工程师规避常见陷阱,实现稳定可靠的千兆网络连接。

weixin_29190573的博客 690

LR详解

对于文本分类这个经典问题,很多传统机器学习的算法都是适用的,比如说逻辑回归(LR)的表现就很优秀。在用LR进行文本分类的时候,最主要的是如何解决特征之间的非线性关系。所谓的非线性关系是指,一个特征和另外特征相关,而且为非线性的关系。举个简单的例子,就是线性关系,而就是非线性关系。对于这个问题的解决主要有以下几个方式:多元特征模型、boosting、nb-norm、去除非线性特征。 照例还是先从原...

Katherine_Cai_7的博客 1484

Qt入门教程100篇(已完结)

Qt5入门教程,Qt6入门教程。包含了: Qt环境搭建篇、Qt数据类型篇、Qt中STL篇、Qt核心篇、Qt核心对象QObject篇、Qt基础控件篇、Qt对话框篇、Qt高级控件篇、Qt数据模型篇、QSS篇、Qt文件篇 、Qt硬件编程、Qt的一些demo、Qt项目开发篇。......

小鱼酱的博客 15万+

文本分类学习笔记(4)- LR模型

LR分类器实现,多分类的softmax模型:#coding=utf-8 from scipy import sparse,io from sklearn.linear_model import LogisticRegression from sklearn.naive_bayes import MultinomialNB from sklearn import metrics from numpy

锦年的博客 1629

【CT/电镜 重建教程 1.1】层析成像的精确实空间迭代重建算法(RESIRE)

在此,我们报告了RESIRE算法的发展用于准确的断层重建。与实空间迭代算法相比,RESIRE使用傅里叶切片定理或Radon变换作为正向投影,使用线性变换作为反向投影,两者都具有高精度。与EST和GENFIRE相比,RESIRE是一种实空间迭代算法,可以在并行计算中实现快速运行时间。

2401_87064292的博客 1062

从底层结构开始学习FPGA(7)----进位链CARRY4

进位链CARRY4在FPGA实现加减法运算时扮演了什么角色?

孤独的单刀 1万+

文本分类与SVM

读取一些技术牛人的博客,得到一些灵感,想写一个笔记,就当这些天的一个总结吧。 1、基础知识 1.1样本整理         文本分类属于有监督的学习,所以需要整理样本。根据业务需求,确定样本标签与数目,其中样本标签多为整数。在svm中其中如果为二分类,样本标签一般会设定为-1和1,而在朴素贝叶斯方法中,一般为0和1,但不是固定的,标签的设置和算法本身的性质有关的。 1.2特征选择    

李耀辉的博客 3505

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

文本分类概述(nlp)

文本分类问题:给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个 文本分类应用:常见的有垃圾邮件识别,情感分析 文本分类方向:主要有二分类,多分类,多标签分类 文本分类方法:传统机器学习方法(贝叶斯,svm等),深度学习方法(fastText,TextCNN等) 本文的思路:本文主要介绍文本分类的处理过程,主要哪些方法。致力让读者明白在处理文本分类问题时应该从什么方向入手,重...

yeal 10万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Bert中文文本多分类与传统BOW+tfidf+LR中文文本多分类对比

最近在重温bert,对bert的中文文本多分类的效果很好奇,并将其与传统的非pre-train模型进行对比,除此之外,由于选用的是12层的base版的bert,还从第0层开始到12层,对每一层的输出进行了校验和测试。想看看每一层的transformer对bert分类效果的影响。此外,还取用了12层的element-wise的平均值进行bert结果的评估,结论以及操作方式如下。 ...

yyshouder的博客 4048

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python实现卷积神经网络的Text-CNN文本分类

Text-CNN是一种基于卷积神经网络的文本分类方法,通过词嵌入层将文本转换为向量表示,使用不同尺寸的卷积核提取局部特征,再通过池化层和全连接层进行分类。该方法能有效捕捉文本中的n-gram特征,支持静态和动态词向量两种模式,并可通过多通道设计提升性能。相比传统方法,Text-CNN在准确率和效率上表现优异,是NLP领域的重要算法之一。

毕业作品网站 2925

组合特征(四)linearsvm-tfidf(word)+lr-tfidf(article)

""" 将linearsvm挑选的tfidf(word)特征和lr挑选的tfidf(article) """ import pickle from scipy import sparse from scipy.sparse import hstack with open('linearsvm-tfidf(word).pkl', 'rb')as f_1: x_train_1, y_tr...

Datawhale 1146

cnn文本分类python实现_简单的CNN文本分类

假设我们一句话有十个词,每个词语都可以用128维来表示,那么一句话就是一个10*128的矩阵图片。建立一个如下图的卷积神经网络:上面对这个图片进行卷积核大小分别为2、3、4的卷积计算形成feature_map 最后通过softmax进行分类代码如下:#coding:utf-8import tensorflow as tfimport numpy as npimport pickleclass Te...

weixin_39890431的博客 909

中文文本分类(基于Pytorch)

我从THUCNews中抽取了20万条新闻标题,文本长度在20到30之间。一共10个类别,每类2万条。搜狗新闻 Word+Character 300d。类别:财经、房产、股票、教育、科技、社会、时政、体育、游戏、娱乐。

sikh_0529的博客 1万+

python实现电商评论文本情感分类-基于textcnn

新学的,还不是很熟悉,研究了小半天才成功😀。字符清理+停用词处理直接复用。

qq_41081716的博客 960

分类算法(三)—— LR NB SVM KNN 调用示例

# -*- encoding=utf-8 -*- from sklearn import svm from sklearn import neighbors, linear_model from sklearn import metrics from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.nai...

1657
上一篇: Python【图解】样本不均衡问题及采样策略
下一篇: 自律
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值