实例 | 利用犯罪记录聚类和分类暴力行为(附步骤解析)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

介绍


很高兴知道Data Science的应用超越了商业场景和企业盈利的目的。最近我有幸承担了全国安全社区网络的一项非盈利项目,使我能够亲身体验应用机器学习的方法来服务我们的社区。纽约州约翰杰伊刑事司法学院的研究部门分享了地方检察官提供的的城市数据,由于签署了不公开协议,所以我不会列举这些数据。

研究焦点是亲密伴侣暴力案件,并为此类案件提供外展计划。主要问题在于,从这么多不同的案例记录中,找出他们正在寻找的案例是非常低效的,因此我们的目标是开发一种更简单的方法来解决这一难题。

无监督学习

数据跨度是从2015年到2017年。DA(地方检察官)数据包含描述以前案件详情的特征,例如受害者/嫌疑犯姓名,犯罪地点,可疑行为等。以其原始形式记录的数据没有符合客户对“亲密”的确切定义的标签,但有列可以指出它。

然而,由于这些详细的信息是针对这些案件给出的,所以我首先会尽我所能使用一个无监督的学习方法来总结数据。我决定根据所有记录中的可疑行为对案件进行聚集。 我的目标是根据嫌疑人的表现的相似性来聚集案件。如果可以创建行为概况,那么我们就可以根据它们属于哪个集群,更有效地给嫌疑犯分配各种外展活动。

1. PCA数据转换

有39个特征描述了我们可以跟踪的嫌疑犯的行为。这些包括“受损”,“推动”和“投掷物品”等动作。 唯一的问题是,这些是二进制特征,处理它们可能有点棘手。

103993b7696f3439443d9d5db60515ef3b37cb18

经过多次失败的系统聚类实验以及使用不同相异性度量的测试后,我发现在使用主成分分析法对变量进行转换之后应用K均值聚类产生了解释度非常高的聚类。

整个过程可以总结在下图中:

30d335e008f3a663c03c1d3166637000077f2e0b

通常情况下,我们认为通过PCA选择解释足够差异的主要成分的数量,是降低维度的一种手段。 数据降维的情况如下所示:

c76155dcc935f44141ee68a0d752902b09dc63ee

但是,我们的目标不是要减少我们拥有的特征量,我们的目标是将它们转换为我们可以聚类的数字数据。为此,我们将所有39个主成分得分(又称特征向量),保留100%的原始方差并对它们进行聚类。

2. 聚类

K均值聚类中的目标函数是最小化群内差异。 看看陡坡图,5、6个集群看起来是正确的。 在对两者进行试验之后,我得出结论认为5个集群最具可解释性。

51186520a8420535a54eecbfc452e7da4a692943

3. 集群档案


在为每个观察分配一个聚类标签并将它们与原始数据集匹配后,描述它们就变得非常容易。 回顾二进制数据,我们可以简单地将每个特性和每个集群中的所有1加起来。 具有较高总和的特征在描述该集群时将被赋予更多权重。下面是集群前3个最突出的特征的例子,这些特征被描述为“在影响下相遇”:

4de6ddaf2271de1d830e25271cfc548b85c66a49

根据上面的示例分析,最终集群看起来像这样! 每个案件将被标记为属于这些集群中的一个,并且每种情况下的嫌疑人都被假定为采用其中一个档案。

32ee639c42dc9577257875cd643696b0af0f47c5

监督学习

在开始任何监督学习方法之前,我首先需要一个可以帮助指导机器学习的功能。重申一下,我们的目标是能够对案件进行分类,不管它是否亲密,因为发现并非所有案件都被正确分类。

1. 特征工程—标记“亲密”

全国安全社区网络将“亲密关系”定义为目前或以前的任何密切关系。 这包括结婚,约会或者一起生孩子。使用数据集中的各种列,我通过定义python函数设计了监督功能“亲密关系”:

ab2e80e6d00d2d160280903c1264adb69dacf4cf

2. 选择一个模型

现在我已经对每个案例做了标记(“亲密”/“非亲密”),我需要建立一个分类模型。出于多种原因,我决定采用Logistic回归模型,对多项式朴素贝叶斯(Multinomial Naive Bayes)分类器进行建模:

d47e62d2b349aca45e42305ed6714efbe5ed61d9 由于训练规模较小,生成的朴素贝叶斯(Naive Bayes)模型将超越本文Andrew Ng所述的判别性Logistic回归模型;
d47e62d2b349aca45e42305ed6714efbe5ed61d9 朴素贝叶斯(Naive Bayes)及其独立特征的假设使得模型更简单,更普通,因此变体更少;
d47e62d2b349aca45e42305ed6714efbe5ed61d9 朴素贝叶斯(Naive Bayes)因其用于文本数据和垃圾邮件检测而名声鹤唳。

增加最后一点非常有趣的,提供的数据集包含了现场警官的文字叙述。 我们可以通过警官叙述的词语选择来检测亲密关系吗?我决定找出答案。

3. 自然语言处理

为了运行朴素贝叶斯分类器(Multinomial Naive Bayes classifier),我需要首先清理文本数据。 在Python中使用NLTK模块,采取了以下步骤:

d47e62d2b349aca45e42305ed6714efbe5ed61d9 标记叙述(使用RegexpTokenizer)
d47e62d2b349aca45e42305ed6714efbe5ed61d9 删除无用词(使用无用词)
d47e62d2b349aca45e42305ed6714efbe5ed61d9 应用词形(使用WordNetLemmatizer)

