Python语言实现刑事犯罪罪名判定算法
使用Python语言实现刑事犯罪罪名判定算法,判断出罪名信息。
摘要
本课题的研究目标是使用Python语言实现刑事犯罪罪名判定算法,以罪名为标签,以案件情况说明为文本特征,先进行简单数据预处理,再进行相关文本处理,接着用训练集数据对支持向量机、逻辑回归、多项式朴素贝叶斯三个模型进行训练,判断出罪名信息,最后结合两个模型对低频罪名二次强化预测。
刑事犯罪的罪名判定方法
任务描述
通过对支持向量机、逻辑回归、多项式朴素贝叶斯三个模型的评估比较分析,选择适合罪名判定的最佳模型。
数据准备
此次实验使用的数据集,分为训练集、测试集,其中保存训练集数据、测试集数据的txt文件的文件夹名称分别为“dataTrainSet_under200”和“dataTestSet_under200”。
数据集 | 存放数据集文件夹名称 | 划分概率 | 罪名数量 | 案件数量 |
---|---|---|---|---|
训练集 | dataTrainSet_under200 | 0.7 | 216 | 17329 |
测试集 | dataTestSet_under200 | 0.3 | 216 | 7310 |
实验设置
对于所有的案件情况描述进行jieba分词,然后进行去停用词处理之后,开始TF-IDF处理进行单词权值的计算,提取特征尺寸为5000的特征进行输入,即设置参数max_features= 5000,接着分别对支持向量机、逻辑回归、多项式朴素贝叶斯三个模型进行训练。
利用OneVsRestClassifier类实现svm.SVC的多分类并采用线性核函数进行支持向量机模型的训练,逻辑回归模型优化后的参数为(multi_class=“multinomial”, solver=‘saga’, max_iter=20, random_state=20),对于多项式朴素贝叶斯的参数不做处理,保持默认状态。
模型评估结果分析
三个模型预测测试集数据的评估指标对比
模型 | Accuracy | Precision_ macro _avg | Recall_ macro _avg | F1-score_ macro _avg | 测试集数据量 |
---|---|---|---|---|---|
支持向量机 | 0.80 | 0.68 | 0.62 | 0.63 | 7310 |
逻辑回归 | 0.77 | 0.54 | 0.50 | 0.50 | 7310 |
多项式朴素贝叶斯 | 0.71 | 0.69 | 0.68 | 0.65 | 7310 |
刑事犯罪的低频罪名判定方法
任务描述
本文把在刑事案件数量在[2,50)范围的罪名,称为低频罪名。
在前面的罪名判定实验的TF-IDF+支持向量机模型的基础上,对低频罪名进行预测的评估。
为了提高低频罪名的判定的效果,将所有的低频罪名样本作为一个大类并将其标签命名为“其他类”,和其他样本一起训练出第一个模型,再单独对低频罪名的数据训练第二个模型,当用第一个模型预测低频罪名的测试案件说明时,预测结果为“其他类”,就调用第二个模型进行预测,使预测效果进行二次强化。
实验设置
本次实验的两个模型,使用了在前面实验取得模型评估效果最佳的支持向量机模型,参数也是线性核函数,这两个模型的不同之处在于使用的训练集数据不同。
模型评估结果分析
第一个模型的整体评估指标结果
数据 | Accuracy | Precision_ macro _avg | Recall_ macro _avg | F1-score_ macro _avg | 测试集数据量 |
---|---|---|---|---|---|
第一个模型测试集 | 0.81 | 0.81 | 0.81 | 0.81 | 7310 |
经过两次强化后的低频罪名预测结果
数据 | Precision_ macro _avg | Recall_ macro _avg | F1-score_ macro _avg | 测试集数据量 |
---|---|---|---|---|
第一个模型标签“其他类”的数据 | 0.63 | 0.54 | 0.58 | 383 |
第二个模型测试集 | 0.66 | 0.67 | 0.65 | 383 |
总结
本文基于刑事犯罪罪名判定算法的设计与实现,可以实现简单的单重罪名判定和提高低频罪名判定效果,但在本次的实验仍然有许多需要完善的问题,如样本不均衡、易混淆罪名等等问题,多重罪名判定的问题没有得以解决。
如需代码,请私信联系