主要内容

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

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

您可以创建一个简单的分类模型,该模型使用词频计数作为预测值。此示例训练一个简单的分类模型,以使用文本描述预测工厂报告的类别。

加载和提取文本数据

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

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

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

数据。类别=分类(data.Category);图直方图(data.Category)包含(“类”)伊拉贝尔(“频率”)头衔(“类分配”

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

本量利= cvpartition(数据。类别,“坚持”数据训练=数据(cvp.training,:);数据测试=数据(cvp.test,:);

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

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

准备文本数据进行分析

创建一个函数,用于标记和预处理文本数据,以便用于分析。功能预处理文本,按顺序执行以下步骤:

  1. 使用标记化文档

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

  3. 用英语把单词语法化normalizeWords

  4. 使用删除标点符号删除标点符号

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

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

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

文档=预处理文本(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

监督分类器训练

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

使用训练一个多类线性分类模型菲切克.指定计数单词袋模型的属性为预测值,事件类型标签为响应。指定学习者为线性学习者。这些学习者支持稀疏数据输入。万博1manbetx

XTrain=行李计数;mdl=FITCECOCC(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分类泄漏电子故障机械故障

示例预处理函数

功能预处理文本,按顺序执行以下步骤:

  1. 使用标记化文档

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

  3. 用英语把单词语法化normalizeWords

  4. 使用删除标点符号删除标点符号

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

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

作用文档=预处理文本(文本数据)%标记文本。文档=标记化文档(textData);%删除一个停止词列表,然后将这些词进行语法化%柠檬化,首先使用addPartOfSpeechDetails。documents=addPartOfSpeechDetails(documents);documents=removeStopWords(documents);documents=normalizeWords(documents,“风格”“引理”);%删除标点符号。文件=标点符号(文件);%删除包含2个或更少字符的单词,以及包含15个或更多字符的单词%人物。documents=removeShortWords(documents,2);documents=removeLongWords(documents,15);结束

另请参阅

|||||||||

相关话题