主要内容

为分类创建简单的文本模型

此示例显示如何使用袋式模型在字频率计数上训练简单的文本分类器。

您可以创建一个简单的分类模型,它使用Word频率计数作为预测器。此示例列举了一个简单的分类模型,以预测使用文本描述来预测工厂报告类别。

加载和提取文本数据

加载示例数据。该文件factoryReports.csv包含出厂报告,包括每个报告的文本描述和分类标签。

文件名=“factoryreports.csv”;data = readtable(文件名,“TextType”'细绳');头(数据)
ans =.8×5表类别描述紧急解决成本  _____________________________________________________________________ ____________________ ________ ____________________ _____ " 项目是偶尔陷入扫描仪卷。”“机械故障”、“中等”、“重新调整机器”、“组装器的活塞发出响亮的咔嗒咔嗒和砰砰的声音。”“机械故障”“中等”“调整机器”“启动工厂时电源被切断”“电子故障”“高”“完全更换”“16200”“组装器内电容器烧毁”“电子故障”“高”“更换元件”“352”“混频器跳闸保险丝。”“电子故障”“低”“列入观察名单”“55”施工剂中爆管正在喷洒冷却剂。"泄漏" "高" "更换部件" 371 "混合器内保险丝熔断"“电子故障”“低”“更换部件”“东西不断从传送带上掉下来。”“机械故障”“低”“重新调整机

转换标签类别表的列以分类,并使用直方图查看数据中的类分布。

数据。类别=分类(data.Category);图直方图(data.Category)包含(“班级”)ylabel(“频率”) 标题(“类分配”

将数据划分为训练分区和保留的测试集。指定拒绝百分比为10%。

本量利= cvpartition(数据。类别,“坚持”,0.1);dataTrain =数据(cvp.training,:);dataTest =数据(cvp.test,:);

从表格中提取文本数据和标签。

textDataTrain = dataTrain.Description;textDataTest = dataTest.Description;YTrain = dataTrain.Category;欧美= dataTest.Category;

准备文本数据进行分析

创建函数授权并预处理文本数据,以便它可以用于分析。功能PreprocessText.,按顺序执行以下步骤:

  1. 使用授权文本令人畏缩的鳕文

  2. 删除使用停止词的列表(如“and”,“of”和“the”)Removestopwords.

  3. 使用的单词释放normalizeWords

  4. 使用擦除标点符号侵蚀

  5. 删除使用2个或更少字符的单词removeshortwords.

  6. 删除超过15个字符的单词removeLongWords

使用示例预处理函数PreprocessText.准备文本数据。

文档= preprocesstext(TextDataTrain);文件(1:5)
ans = 5×1 tokenizedDocument: 6代币:物品偶尔被卡住扫描仪卷轴7代币:响亮的叮当声巨响来组装器活塞4代币:切断电源启动工厂3代币:炸电容器组装器3代币:搅拌器trip fuse

从令牌化文件创建一个单词袋式模型。

BAG = BAGOFWORDS(文件)
[432×336 double] Vocabulary: [1×336 string] NumWords: 336 NumDocuments: 432

从单词袋式模型中删除单词,这些模型总共出现超过两次。删除包含单词袋式模型中没有单词的任何文档,并删除标签中的相应条目。

袋= removeInfrequentWords(袋,2);[袋,idx] = removeEmptyDocuments(袋);YTrain (idx) = [];袋
bag = bagOfWords with properties: Counts: [432×155 double

监督分类器训练

训练一个监督分类模型使用单词袋模型和标签的单词频率计数。

使用训练一个多类线性分类模型fitcecoc.。指定袋式模型的属性是预测器,以及事件类型标签是响应。指定学习者是线性的。这些学习者支持稀疏数据输入。金宝app

xtrain = bag.counts;mdl = fitcecoc(xtrain,ytrain,“学习者”“线性”
mdl = CompactClassificationECOC ResponseName: 'Y' ClassNames: [Electronic Failure Leak Mechanical Failure Software Failure] ScoreTransform: 'none' BinaryLearners: {6×1 cell} CodingMatrix: [4×6 double]属性,方法

为了更好,您可以尝试指定线性学习者的不同参数。有关线性分类学习者模板的更多信息,请参阅templateLinear

测试分类器

利用训练好的模型对测试数据进行标签预测,并计算分类精度。分类准确率是模型预测正确的标签所占的比例。

使用与训练数据相同的预处理步骤进行预处理测试数据。根据袋式模型将结果测试文档作为字频率计数的矩阵。

documentsTest = preprocessText (textDataTest);XTest =编码(袋、documentsTest);

利用训练好的模型对测试数据进行标签预测,并计算分类精度。

XTest YPred =预测(mdl);acc = sum(YPred == YTest)/numel(YTest)
acc = 0.8542

使用新数据进行预测

对新工厂报告的事件类型进行分类。创建包含新工厂报告的字符串数组。

str = [“冷却液在分拣机下面汇集。”“分拣机在启动时吹熔断。”“汇编者有一些非常响亮的嘎嘎声的声音。”];documentsNew = preprocessText (str);XNew =编码(袋、documentsNew);XNew labelsNew =预测(mdl)
labelsNew =3×1分类泄漏电子故障机械故障

示例预处理功能

功能PreprocessText.,按顺序执行以下步骤:

  1. 使用授权文本令人畏缩的鳕文

  2. 删除使用停止词的列表(如“and”,“of”和“the”)Removestopwords.

  3. 使用的单词释放normalizeWords

  4. 使用擦除标点符号侵蚀

  5. 删除使用2个或更少字符的单词removeshortwords.

  6. 删除超过15个字符的单词removeLongWords

功能文档= preprocessText(TextData)%标记文本。文档= tokenizeddocument(textdata);%删除停止单词列表,然后释放单词。改善%lemmatization,首先使用addpartofspeechdetails。文档= addpartofspeechdetails(文件);文档= Removestopwords(文件);文档= rangerizewords(文档,“风格”“引理”);%擦除标点符号。文件=侵蚀(文件);%用2个或更少字符删除单词,以及15个或更多的单词% 人物。文档= RemoveShortwords(文件,2);文件= removelongwords(文件,15);结束

另请参阅

|||||||||

相关话题