主要内容

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

这个例子展示了如何使用单词袋模型训练一个简单的文本分类器的单词频率计数。

您可以创建一个简单的分类模型,使用单词频率计数作为预测因素。这个例子训练了一个简单的分类模型来使用文本描述预测工厂报告的类别。

加载和提取文本数据

加载示例数据。该文件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:);人数(=数据(cvp.test:);

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

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

准备文本数据进行分析

创建一个函数,用于标记和预处理文本数据,以便用于分析。这个函数preprocessText,依次执行以下步骤:

  1. 使用标记文本tokenizedDocument

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

  3. 使使用的词义化normalizeWords

  4. 删除标点符号使用erasePunctuation

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

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

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

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

从标记化的文档创建单词袋模型。

袋= 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. 使用标记文本tokenizedDocument

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

  3. 使使用的词义化normalizeWords

  4. 删除标点符号使用erasePunctuation

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

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

函数文件= preprocessText (textData)标记文本。文件= tokenizedDocument (textData);删除一个停止词列表,然后对这些词进行lemmalize。改善%词源化,首先使用addpartfspeech details。= addPartOfSpeechDetails文件(文档);= removeStopWords文件(文档);文档= normalizeWords(文档,“风格”“引理”);%擦掉标点符号。= erasePunctuation文件(文档);%删除2个或更少字符的单词,以及15个或更多字符的单词%字符。文件= removeShortWords(文件,2);= removeLongWords文档(文档、15);结束

另请参阅

|||||||||

相关的话题