【class5】建立人工智能系统(2)

news2024/12/23 6:35:25

【昨日内容复习】

进行监督学习时,第一个步骤是提取数据集的文本特征和对应的标签。
提取文本特征的具体步骤如下:
STEP1. 构造词袋模型,提取数据集中的文本特征
STEP2. 使用toarray()函数,将X转换为一个NumPy数组,方便后续调用

# 创建CountVectorizer对象,并存储在vect中

vect = CountVectorizer()

# 将word中的数据传递给vect

X = vect.fit_transform(word)

# 使用toarray()函数,将x转换为数组

X = X.toarray()

# 输出X进行查看

print(X)

考虑到初学的宝宝理解有困难,在简单分析一下代码

使用CountVectorizer来转换文本数据wordCountVectorizerscikit-learn库中用于文本分析的工具,能够将文本数据转换为词频矩阵。

word它应该是一个包含文本字符串的列表

下面是一个完整的例子,包括必要的导入和定义:

from sklearn.feature_extraction.text import CountVectorizer

# 假设我们有一个文本列表

words = ["the cat sat on the mat", "the dog sat on the log", "the cat and the dog"]

# 创建CountVectorizer对象,并存储在vect中

vect = CountVectorizer()

# 将words中的数据传递给vect

X = vect.fit_transform(words)

# 使用toarray()函数,将X转换为数组

X_array = X.toarray()

# 输出X_array进行查看

print(X_array)

这段代码会输出一个二维数组,其中每一行代表words列表中的一个文本,每一列代表一个单词的词频。例如,如果words中的第一个文本包含单词"the"2次,那么在对应的数组行中,"the"所对应的列的值将会是2

【昨日内容复习】

提取标签的具体步骤如下:
1. 创建一个空列表y用于存储标签数据
2. 使用for循环来遍历data中的每一行数据
3. 只从中提取标签部分,即每行的第二个数据,allInfo[1]
4. 将每行的标签数据逐一添加到列表y中

代码示例:

# 创建一个空列表y,用于存储标签

y = []

# 使用for循环遍历data,将遍历的数据存储到allInfo变量中

for allInfo in data:

    # 提取allInfo中的标签数据

    label = allInfo[1]

    # 将标签逐一添加到列表y中

    y.append(label)

# 输出列表y进行查看

print(y)

【昨日内容复习】

完成了第一步提取数据集的文本特征和标签后,我们就可以进行监督学习的第二个步骤:划分数据集。
具体步骤如下:
STEP1. 使用from...import... 从sklearn.model_selection中导入train_test_split;
STEP2. 使用
train_test_split()将数据集划分为训练集和测试集,并将结果赋值给result

# 从sklearn.model_selection中导入train_test_split

from sklearn.model_selection import train_test_split

# 划分数据集,将数据分为训练集和测试集

result = train_test_split(X, y, train_size=0.8, random_state=1)

# 输出result进行查看

print(result)

【昨日内容复习】

为了方便后续调用,我们通过索引依次提取出了列表result中:训练集的文本特征、测试集的文本特征、训练集的标签和测试集的标签。
把它们分别赋值给了变量train_feature、test_feature、train_label和test_label。

# 依次提取result中训练集和测试集数据

train_feature = result[0]

test_feature = result[1]

train_label = result[2]

test_label = result[3]

在这种情况下,它们代表了一个包含训练和测试数据的结果集合。让我们来看看为什么这些数字被选择,并解释它们的含义:

  1. result[0]:通常是训练数据集的特征。这是因为在机器学习中,通常首先会处理训练数据集,因此索引为0的位置用于存储训练数据的特征。
  2. result[1]:通常是测试数据集的特征。与训练数据集类似,测试数据集的特征被放置在索引为1的位置。
  3. result[2]:通常是训练数据集的标签。在监督学习任务中,训练数据集需要有相应的标签,因此在索引为2的位置存储了训练数据的标签。
  4. result[3]:通常是测试数据集的标签。与训练数据集类似,测试数据集的标签被放置在索引为3的位置。

这个顺序的选择主要是为了清晰和一致性,使得在使用这些数据时更加直观和方便。同时,这种约定也使得代码更易读和易于理解。

复习结束~
昨天我们完成了前两个步骤,接下来就到了第三步:选择一个合适的监督学习算法。
本例中,我们选择了一种应用最广泛的人工神经网络多层感知器(Multilayer Perceptron)

人工神经网络的名称和结构受到人类大脑的启发,模仿了节点(也称神经元)相互发送信号的方式。它至少由3个节点层组成:一个输入层、一个或多个隐藏层和一个输出层。

