使用多种机器学习模型进行情感分析

news2024/9/22 1:22:52

使用 TF-IDF 与贝叶斯分类器进行情感分析是一个常见且有效的组合,特别是在文本分类任务中。贝叶斯分类器(通常是朴素贝叶斯分类器)等机器学习模型具有计算简单、效率高的优点,且在文本分类任务中表现良好。接下来,我将详细讨论结合 TF-IDF 和贝叶斯分类器等机器学习模型进行情感分析的实现步骤。

一、使用多种机器学习模型进行情感分析

1.数据准备与加载

我们首先准备好训练数据集。这里假设我们仍使用与之前相同的样本数据,不同的是添加了数据标签以便训练:

import pandas as pd

data = {
    'Text': [
        "I am very happy with the service",
        "This is terrible, I hate it",
        "What a wonderful experience!",
        "I am so disappointed",
        "Absolutely fantastic! Highly recommend it",
        "Worst experience ever, very sad",
        "I love this product, it’s amazing",
        "This is the best thing I have ever bought",
        "I regret buying this item, very dissatisfied",
        "The quality is poor, I’m upset",
        "Excellent service and very satisfied",
        "Not worth the money, very bad experience",
        "I’m thrilled with the results, highly recommended",
        "This is not what I expected, I feel cheated",
        "Wonderful product, exceeded my expectations",
        "I am frustrated and unhappy with this purchase",
        "Very pleased with the performance, good value",
        "The experience was awful, never buying again",
        "Great quality and excellent service",
        "This is disappointing, I feel let down"
    ],
    'Label': [
        'positive', 'negative', 'positive', 'negative', 'positive', 'negative',
        'positive', 'positive', 'negative', 'negative', 'positive', 'negative',
        'positive', 'negative', 'positive', 'negative', 'positive', 'negative',
        'positive', 'negative'
    ]
}

df = pd.DataFrame(data)

2.文本预处理与特征提取(TF-IDF)

使用 TfidfVectorizer 提取文本特征,并将数据集划分为训练集和测试集:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split

# 文本转为TF-IDF特征
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(df['Text'])

# 标签
y = df['Label']

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

3.构建多种分类器

我们将使用以下几种常见的分类器:

  • 朴素贝叶斯(Naive Bayes)
  • 逻辑回归(Logistic Regression)
  • 支持向量机(SVM)
  • 随机森林(Random Forest)
from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, accuracy_score

# 初始化模型
models = {
    "Naive Bayes": MultinomialNB(),
    "Logistic Regression": LogisticRegression(),
    "SVM": SVC(),
    "Random Forest": RandomForestClassifier()
}

# 训练和评估模型
for model_name, model in models.items():
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    print(f"Model: {model_name}")
    print("Accuracy:", accuracy_score(y_test, y_pred))
    print("Classification Report:\n", classification_report(y_test, y_pred))
    print("="*50)

4.结果分析

运行上述代码后,我们将得到每个模型的准确率和分类报告(包括精确度、召回率和 F1 分数)。通过对比这些结果,我们可以判断哪个模型在当前情感分析任务中表现最佳。通过增加训练集,模型能够更好地捕捉不同情感之间的模式和差异(因为训练集数量的原因,这里结果并不是很好)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.选择最优模型

根据实际应用场景和具体的评价指标(如准确率、F1 分数等),我们可以选择表现最好的模型用于进一步的部署和预测。一般来说:

  • 朴素贝叶斯(Naive Bayes):适合文本分类任务,计算效率高,但对特征独立性假设敏感。
  • 逻辑回归(Logistic Regression):适合二分类问题,能够处理线性可分的数据。
  • 支持向量机(SVM):在高维空间中表现优异,适合复杂边界的分类任务。
  • 随机森林(Random Forest):能够处理非线性数据,具有较强的泛化能力,但计算开销较大。

二、结论与展望

通过对比多种机器学习模型,我们可以全面评估 TF-IDF 在情感分析任务中的应用效果。虽然朴素贝叶斯是常用的基线模型,但其他复杂模型如 SVM 和随机森林在特定情况下可能会提供更好的分类性能。最终,选择合适的模型不仅依赖于准确率,还应考虑计算成本、数据规模和具体应用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8.16作业

1.思维导图 2.在登录界面的登录取消按钮进行以下设置: 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断…

Solidworks二次开发:通过XYZ点的曲线

在SolidWorks中,通过XYZ点创建曲线是一种根据一组点的坐标生成三维曲线的方法。这种方法适用于需要根据特定点集设计曲线的情况,比如在建模复杂几何形状或执行逆向工程时。在SolidWorks中通过XYZ点创建曲线,操作步骤如下 打开SolidWorks并新建文件:启动SolidWorks软件,新建…

开放式耳机哪个品牌好用?盘点四款开放式蓝牙耳机排行榜前十名

作为网易云十级选手,测评过三十多款开放式耳机产品的开放式耳机测评专家来说,如果想要入手一款好用的开放式耳机的话,我会建议从三个方面来考虑,佩戴体验、音质效果和性能配置,了解这三个方面选购款好用的开放式耳机不…

Linux配置JDK8环境变量