由此产生的叙述看起来像这样:

27bb5c5e403f95a289719a3204e03c50f404d3e1

处理完文本之后,我将标记化和词元化的叙述转换为一个交易对象,其中每个单词都是自己的特征,每一行都是叙述或“文档”。 这也可以被称为“文档术语矩阵”。

8f9bb5f1a4e6a6e62e06cda29402b02be25b1d49

4. 降维

文档术语矩阵生成了3,805个特征。 为了减少这一点,以提高我们的模型的准确性,不够频繁的特征被删除。通过使用验证集合,我得出结论,删除所有出现少于两次的单词就足够了。这已经将维度降低到1861个特征。

5. 调整多项式朴素贝叶斯(Multinomial Naive Bayes)

多项式朴素贝叶斯分类器(Multinomial Naive Bayes classifier)默认将alpha设置为1. Alpha是一个平滑参数,用于处理出现在未在训练集中训练的保留集中的单词。 使用GridSearchCV,alpha被调整为2.53。

6. 模型评估

在用α= 2.53重置多项式朴素贝叶斯(Multinomial Naive Bayes)并将数据分解成训练集和测试集后,结果出人意料地好。

训练精度:84%

测试精度:81%

混合矩阵如下:

e13e39df4da2024dc03c2cb36f36b777148a4c9c

7. 结论

总之,该模型的真阳性,即敏感性为80.4%(82 /(82 + 20)),该模型的真阴性又称特异性为82.4%(14 /(3 + 14))。两者都远超我的预期,由于叙述为许多不同的警官所写,而每个警官都有自己的写作风格。但是模型显示,无论警官是谁,处理亲密案件时,都会倾向于频繁地使用某些关键词。这才是该模型性能的关键。

尾语

希望上述模型能够被我们的社区广泛使用。聚类可以非常有帮助,特别是当我们没有足够的数据为我们的案例提供标签时。它可以让我们快速了解嫌疑人是什么样的(实际上我更愿意称他们为病人)。 鉴于我们确实有足够数据的幸运情况,朴素贝叶斯分类器可以大大减少将潜在患者筛选到治疗计划所需的时间。早期发现早期干预可以减少我们社区中的暴力案件,这只是数据科学可以做的许多有价值的事情之一。迫不及待想要看看还有什么事情可以做!


原文发布时间为:2018-06-6

本文作者:Kenny Moy

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”。

相关文章
|
11天前
|
API 数据处理 开发者
获取淘宝分类详情:深入解析taobao.cat_get API接口
淘宝开放平台推出的`taobao.cat_get` API接口,帮助开发者和商家获取淘宝、天猫的商品分类详情。该接口支持获取类目列表、属性及父类目信息,通过指定分类ID(cid)实现精准查询,并提供灵活的参数设置和高效的数据处理。使用流程包括注册账号、创建应用、获取App Key/Secret、构造请求、发送并解析响应。示例代码展示了如何用Python调用此API。开发者可借此为电商项目提供数据支持。
|
1月前
|
前端开发 JavaScript
React 步骤条组件 Stepper 深入解析与常见问题
步骤条组件是构建多步骤表单或流程时的有力工具,帮助用户了解进度并导航。本文介绍了在React中实现简单步骤条的方法,包括基本结构、状态管理、样式处理及常见问题解决策略,如状态管理库的使用、自定义Hook的提取和CSS Modules的应用,以确保组件的健壮性和可维护性。
69 17
|
3月前
|
开发框架 供应链 监控
并行开发模型详解:类型、步骤及其应用解析
在现代研发环境中,企业需要在有限时间内推出高质量的产品,以满足客户不断变化的需求。传统的线性开发模式往往拖慢进度,导致资源浪费和延迟交付。并行开发模型通过允许多个开发阶段同时进行,极大提高了产品开发的效率和响应能力。本文将深入解析并行开发模型,涵盖其类型、步骤及如何通过辅助工具优化团队协作和管理工作流。
98 3
|
10天前
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
33 5
|
13天前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
2月前
|
存储 负载均衡 监控
数据库多实例的深入解析
【10月更文挑战第24天】数据库多实例是一种重要的数据库架构方式,它为数据库的高效运行和灵活管理提供了多种优势。在实际应用中,需要根据具体的业务需求和技术环境,合理选择和配置多实例,以充分发挥其优势,提高数据库系统的性能和可靠性。随着技术的不断发展和进步,数据库多实例技术也将不断完善和创新,为数据库管理带来更多的可能性和便利。
126 57
|
25天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
100 5
|
1月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
50 5
|
2月前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c8i实例解析:实例规格性能及使用场景和最新价格参考
计算型c8i实例作为阿里云服务器家族中的重要成员,以其卓越的计算性能、稳定的算力输出、强劲的I/O引擎以及芯片级的安全加固,广泛适用于机器学习推理、数据分析、批量计算、视频编码、游戏服务器前端、高性能科学和工程应用以及Web前端服务器等多种场景。本文将全面介绍阿里云服务器计算型c8i实例,从规格族特性、适用场景、详细规格指标、性能优势、实际应用案例,到最新的活动价格,以供大家参考。
|
3月前
|
XML 数据格式
HTML 实例解析
本文介绍了HTML中常见元素的使用方法,包括`<p>`、`<body>`和`<html>`等。详细解析了这些元素的结构和作用,并强调了正确使用结束标签的重要性。此外,还提到了空元素的使用及大小写标签的规范。

推荐镜像

更多