输入层:接收数据,如特征、字母、概念;
隐藏层:处在输入层和输出层之间,会对输入层的数据进行计算,并将信息传递到输出层;
输出层:输出分类或预测的处理结果。

神经网络的强大之处在于它们能够学习训练集中特征与标签之间的关系,完成高速分类的预测任务。像谷歌现在就是由神经网络算法进行机器翻译和搜索任务。这就是为什么会选择人工神经网络里应用最广泛的多层感知器作为我们的监督学习算法。

多层感知器(Multilayer Perceptron,简称MLP是最基础、最简单的一种人工神经网络。它通常应用于监督学习问题是自然语言处理、计算机视觉和其他神经网络的基础。

原理:

我们举个简单的例子来看看MLP是如何处理数据的:当原始数据传入到第一个隐藏层时,这些节点会返回对应的预测结果,而第二层的感知器会根据第一层返回的结果来进行二次处理。通过这样的方式,第二层的感知器就能处理更复杂和更抽象的数据。以此类推,多层感知器这样的层级结构,增强了信息的表示和处理能力,可以更加快速解决复杂问题。因此,选择了它作为本案例的算法。

选择完一个合适的监督学习算法后,我们就来到了下一步:
在训练集上使用多层感知器这个算法构造一个分类器模型~

sklearn.neural_network是sklearn中的神经网络模块,我们可以使用其中的MLPClassifier类。
它为我们提供了多层感知器算法,能直接搭建和训练一个分类器模型。

1. 导入模块

首先,我们需使用
from...import...,从 sklearn.neural_network 模块中导入 MLPClassifier 类。

# 从sklearn.neural_network中导入MLPClassifier

from sklearn.neural_network import MLPClassifier

2. 创建分类器

导入模块后,直接使用MLPClassifier(),创建一个MLPClassifier对象,也就是我们的分类器模型。
我们将返回的对象存储在变量mlp中。

# 创建MLPClassifier对象,并存储在mlp变量中

mlp = MLPClassifier()

3. 训练分类器

接下来,就可以对mlp对象使用fit()函数,来完成模型的训练。
只需将训练集的数据,也就是文本特征train_feature和标签train_label,依次传入该函数中即可。
我们的分类器会学习传入的文本特征和标签之间的关系。

# 通过train_feature和train_label,训练分类器

mlp.fit(train_feature, train_label)

我们再来自己操作一下搭建和训练一个多层分类器模型吧~~~

我们已经完成了监督学习的前四个步骤,成功通过训练集建立了分类器模型,现在可以进行第五步啦:
使用测试集来预测并评估模型的准确率

如何使用测试集评估模型的准确率呢?

回忆一下,测试集和训练集都既有文本特征又有标签。
那么我们可以先把测试集的文本特征传入到训练好的模型中,该模型会预测出对应的标签数据。然后将预测结果和测试集原本的标签进行对比,就可以评估该模型的准确率啦。

1. 对测试集的文本特征进行预测

MLPClassifier类中提供了predict()函数,它会通过刚刚创建的多层感知器对测试集的数据进行预测。
只需对创建的分类器对象使用predict()函数,再将测试集的文本特征作为参数传入该函数中即可。
该函数会返回预测的标签数据。

本例中,我们对mlp使用了predict()函数,并将测试集的文本特征test_feature传入到该函数里。我们将模型预测的标签结果存储在变量test_pred中,并输出进行查看。

# 对测试集数据进行预测

test_pred = mlp.predict(test_feature)

# 输出test_pred

print(test_pred)

2. 计算准确率

有了预测结果后,我们就可以通过对比【依靠模型生成的测试集标签数据test_pred】和【测试集原本的标签数据test_label】,来检验模型的准确率。
sklearn.metrics模块中的accuracy_score类,为我们提供了一个可以计算准确率的函数:accuracy_score()。

2.1 导入模块

首先,我们还是需要使用from...import...,从sklearn.metrics模块中导入accuracy_score类,用于评估分类模型的准确率。

# 从sklearn.metrics中导入accuracy_score

from sklearn.metrics import accuracy_score

2.2 计算模型准确率

接下来,就可以使用accuracy_score()函数,只需依次传入test_predtest_label即可。
该函数会对比这两个数据,返回一个模型的预测准确率得分。

# 计算预测准确率,并将结果赋值给score

score = accuracy_score(test_pred,test_label)

# 输出score进行查看

print(score)

我们将score输出,结果为0.825,即预测准确率为82.5%。每次运行时,该准确率都会有小幅度的波动,属于正常现象~

现在,我们来自己尝试一下:使用测试集来评估模型的准确率吧~
STEP1. 使用predict()函数,对测试集的文本特征进行预测
STEP2. 导入sklearn.metrics模块中的accuracy_score类,并使用accuracy_score()函数计算模型准确率得分

# 对测试集数据进行预测

test_pred = mlp.predict(test_feature)

# 从sklearn.metrics中导入accuracy_score

from sklearn.metrics import accuracy_score

# 计算预测准确率,并将结果赋值给score

score = accuracy_score(test_pred,test_label)

# 输出score进行查看

print(score)

最终我们训练出的模型准确率大概在80%左右,不算是一个完美的模型,还有一些改进的空间。
比如:
可以尝试添加更多的训练数据
在创建分类器,也就是使用MLPClassifier()时,传入不同的参数并进行调整等。
这里我们就不做更多的探索啦~

用于做情感分析的分类器模型就算搭建完成啦!我们来到了最后一个步骤:对“没有标签”的评价进行预测

我们只需定义一条评价,然后剩余的步骤和之前一样。最后我们将预测结果输出,根据输出就可以检验搭建的模型效果如何啦~
# 自定义一条评价,并存储在变量comment中

comment = "太差了,新电视买回家不到十多天,底座支架因质量问题断裂,电视直接从桌子上摔坏!"

# 使用jieba.lcut()对comment进行分词

comment = jieba.lcut(comment)

# 使用join()函数处理分词结果

comment =  [' '.join(comment)]

# 构造词袋模型

try_feature = vect.transform(comment)

# 使用toarray()函数把结果转换为NumPy数组

try_feature = try_feature.toarray()

# 使用predict()函数预测结果

try_pred = mlp.predict(try_feature)

# 输出预测结果

print(try_pred)

小科普(会涉及到一点数学概念哦)

细心的同学可能已经发现,我们在处理数据集时使用的是fit_transform()函数,但在处理没有标签的预测数据时使用的是transform()函数,为什么呢?
fit_transform()其实是fit()和transform()的组合,
多用于在训练数据时使用
在调用fit_transform()时,
会先通过fit(),计算和学习数据中每个特征的均值和方差再通过transform(),使用各自的均值和方差来变换所有特征。

小科普

那么对于没有标签的数据,如果使用fit()函数,则会重新计算一份新的特征均值和方差,这样的话我们的模型就会又学习一遍没有标签数据的特征。
因此,我们只需要使用transform(),这样就可以使用相同的均值和方差来对没有标签的数据进行转换,同时又避免了我们的模型学习预测数据的特征。
这里,就不做更深入地
解释啦~

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

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

相关文章

乡村振兴与乡村环境综合整治:加强农村环境保护,开展农村环境综合整治行动,提升乡村环境质量,打造生态宜居的美丽乡村

目录 一、引言 二、乡村振兴背景下的乡村环境现状 1、乡村环境面临的挑战 2、乡村环境问题的成因 三、加强农村环境保护的重要性 1、促进乡村振兴 2、保障生态安全 3、提升居民生活质量 四、开展农村环境综合整治行动的策略 1、制定科学规划 2、加大投入力度 3、强…

树莓派、ubuntu低版本python3安装库

如果遇到树莓派中自带低版本python3,又不想额外去安装python3时,可能会遇到版本过低,无法安装库的情况,以下用我实际情况举例解决方案。 本次遇到的问题是树莓派低版本中,python3为3.7.3,需要安装numpy&am…

AI算法工程师课程学习-数学基础-高数1-微积分

机器学习数学基础学习路线:1.高中数学-->大学2.微积分-->3.线性代数-->4.概率论-->5.优化理论。 为尽快进入到AI算法课程的学习,现在高数的学习要求: 1.看得懂,知道是什么,能听得懂,能理解讲…

感知机和神经网络

引入 什么是神经网络? 我们今天学习的神经网络,不是人或动物的神经网络,但是又是模仿人和动物的神经网络而定制的神经系统,特别是大脑和神经中枢,定制的系统是一种数学模型或计算机模型,神经网络由大量的人…

【SRC实战】无限领取优惠券

挖个洞先 https://mp.weixin.qq.com/s/b4YhYGwleFZLAY62Dv93_A “ 以下漏洞均为实验靶场,如有雷同,纯属巧合 ” 01 — 漏洞证明 一、无限领取优惠券 “ 只能领取1张优惠券场景,能不能无限次领取? ” 1、点击领取1张满999元减…

图片转word如何转换?

要将图片转换为Word文档,你可以使用以下方法之一: 以上这些方法都可以帮助你将图片中的文本转换为可编辑的Word文档,你可以根据自己的喜好和需求选择其中一种方法来操作。 使用OCR软件或在线工具:有许多OCR(Optical Ch…

TypeError: can only concatenate str (not “int“) to str

TypeError: can only concatenate str (not "int") to str a 窗前明月光,疑是地上霜。举头望明月,低头思故乡。 print(str_len len(str_text) : len(a)) 试图打印出字符串 a 的长度,但是在 Python 中拼接字符串和整数需要使用字符…

Star-CCM+绘制网格-全局网格定义(网格类型选择、薄体网格、网格重置)

前言 绘制网格是有限体积法仿真中必不可少的环节。目前Star-CCM+新版本(2304版)导入面网格只可以导入到部件中。网格类型也只能在操作中完成。零部件导入部件后,选中参与计算的全部部件→右键选择“将部件分配给区域”。此处需要注意的是,只有分配给区域后的部件才能进行网…

Python---Numpy万字总结(2)

NumPy的应用(2) 数组对象的方法 获取描述统计信息 描述统计信息主要包括数据的集中趋势、离散程度和频数分析等,其中集中趋势主要看均值和中位数,离散程度可以看极值、方差、标准差等 array1 np.random.randint(1, 100, 10) …

校园管理系统,基于 SpringBoot+Vue+MySQL 开发的前后端分离的校园管理系统设计实现

目录 一. 前言 二. 功能模块 2.1. 管理员功能模块 2.2. 用户功能模块 2.3. 院校管理员功能模块 三. 部分代码实现 四. 源码下载 一. 前言 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身…

26、Flink 的状态数据结构升级

状态数据结构升级 a)概述 Flink 流应用通常被设计为永远或者长时间运行,与所有长期运行的服务一样,应用程序需要随着业务的迭代而进行调整,应用所处理的数据 schema 也会随着进行变化。 升级状态类型的数据 schema &#xff0c…

住宅ip与数据中心ip代理的区别是什么

代理通常意味着“替代”。它是用户设备和目标服务器之间的中介,允许在不同的IP地址下上网。代理ip根据来源分类可分住宅ip与数据中心ip,二者之间区别是什么呢? 住宅ip是由互联网服务提供商(ISP)提供给家庭的IP地址。出于这个原因&#xff0c…

社交媒体数据恢复:密聊猫

一、概述 密聊猫是一款提供多种优质体验的手机社交聊天软件。通过这款软件,用户可以享受到多种不同的乐趣体验,如真人在线匹配、真实的交友体验等。同时,密聊猫也提供了数据恢复功能,帮助用户找回丢失的数据。 二、数据恢复步骤…

【经验分享】图片自适应窗口大小css;CSS实现背景图片全屏铺满自适应的方式

目录 设置背景颜色和边距 设置背景图片 调整背景图片尺寸和位置 完整代码 使用效果如下(展示) 网页版图片效果展示 手机版图片效果展示 如何使用 CSS 创建网页背景效果 在网页设计中,背景是一个重要的视觉元素,它可以为网…

Android面试题之kotlin热流和channel

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点 于冷流不同,在垃圾回收之前,flow里的值都是存在内存之中,并且处于活跃状态 StateFlow StateFlow是一个状态容…

排序算法及实现(上)

稳定性的判断:如果两个相同大小的元素也进行了交换就是不稳定,否则稳定 1.直接插入排序: 当插入第 i 位置元素时,前面 0 到 i-1 位置的元素已经各自有序。 此时将i 再次从i-1到0位置依次进行比较。找到合适位置将其插入&#x…

Java 【数据结构】 哈希(Hash超详解)HashSetHashMap【神装】

登神长阶 第十神装 HashSet 第十一神装 HashMap 目录 👔一.哈希 🧥1.概念 🩳2.Object类的hashCode()方法: 👚3.String类的哈希码: 👠4.注意事项: 🎷二.哈希桶 🪗1.哈希桶原理 &#x…

AI地名故事:沧联村

沧联村,位于黄埔区云埔街,与开发区东区、增城区接壤,辖区面积约6.58平方公里。这个村庄的历史悠久,充满了丰富的故事。 在很久以前,沧联村并未有现今的名称。然而,随着时间的流转,村庄逐渐形成…

美股市场恒生指数冲刺19000点关口 地产股大涨

查查配5月10日电(中新财经记者 谢艺观)5月10日,港股现强势行情,恒生指数盘中一度冲至18993.28点,距离19000点关口仅一步之遥。 美港通证券以其专业的服务和较低的管理费用在市场中受到不少关注。该平台提供了实盘交易、止盈止损、仓位控制等功能,旨在为投资者提供更为全面的投…

深度学习设计模式之单例模式

一、单例模式简介 一个类只能有一个实例,提供该实例的全局访问点; 二、单例模式实现步骤 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返…