Python演练:用机器学习将车祸“扼杀”在摇篮里!
作者头像
  • 汉诺威展览
  • 2019-01-04 12:09:51 0

惠灵顿车辆相撞事件

道路交通事故是全球社会面临的一个重要问题。根据世界卫生组织的数据,2010年全球因交通事故丧生的人数达到125万。而在2016年,美国单年因机动车事故死亡的人数达到了37,461人,平均每天约有102人因此丧命。在欧洲,每年也有大量人员伤亡,统计数据表明,2017年平均每分钟就有50人因交通事故死亡。那么,机器学习技术能否帮助我们更好地理解和预防这些事故呢?

本文将介绍如何利用机器学习技术,从数据获取、探索性分析到构建模型,全面解析车辆事故的问题。所有代码和Jupyter笔记本可以在GitHub上找到,并且可以在Google Colab中运行,以便用户直接进行实验。

数据获取

碰撞分析系统(CAS)提供的数据可以通过API接口获取,而不是下载到本地计算机。这种方式的好处在于我们每次运行Jupyter笔记本时都能获得最新数据。我发现在车辆事故案例中,地理位置因素尤为重要,因此我们将从Geojson文件中获取数据,而不是普通的CSV文件。这将使我们更容易进行地理数据分析,而不需要处理复杂的坐标系统和几何图形。

我们将使用Geopandas库来读取数据。Geopandas是在Pandas基础上构建的一个高级库,方便在Python中处理地理数据。它与Pandas、Matplotlib和Shapely等库无缝集成,使得地理数据分析更加便捷。

```python import requests import geopandas as gpd

url = 'https://opendata.arcgis.com/datasets/a163c5addf2c4b7f9079f08751bd2e1a0.geojson' geojson = requests.get(url).json() crs = {'init': 'epsg:3851'} gdf = gpd.GeoDataFrame.fromfeatures(geojson['features'], crs=crs) ```

探索性数据分析

新西兰自2000年至2018年间共发生了6922起致命的车辆事故,此外还有45044人受伤,205895人受重伤。尽管这个数据集记录了所有向新西兰警方报告的事故,但实际发生的事故可能更多,尤其是那些未报告的非致命事故。大多数车辆事故是非损伤性的,而致命事故较少。从死亡率角度来看,大多数事故的死亡率较低。

碰撞严重类别与死亡人数

多年来,整体数据显示事故严重程度和死亡人数呈下降趋势,但从2016年开始,死亡人数似乎有所上升。此外,2017年出现了轻伤和重伤的峰值。

事故总数变化

道路和其他相关属性也影响了事故的严重程度和死亡率。例如,2车道的道路比其他车道更常发生致命事故。直道对死亡率影响较小,而弯道(包括轻微、中等和严重的弯道)则与更多的死亡事故相关。

道路曲率与死亡率、车道数与死亡率

探讨交通规则及其与事故严重程度和死亡率的关系,发现最致命的速度限制是90公里/小时,其次是100公里/小时。

速度限制与死亡事故数量

天气条件也是重要因素之一,雾和强风导致的死亡事故比例较高,而雨、雪和霜冻也增加了事故风险。

天气对事故影响

地理数据分析

地理数据可视化清晰地展示了事故发生的地点。如预期所见,大多数事故发生在道路上,尤其是在城市地区。

所有事故位置

接下来,我们聚焦于奥克兰市的事故情况。

奥克兰事故点

机器学习应用

处理这一问题的建模方法有多种,可以选择回归模型预测死亡人数,或者选择分类模型预测事故的严重程度。在这个例子中,我们采用回归模型来预测死亡人数。如果您有兴趣尝试分类模型,也可以构建一个。在本例中,我们不进行特征工程,因为现有属性已足够构建基线模型,后续可以根据需要进行优化。

首先,我们需要将分类特征转换为数值形式:

python from sklearn.preprocessing import LabelEncoder lblE = LabelEncoder() for i in df: if df[i].dtype == 'object': lblE.fit(df[i]) df[i] = lblE.transform(df[i])

然后,我们将数据分为训练集和验证集,以便评估模型效果:

```python from sklearn.modelselection import traintest_split

Xtrain, Xtest, ytrain, ytest = traintestsplit( df.drop('fatalCount', axis=1), df.fatalCount, testsize=0.33, randomstate=42 ) ```

最后,我们使用随机森林模型进行训练:

```python from sklearn.ensemble import RandomForestRegressor

m = RandomForestRegressor(nestimators=50) m.fit(Xtrain, ytrain) printscore(m) ```

结果显示,简单的随机森林模型在验证集上的准确率为86%,通过初步调优和特征选择,模型性能可以提升到87%左右。

特征重要性

结论

希望本文能为您提供有价值的见解。如果您有兴趣尝试和实验代码,可以访问GitHub Gist,直接在Google Colab中打开Notebook。

来源:https://towardsdatascience.com/predicting-vehicle-accidents-with-machine-learning-ce956467fa74

    本文来源:图灵汇
责任编辑: : 汉诺威展览
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
篮里演练扼杀车祸机器Python学习
    下一篇