COMP 330课业#51说明在这项任务中,您将实现一个正则化的逻辑回归来对文本文档进行分类。实现将在Spark之上的Python中进行给你,有必要使用亚马逊AWS。您将被要求执行三个子任务:
(1)数据准备,
(2)学习(将通过梯度下降)和
(3)学习模型的评估。
注意:在你真正开始这项任务之前,完成HW 5和Lab 5是很重要的。HW5将给你一个机会来尝试梯度下降来学习模型,第五实验室将给你一些编写高效NumPy代码的经验,这两种代码对制作A5都很重要体验不那么具有挑战性!2数据您将处理一个由大约170000个文本文档和测试/评估组成的数据集由18700个文本文档组成的数据集。除了大约6000个文本文档外,其他所有文本文档都是维基百科页;其余文件是对澳大利亚法院案件和裁决的描述。在最高水平上,你的任务是建立一个分类器,可以自动判断文本文档是否是澳大利亚人法庭案例。我们准备了三个数据集供您使用。1.训练数据集(1.9 GB的文本)。这是您将用于训练逻辑回归的集合模型培训数据单行文档.txt或者作为直接S3地址,因此您可以在Spark课业中使用它:s3://chrisjermainebucket/comp33
0 A5/TrainingDataOneLinePerDoc.txt2.测试数据集(20
0 MB的文本)。这是您将用于评估模型的集合:或者作为直接S3地址,因此您可以在Spark课业中使用它:
0 A5/TestingDataOneLinePerDoc.txt3.小型数据集(37.
5 MB的文本)。这是供您用于在上对模型进行培训和测试的较小的数据集:需要注意的一些数据细节。您应该下载并查看SmallTrainingData.txt文件,然后再开始。您将看到内容有点像伪XML,其中每个文本文档以<doc id=…>开头标记,并以</doc>结尾。所有文档都包含在单个文档中行文本。请注意,所有澳大利亚的法律案件都以<doc id='AU1222''…>开头;也就是说,澳大利亚法律案件的doc-id总是以AU开头。你将试图弄清楚文件是澳大利亚的一个法律案件,只看文件的内容。1.3任务完成任务需要完成三项单独的任务。和往常一样,它使在转移到较大的数据集之前,实现这些并在较小的数据集上运行它们是有意义的。3.1任务1首先,您需要编写Spark代码,构建一个包含20000个最频繁单词的词典在训练语料库中。这本词典本质上是一个RDD,代 写COMP 330正则化逻辑回归分类它以单词为关键字单词的频率位置作为值。例如,最频繁的单词的值为零,并且19999是字典中频率最低的单词。为了获得这项任务的荣誉,请给我们单词“申请人”、“和”、“攻击”的频率位置,“蛋白质”和“汽车”。这些值应该是0到19999之间的值,如果单词不在字典中,则应该是-1,因为它不在20000以内。请注意,完成此操作需要使用A4解决方案的变体。如果你不信任您的A4解决方案和想要我的解决方案,您可以在Piazza上发布私人请求。3.2任务2接下来,您将把训练集中的每个文档转换为TF-IDF向量。然后您将使用一种梯度下降算法,用于学习逻辑回归模型,该模型可以决定文档是否是否描述澳大利亚法庭案件。您的模型应该使用l2正则化;你可以在中玩一点东西来确定控制正则化程度的参数。我们会有足够的你可能会发现正则化可能不太重要的数据(也就是说,它可能是你变得很好对正则化常数赋予非常小的权重的结果)。我想请你不要只是在互联网上查找梯度下降算法并实现从类中的LLH函数开始,然后导出您自己的梯度下降算法。我们可以如果你陷入困境,请帮忙。在每次迭代结束时,计算模型的LLH。你应该进行梯度下降直到LLH在迭代之间的变化非常小。一旦你完成了这项任务,你将通过(a)写下你的梯度更新公式来获得积分,以及(b)给出具有最大回归系数的50个单词。也就是说,那50个单词与澳大利亚的一个法庭案件最为密切相关。3.3任务3既然你已经训练了你的模型,是时候对它进行评估了。在这里,你将使用你的模型来预测无论每个测试点是否对应于澳大利亚的法院案例。为了获得这项任务的荣誉,你需要为我们计算你的分类器获得的F1分数——我们将使用获得的F1得分我们对您提交的任务3进行评分的方式之一。此外,我要请您实际查看文本中的三个误报,即您的模型制作的(也就是说,你的模特认为是澳大利亚法庭案件的维基百科文章)。编写段落描述为什么你认为你的模型被愚弄了。是关于澳大利亚的坏文件吗?这个法律制度?如果你没有三个假阳性,就用你有的(如果有的话)。4重要注意事项关于培训和实施的一些说明。在实现和评估梯度下降算法时,需要记住以下几点。2.1.为了获得良好的准确性,您需要对数据进行居中和规范化处理。也就是说,转换你的数据每个维度的平均值为零,标准偏差为一。也就是说,减去平均值每个数据点的矢量,然后将结果除以计算的标准偏差矢量在数据集上。2.当对新数据进行分类时,其与回归系数集的点积为正的数据点是“是”,否定是“否”(见GLM讲座中的幻灯片15)。您将努力最大化您的分类器的F1,您通常可以通过在“是”之间选择不同的截止值来增加F1以及除零以外的“无”。您可以做的另一件事是添加另一个维度,其值为每个数据点一个(我们在课堂上讨论过)。然后,学习过程将选择回归这个特殊维度的系数,倾向于在零的截止点很好地平衡“是”和“否”。然而,一些学生过去曾报告说,这会增加训练时间。3.学生在计算LLH和计算梯度更新。你可以做一些事情来避免这种情况,
(1)使用np.exp(),这似乎要非常健壮,并且
(2)转换数据,使标准偏差小于1——如果如果标准偏差为1,您可能会尝试10?2甚至10?5。您可能需要实验一下。这就是在现实中实现数据科学算法的美妙之处世界4.如果你发现你的训练需要几个多小时才能在最大的数据集上运行到收敛,这可能意味着你正在做一些天生就很慢的事情,你可以通过观察来加快速度仔细检查您的代码。有一点:首先在小样本上训练模型没有问题的大型数据集(例如,10%的文档),然后使用结果作为初始化,然后继续对完整数据集进行训练。这可以加快达到收敛的过程。大数据、小数据和分级。前两项任务值三分,后四分。自那以后在大数据集上运行所有内容可能很有挑战性,我们将为您提供一个小数据选项。如果你训练在TestingDataOneLinePerDoc.txt上测试数据,然后在SmallTrainingDataOneLinePerDoc上测试你的数据。我们在任务2和任务3上分别获得0.5分和0.5分。这意味着你仍然可以获得A,并且你不必处理大数据集。为了获得全额学分,你可以进行培训您的数据在相当大的TrainingDataOneLinePerDoc.txt数据集中,然后测试您的数据关于TestingDataOneLinePerDoc.txt。4.1使用的机器如果你决定尝试在大数据集上获得全部学分,你需要运行你的Spark课业三到五次机器作为工人,每个机器具有大约8个核心。如果你没有尝试获得全部学分,你很可能在较小的集群上运行即可。记住,如果你忘记关掉你的机器。请非常小心,并尽快关闭集群你工作完了。当你重新开始工作时,你总是可以轻松地创建一个新的。4.2上缴创建一个包含所有三项任务结果的文档。确保非常清楚你是否尝试了大数据或小数据选项。提交此文档以及您的所有代码。请全部拉上拉链您的代码和文档(请仅使用.gz或.zip!),或者附上每段代码以及您的文档到您提交的单独文档。除了Python代码和您创建的文档