第1关:神经网络基本概念
任务描述
本关任务:根据本节课所学知识完成本关所设置的选择题。
相关知识
为了完成本关任务,你需要掌握:1.神经网络基本概念。
神经网络基本概念
-
神经网络由输入层、隐藏层、输出层组成;
-
层与层之间的神经元有连接,而层内之间的神经元没有连接。连接的神经元都有对应的权重;
-
最左边的层叫做输入层,这层负责接收输入数据;
-
最右边的层叫输出层,我们可以从这层获取神经网络输出数据;
-
输入层和输出层之间的层叫做隐藏层。
-
表示相邻两层不同神经元连接的强度叫权重。如果神经元1到神经元2有较大的值,则意味着神经元1对神经元2有较大影响。权重减小了输入值的重要性,对于接近于0的权重,输入的改变不会影响输出的变化;负权重意味着,增加输入而输出会减小。权重决定了输入对输出影响的大小。
上图中的网络一共由3
层神经元组成,但实质上只有2
层权重,因此我们通常将输入层当做第0
层网络,上图我们称其为2
层网络(根据输入层、隐藏层、输出层的总数减去1
后的数量来命名网络)。
编程要求
请仔细阅读题目,结合相关知识,完成本关的选择题任务。
测试说明
平台会对你的代码进行运行测试,如果实际输出结果与预期结果相同,则通关;反之,则 GameOver
。
第1关任务——选择题
上图中的神经网络一共有多少个权重? (C)
A、8
B、12
C、20
D、24
第2关:激活函数
任务描述
本关任务:使用sklearn
完成新闻文本主题分类任务。
相关知识
为了完成本关任务,你需要掌握如何使用sklearn
提供的MultinomialNB
类与文本向量化。
数据简介
本关使用的是20newsgroups
数据集,20newsgroups
数据集是用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。数据集收集了18846
篇新闻组文档,均匀分为20
个不同主题(比如电脑硬件、中东等主题)的新闻组集合。
部分数据如下:
From: Mamatha Devineni Ratnam <mr47+@andrew.cmu.edu>
Subject: Pens fans reactions
Organization: Post Office, Carnegie Mellon, Pittsburgh, PA
Lines: 12
NNTP-Posting-Host: po4.andrew.cmu.edu
I am sure some bashers of Pens fans are pretty confused about the lack
of any kind of posts about the recent Pens massacre of the Devils. Actually,
I am bit puzzled too and a bit relieved. However, I am going to put an end
to non-PIttsburghers relief with a bit of praise for the Pens. Man, they
are killing those Devils worse than I thought. Jagr just showed you why
he is much better than his regular season stats. He is also a lot
fo fun to watch in the playoffs. Bowman should let JAgr have a lot of
fun in the next couple of games since the Pens are going to beat the pulp out of Jersey anyway. I was very disappointed not to see the Islanders lose the final
regular season game. PENS RULE!!!
其中新闻文本对应的主题标签,已经用0-19
这20
个数字表示。
文本向量化
由于数据集中每一条数据都是很长的一个字符串,所以我们需要对数据进行向量化的处理。例如,I have a apple! I have a pen!
可能需要将该字符串转换成向量如[10, 7, 0, 1, 2, 6, 22, 100, 8, 0, 1, 0]
。
sklearn
提供了实现词频向量化功能的CountVectorizer
类。想要对数据进行向量化,代码如下:
from sklearn.feature_ext\fraction.text import CountVectorizer
#实例化向量化对象
vec = CountVectorizer()
#将训练集中的新闻向量化
X_train = vec.fit_transform(X_train)
#将测试集中的新闻向量化
X_test = vec.transform(X_test)
但是仅仅通过统计词频的方式来将文本转换成向量会出现一个问题:长的文章词语出现的次数会比短的文章要多,而实际上两篇文章可能谈论的都是同一个主题。
为了解决这个问题,我们可以使用tf-idf
来构建文本向量,sklearn
中已经提供了tf-idf
的接口,示例代码如下:
from sklearn.feature_ext\fraction.text import TfidfTransformer
#实例化tf-idf对象
tfidf = TfidfTransformer()
#将训练集中的词频向量用tf-idf进行转换
X_train = tfidf.fit_transform(X_train_count_vectorizer)
#将测试集中的词频向量用tf-idf进行转换
X_test = vec.transform(X_test_count_vectorizer)
MultinomialNB
MultinomialNB
是sklearn
中多项分布数据的朴素贝叶斯算法的实现,并且是用于文本分类的经典朴素贝叶斯算法。在本关中建议使用MultinomialNB
来实现文本分类功能。
在MultinomialNB
实例化时alpha
是一个常用的参数。
alpha
: 平滑因子。当等于1
时,做的是拉普拉斯平滑;当小于1
时做的是Lidstone
平滑;当等于0
时,不做任何平滑处理。
MultinomialNB
类中的fit
函数实现了朴素贝叶斯分类算法训练模型的功能,predict
函数实现了法模型预测的功能。
其中fit
函数的参数如下: