基于机器学习的刑事案件分类技术

分享一下大二做的项目,用了NB、KNN、SVM、Xgboost、Sequential神经网络五种方法进行文本分类。

首先刑事案件数据集从中国裁决书网站和北大爬取的,一共4000+条,如下所示:

contentlabel
 广西壮族自治区贺州市中级人民法院 SSJL 刑 事 判 决 书 AJJBQK ……绑架罪
 广西壮族自治区东兴市人民法院 SSJL 刑 事 判 决 书 AJJBQK (20……交通肇事罪
 广西壮族自治区百色市中级人民法院 SSJL 刑 事 判 决 书 AJJBQK (……交通肇事罪
北大法宝【法宝引证码】 CLIC11504688 原文链接:ht……抢夺罪
广西壮族自治区南宁市西乡塘区人民法院 SSJL 刑 事 附 带 民 事 判……故意毁坏财物罪

1.预处理

先用jieba库给文章分词:

import jieba
content=data.content.tolist()
content_S = []
for line in content:
    current_segment = jieba.lcut(line) #对每一篇文章进行分词
    if len(current_segment) > 1 and current_segment != '\r\n': #换行符
        content_S.append(current_segment) #保存分词的结果

分词效果如下:

给所有数据集进行并行分词:

import jieba
#jieba.enable_parallel(64) #并行分词开启
data['content_S'] = data['content'].apply(lambda i:jieba.cut(i) )
data['content_S'] =[' '.join(i) for i in data['content_S']]
data.head()

2.定义分类损失函数:

def multiclass_logloss(actual, predicted, eps=1e-15):
    """对数损失度量(Logarithmic Loss  Metric)的多分类版本。
    :param actual: 包含actual target classes的数组
    :param predicted: 分类预测结果矩阵, 每个类别都有一个概率
    """
    if len(actual.shape) == 1:
        actual2 = np.zeros((actual.shape[0], predicted.shape[1]))
        for i, val in enumerate(actual):
            actual2[i, val] = 1
        actual = actual2

    clip = np.clip(predicted, eps, 1 - eps)
    rows = actual.shape[0]
    vsota = np.sum(actual * np.log(clip))
    return -1.0 / rows * vsota

3.划分好数据集之后,再用tfidf再对文本进行处理:

stwlist=[line.strip() for line in open('stopwords.txt','r',encoding='utf-8').readlines()]
tfv = TfidfVectorizer(min_df=3, max_df=0.5, max_features=None,
                      ngram_range=(1, 2), use_idf=True,
                      smooth_idf=True, stop_words=stwlist)
tfv.fit(list(xtrain) + list(xvalid))
xtrain_tfv =  tfv.transform(xtrain) 
xvalid_tfv = tfv.transform(xvalid)

4.模型训练:

朴素贝叶斯:

测试下效果如何:

KNN:

SVM向量机:

Xgboost:

Seq神经网络:

最终的AUC曲线:

其中xgboost效果最好,其他模型都有点过拟合

码字不易,点个赞再走~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值