目录 一、yum安装1.1 OpenJDK安装1.2 测试是否能够使用1.3 如何卸载JDK 二、手动安装2.1 下载2.2 上传到linux服务器路径2.3 解压2.4 配置环境变量2.5 测试是否能够使用 一、yum安装 1.1 OpenJDK安装 sudo yum install -y java-1.8.0-openjdk-devel1.2 测试是否能够使用 jav…

vue3+高德地图实现,创建和编辑多边形、圆形覆盖物(完整实现)

目录 一、绘制 1.形状选择 2.绘制图形 二、编辑 1.定义所需变量 2.获取需要编辑的覆盖物数据 fenceData并渲染 3.上述监听改动事件↓↓↓ 4.上述监听编辑结束事件 5.鼠标右击结束事件 初始化地图不再赘述,参考这篇文章 vue3中引入高德地图初始化,并添加、删除marke…

MySQL(四)——常用函数

文章目录 函数字符串函数数值函数日期函数流程函数 函数 函数,是指一段可以直接被另一段程序调用的程序或代码。 MySQL中内置了许多函数,我们只需在合适的场景下调用它们即可,调用函数查询结果直接使用SELECT即可,并且可以嵌套使…

电子电气架构---主流主机厂电子电气架构华山论剑(上)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…

递归--数据结构--黑马

递归 总结一句话,上手直接多刷Leetcode,比看这个更有用。 定义 递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集。 例如,单链表递归遍历的例子: void f(Node node) {if (node null) {retu…

class_2:数学运算和注释

1、运算符优先级 2、导入算数库 import matha -1 b -2 c 3 #一元二次方程 delta b ** 2 -4*a*c print((-b math.sqrt(delta))/(2*a)) print((-b - math.sqrt(delta))/(2*a)) 3、注释

KEEPALIVED高可用集群知识大全

目录 一、KEEPALIVED高可用集群简介 1、Keepalived 高可用集群的工作原理 2、Keepalived 高可用集群的作用 二、KEEPALIVED部署 1、网络配置 2、软件安装与启动 3、配置虚拟路由器 4、效果实现 三、启用keepalived日志功能 四、KEEPALIVED的几种工作模式 1、KEEPALI…

【多线程】初步认识Thread类及其应用

💐个人主页:初晴~ 📚相关专栏:多线程 / javaEE初阶 上篇文章我们简单介绍了什么是进程与线程,以及他们之间的区别与联系,实际应用中还是以多线程编程为主的,所以这篇文章就让我们更加深入地去剖…

深入理解Python range()函数与for循环的完美配合

文末赠免费精品编程资料~~ 今天我们要聊的是一个超级实用且基础的功能组合——range() 函数和 for 循环。无论你是刚开始学习Python,还是已经有点基础,这篇文章都将帮助你更深入地理解和掌握这两个工具。 1. 什么是 range()? range() 是Py…

YOLOV8网络结构|搞懂head

head里面的模块之前在backbone出现过的,有conv和c2f,还有concat是新的,就是用来做连接的,就是把几个通道的输出给连接起来,有C,H,W三个维度的,就看最后连接的参数,是按照哪个方向把他们加起来&a…

【C++从小白到大牛】布隆过滤器

布隆过滤器的提出 布隆过滤器概念 布隆过滤器的原理: 布隆过滤器的运作的总体过程: 布隆过滤器的插入 原码 布隆过滤器的查找 布隆过滤器删除 关于布隆过滤器的面试题: 1. 给两个文件,分别有100亿个query,我们…

EmguCV学习笔记 VB.Net 4.2 二值化

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSD…

K8S资源之PVPVC

概念 类似于Docker的数据卷挂载,将Pod中重要的文件挂载到宿主机上,如果Pod发生崩溃等情况自愈时,保证之前存储的数据没有丢失。 如上图中,将各个Pod中的目录挂载到存储层,如果Pod宕机后自愈均从存储层获取之前的数据…

STM32——I2C和SPI波形分析

波形分析 I2C波形 //写命令 void OLED_WR_CMD(uint8_t cmd) { HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&cmd,1,0x100); } //写数据 void OLED_WR_DATA(uint8_t data) { HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&am…

【Linux线程】线程的深度解析(线程是什么?线程与进程区别是什么?)

目录 一、前言 二、 什么是线程 💧线程的引入💧 💧线程的基本概念 💧 💧线程的理解 💧 💧进程与线程的关系💧 💧程序如何划分(重拾页表、见一下LWP&…

行业分析---AI时代是不断更新自身技术还是会利用新技术?

1 背景 最近有两个热点新闻,(1)“孟晚舟建议不要选和机器竞争的职业,根本不是它的对手”;(2)“周鸿祎建议萝卜快跑把无人出租车卖给司机,可实现三赢”。 技术的变革在互联网领域是比…

QT翻金币小游戏(含音频图片文件资源)

目录 QT翻金币小游戏 音频图片资源文件获取 效果展示 图片 视频 实现代码 main.cpp mymainwindow.h mymainwindow.cpp startscene.h startscene.cpp selectscene.cpp playscene.h playscene.cpp mypushbutton.h mypushbutton.cpp dataconfig.h dataconfig.cpp QT…