San Francisco Crime Classification
地址:https://www.kaggle.com/c/sf-crime/overview
本文完整的源代码可以在我的 GitHub 上查看,notebook 渲染慢的话,还可以在 nbviewer 里查看,下面只是展示了部分关键思路,欢迎大家批评与指正。
下面是关于整个项目的工作流程。
工作流程
![](https://img.haomeiwen.com/i414598/1604c664fc5608a6.png)
1、分析需求
“旧金山犯罪分类预测”是一个多分类问题,要求我们预测犯罪类型。使用的评价指标是 logloss:
实际上就是交叉熵损失函数,这个值越小,就说明算法的预测效果越好。并且要求我们的算法能够预测概率,多分类问题可以预测概率的模型有使用决策树、随机森林、 朴素贝叶斯等。
样本的各个特征以及含义如下:
序号 | 特征名 | 解释 |
---|---|---|
1 | Date | 日期 |
2 | Category | 犯罪类型,比如 Larceny 盗窃罪 等 |
3 | Descript | 对于犯罪更详细的描述 |
4 | DayOfWeek | 星期几 |
5 | PdDistrict | 所属警区 |
6 | Resolution | 处理结果 |
7 | Address | 发生街区位置 |
8 | X | 经度 |
0 | Y | 纬度 |
拿到数据以后,我们看一看数量、特征个数,是否有缺失值。
![](https://img.haomeiwen.com/i414598/3ad6ee6f17cf7230.png)
![](https://img.haomeiwen.com/i414598/4be3583fa106bd2e.png)
可以看到,数据没有缺失值,训练数据集有 万,测试数据集有
万。由于这里数据量很大,我们使用朴素贝叶斯算法。
下面的代码为提交做准备:
![](https://img.haomeiwen.com/i414598/f3063224471cee6c.png)
2、探索性数据分析
![](https://img.haomeiwen.com/i414598/5956876e6d64636b.png)
可以看出周五犯罪的案件最多。注意到特征中有街区信息和经纬度,其实可以做出很漂亮的可视化效果,不过鉴于我现有的知识,在这里就不做展示了。
3、特征工程
这里做的特征工程也比较简单,抽取年、月、日、小时、星期几、街区信息,然后再独热编码。
![](https://img.haomeiwen.com/i414598/d7f3753f7fd6e31c.png)
以上是对训练数据集的处理,而测试数据集也进行相同的处理,这里不再赘述。
4、模型训练与评估
我们首先从训练数据集中分割出一部分作为验证集,看一看效果如何。
![](https://img.haomeiwen.com/i414598/ba6663657bdb74d5.png)
得到对数损失函数的值为 ,说明还不错。然后我们使用全部的训练数据重新训练模型。
![](https://img.haomeiwen.com/i414598/d3af54523c819e0b.png)
5、预测并提交
![](https://img.haomeiwen.com/i414598/c0b9a2d21bd75927.png)
![](https://img.haomeiwen.com/i414598/f2d70c4d3aae3033.png)
在排行榜 左右,成绩不是很理想。问题在于特征工程比较粗糙,并且模型其实选择了一个比较粗略的模型(为了兼顾训练速度和预测速度)。在 Kernels 中看到的比较优秀的特征工程抽取了“经纬度只差”与“经纬度之和”特征,并且使用了比 XGBoost 还快的 lightgbm,最后得分是
,可以参考。
![](https://img.haomeiwen.com/i414598/ff8fa16c32639823.png)
参考资料
1、https://blog.csdn.net/han_xiaoyang/article/details/50629608
网友评论