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

这个例子显示了如何培养使用一袋字模型字频率计数一个简单的文本分类。

你可以创建一个使用词频计数作为预测一个简单的分类模型。这个例子训练一个简单的分类模型来预测用文字描述工厂报表的类别。

加载和提取文本数据

加载示例数据。该文件factoryReports.csv包含工厂报告,包括文字说明和明确的标签为每个报表。

文件名=“factoryReports.csv”;data = readtable(文件名,“TextType”,'串');头(数据)
ANS =8×5表类别描述紧急解决成本_____________________________________________________________________ ____________________ ________ ____________________ _____”项目是偶尔陷入扫描仪卷。”"机械故障" "中" "重新调整机器" 45 "装配工人的活塞发出响亮的咔嗒咔嗒的声音。"机械故障" "中" "重新调整机器" " 35 " "启动工厂时电源切断。"“电子故障”“高”“全更换”“16200”在组装的油炸电容器。"电子故障" "高" "更换元件" " 352 "搅拌器击穿保险丝。"“电子故障”“低”“增加观察名单”“55”爆管施工剂正在喷洒冷却剂。"泄漏" "高" "更换零件" "搅拌器里的保险丝烧断了"“电子故障”“低”“更换部件”“东西继续从皮带上滚落”。“机械故障”“低”“重新调整机器”38

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

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

将数据划分为一个训练分区和一个外挂的测试集。指定保持率为10%。

本量利= cvpartition (data.Category,“坚持”,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. Lemmatize使用的话normalizeWords

  4. 擦除使用标点符号erasePunctuation

  5. 删除2个或少于2个字符的单词removeShortWords

  6. 删除带有15个或更多字符的单词removeLongWords

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

文档= preprocessText(textDataTrain);文件(1:5)
指令文件:6令牌:物品偶尔会卡在扫描器卷轴:7令牌:大声的咔嗒声:砰的一声来装配者活塞:切断电源启动装置:炸坏电容器装配者:搅拌机断路保险丝:保险丝

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

包= bagOfWords(文档)
bag = bagOfWords with property:计数:[432×336双]词汇表:[1×336串]NumWords: 336 NumDocuments: 432

从总数没有出现超过两倍袋的词模型中取出的话。除去含从袋的词模型中没有任何文字文件,并删除标签对应的条目。

袋= removeInfrequentWords(袋,2);[袋,idx] = removeEmptyDocuments(袋);YTrain (idx) = [];袋
有属性的bagOfWords:计数:[432×155双]词汇表:[1×155串]NumWords: 155 NumDocuments: 432

监督分类器训练

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

训练一个多类线性分类模型使用fitcecoc。指定计数袋的词模型的属性是预测因子,和事件类型的标签是响应。指定学习者是线性的。这些学生支持稀疏数据输入。万博1manbetx

XTrain = bag.Counts;MDL = fitcecoc(XTrain,YTrain,“学习者”,“线性”)
mdl = CompactClassificationECOC ResponseName: 'Y'类名:[电子故障泄漏机械故障软件故障]ScoreTransform: '无'二进制学习:{6×1 cell}编码矩阵:[4×6双]属性,方法

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

测试分类器

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

预处理使用相同的预处理步骤的训练数据的测试数据。根据袋的字模型编码所得到的测试文档作为单词频率计数的矩阵。

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

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

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

使用新数据进行预测

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

海峡= [“冷却液池下方分拣机。”“分拣机吹熔丝的启动。”“有一些来自汇编未来很响的声音乱撞。”];documentsNew = preprocessText (str);XNew =编码(袋、documentsNew);XNew labelsNew =预测(mdl)
labelsNew =3×1分类泄漏故障的电子机械故障

例如预处理功能

功能preprocessText,进行下述顺序的步骤:

  1. 使用令牌化文本tokenizedDocument

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

  3. Lemmatize使用的话normalizeWords

  4. 擦除使用标点符号erasePunctuation

  5. 删除2个或少于2个字符的单词removeShortWords

  6. 删除带有15个或更多字符的单词removeLongWords

功能文档= preprocessText(的TextData)%记号化的文字。文档= tokenizedDocument(的TextData);%删除停用词列表,然后lemmatize的话。为了提高%词形还原,第一次使用addPartOfSpeechDetails。文档= addPartOfSpeechDetails(文件);文档= removeStopWords(文件);文档= normalizeWords(文档,“风格”,“引理”);%擦除标点符号。文档= erasePunctuation(文件);%与2个或更少的字符删除词语,并用15或更多个词%字符。文档= removeShortWords(文件,2);文档= removeLongWords(文件,15);结束

另请参阅

|||||||||

相关话题