逻辑回归分类器-创建词向量-情感分析

题目

  1. 请使用您今天学习的逻辑回归分类器对下面的聊天机器人数据进行自动分类。(3分)

https://github.com/songys/Chatbot_data(ChatbotData.csv文件)

https://raw.githubusercontent.com/songys/Chatbot_data/master/ChatbotData.csv

此聊天机器人数据位于 CSV 文件中,

它由三列组成:Q、A 和标签。

每个数据都有以下标签之一:日常生活为 0,分手为 1(负面),爱情为 2(正面)。

把这个数据的Q和A连成一句话后,

将数据打乱后,除以训练/测试数据 (8:2),

构建一个自动分类为三类 (0, 1, 2) 的逻辑回归分类器,

找出测试数据的分类准确率。

使用 scikit-learn 的 CountVectorizer 和 LogisticRegression 分类器来解决问题。

sklearn.feature_extraction.text.CountVectorizer — scikit-learn 1.2.2 documentation

sklearn.linear_model.LogisticRegression — scikit-learn 1.2.2 documentation

!wget Chatbot_data/ChatbotData.csv at master · songys/Chatbot_data · GitHub

案例

1.自己实现一个逻辑回归分类器

之前,我们了解了逻辑回归作为使用机器学习的自动文本分类方法之一。

现在,根据我们所学的知识,让我们实现我们自己的逻辑回归分类器。

我们这里要解决的问题是将英文短信(SMS)分类为普通短信或垃圾短信的问题。

换句话说,我们实现的逻辑回归分类器是一个垃圾邮件过滤器(垃圾邮件文本分类器)。

分类器实现代码取自下面的代码。

IBM Developer

1-0分类器实现过程

在创建垃圾邮件字符分类器之前,在一个名为UCI 机器学习存储库的公共数据存储库中,

让我们获取目标数据(基准数据集)。

UCI Machine Learning Repository: SMS Spam Collection Data Set

如果您查看数据的描述,正常字符被标记为“火腿”,垃圾字符被标记为“垃圾邮件”。

在这里,我们将通过将标签“火腿”更改为 0 并将“垃圾邮件”更改为 1 来准备训练数据集。

我们将按以下顺序实现垃圾邮件文本分类器。

首先获取目标文档。

将文档分成训练数据和测试(评估)数据。(训练/测试)

每个数据都经过预处理。(英文大写转小写并去掉标点符号)

统计每个单词出现的频率。

创建文档 X 字矩阵。

我们使用训练数据学习逻辑回归的权重 w 和偏差 b。

逻辑回归分类器自动将新字符(评估数据)分类为垃圾邮件或正常字符。

计算分类精度。

!wget https://archive.ics.uci.edu/ml/machine-learning-databases/00228/smsspamcollection.zip

!unzip /content/smsspamcollection.zip

import pandas as pd


sms_spam = pd.read_csv('/content/SMSSpamCollection', sep='\t', header='infer', names=['Label', 'SMS'])
print(sms_spam.shape)
sms_spam.head()

#查看数据集中ham和spam的比例

sms_spam ['Label']value_counts normalize=True

火腿0.865937

垃圾邮件0.134063

名称:标签,dtype:f1oat64

数据预处理

创建词向量

这段代码使用了scikit-learn库中的CountVectorizer类来进行文本特征提取。

具体解释如下:

1. 导入CountVectorizer类:首先,从sklearn.feature_extraction.text模块中导入CountVectorizer类。这个类用于将文本数据转换为特征向量。

2. 实例化CountVectorizer对象:通过调用CountVectorizer(),创建了一个CountVectorizer的实例对象,将其赋值给vectorizer变量。这个实例对象将用于对文本数据进行特征提取。

3. 特征提取:接下来,使用vectorizer对象的fit_transform()方法对训练集中的'SMS'列进行特征提取。fit_transform()方法会将文本数据转换为稀疏矩阵表示的特征向量。train_set['SMS']表示从训练集(train_set)中获取'SMS'列的数据。

4. X_train_final.shape:这行代码用于获取X_train_final的形状(shape),即特征提取后的稀疏矩阵的维度信息。shape是一个元组,包含两个值,分别表示矩阵的行数和列数。所以,X_train_final.shape返回的结果是一个元组,可以通过该结果了解特征提取后的稀疏矩阵的维度情况。

综上所述,这段代码的作用是使用CountVectorizer对训练集中的'SMS'列进行特征提取,并获取特征提取后稀疏矩阵的维度信息。

from sklearn.feature_extraction.text import CountVectorizer


vectorizer = CountVectorizer()   # 객체를 선언
X_train_final = vectorizer.fit_transform(train_set['SMS'])
X_train_final.shape

要将"Q"和"A"两列数据都转换成向量,你可以使用CountVectorizer对它们进行分别的特征提取。下面是示例代码:

from sklearn.feature_extraction.text import CountVectorizer

# 创建CountVectorizer对象
vectorizer_q = CountVectorizer()
vectorizer_a = CountVectorizer()

# 对"Q"列进行特征提取
X_q = vectorizer_q.fit_transform(train_set['Q'])

# 对"A"列进行特征提取
X_a = vectorizer_a.fit_transform(train_set['A'])

这样,X_qX_a分别表示经过特征提取后的稀疏矩阵,其中X_q对应于"Q"列的特征向量,X_a对应于"A"列的特征向量。

请注意,针对不同的列进行特征提取时,需要使用不同的CountVectorizer对象来独立进行处理。这样可以确保每列的特征提取都是基于该列的文本数据。

如果你希望将"Q"和"A"列的特征向量进行合并,可以使用适当的方法(例如hstackconcatenate)将它们连接起来。这将取决于你在后续处理中的需求和算法选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哈都婆

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值