如何用机器学习帮我们了解影响车祸严重程度的影响要素?
作者头像
  • Hadoop技术博文
  • 2019-01-04 12:25:33 2

惠灵顿车辆相撞事件

道路交通事故是全球社会面临的一个重要问题。据世界卫生组织(WHO)估计,2010年全球因交通事故丧生的人数达到了125万。而在美国,2016年有超过37,000人因机动车事故丧生,平均每天约有102人。在欧洲,2017年的统计数据也显示,平均每分钟有50人因交通事故丧生。那么,机器学习是否能帮助我们更好地理解导致车祸严重程度的因素?

在本文中,我们将构建一个完整的机器学习流程,包括通过API获取数据、进行探索性数据分析,再到将实际问题转化为机器学习模型。所有代码和Jupyter笔记本可以在GitHub Gist上找到,并且整个过程在Google Colab中运行,用户可以直接从GitHub打开笔记本并在Google Colab中进行实验。

获取数据

碰撞分析系统(CAS)的数据可以通过API以多种格式提供。我们通过API接口获取数据,而不是下载到本地计算机,这使得我们每次运行Jupyter笔记本时都能获得最新的数据更新。我注意到车辆事故与地理位置密切相关,因此我们将获取Geojson文件,而不是常见的CSV文件,以便进行地理数据分析,而不需要从经纬度创建几何图形并处理坐标参考系统和预测。

我们将使用Geopandas库来读取数据。如果您熟悉Pandas库,您会发现Geopandas非常友好,因为它建立在Pandas之上,提供了更便捷的地理数据分析功能。Geopandas与Python生态系统完美集成,并依赖于Pandas、Matplotlib和Shapely库来进行几何操作。

```python import requests import geopandas as gpd

url = 'https://opendata.arcgis.com/datasets/a163c5addf2c4b7f9079f08751bd2e1a_0.geojson' geojson = requests.get(url).json()

crs = {'init': 'epsg:3851'} gdf = gpd.GeoDataFrame.from_features(geojson['features'], crs=crs) ```

探索性数据分析

在新西兰,从2000年至2018年,共有6922人因交通事故死亡,其中重伤人数为45044人,重伤人数为205895人。尽管数据集记录了向新西兰警方报告的所有事故,但我们必须意识到并非所有事故都向警方报告,特别是非致命事故。大多数事故是非损伤性的,而致命事故则较少。在死亡率方面,大多数事故的死亡率为零。

通过统计分析,我们可以看出从2000年到2018年,事故的严重程度和死亡人数呈现下降趋势,但从2016年开始,死亡人数似乎有所增加。另一方面,2017年出现了轻伤和重伤的高峰。

此外,道路和其他相关属性也表明事故的严重程度及死亡率。例如,两条车道的道路比其他车道更容易发生事故。直线道路与死亡率的关系较小,而大多数死亡事故与某种道路弯曲有关(容易、中等和严重)。

地理数据分析

地理数据分析显示,大多数事故发生在道路上,特别是在城市地区。例如,在奥克兰市,我们可以看到一些事故的发生地点。

机器学习

我们可以采用不同的方法来处理这个数据建模的问题。一种方法是将其作为回归问题,根据数据集的属性预测死亡人数。另一种方法是将其作为分类问题,根据数据集预测事故的严重程度。在这个案例中,我们将其作为回归问题来处理。如果您想尝试分类模型,可以使用相同的方法。

首先,我们需要将分类特征转换为数值特征,可以使用Scikit-Learn库来实现:

```python from sklearn.preprocessing import LabelEncoder

labelencoder = LabelEncoder() for column in df.columns: if df[column].dtype == 'object': labelencoder.fit(df[column]) df[column] = label_encoder.transform(df[column])

将数据分为依赖变量和独立变量,以及训练集和测试集

from sklearn.modelselection import traintest_split

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

使用随机森林模型进行训练

from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor(nestimators=50) model.fit(Xtrain, y_train)

打印模型评估结果

from sklearn.metrics import meansquarederror, r2_score

trainrmse = meansquarederror(ytrain, model.predict(Xtrain), squared=False) validrmse = meansquarederror(ytest, model.predict(Xtest), squared=False) trainr2 = r2score(ytrain, model.predict(Xtrain)) validr2 = r2score(ytest, model.predict(Xtest))

print(f"RMSE Train: {trainrmse}, RMSE Valid: {validrmse}") print(f"Accuracy Train: {trainr2 * 100:.2f}%, Accuracy Valid: {validr2 * 100:.2f}%") ```

通过简单的随机森林模型,我们得到了大约86%的验证准确率。通过一些初步的调优和特征选择,模型的准确率可以提升到87%。当然,我们还可以进一步优化模型,比如通过创建新特征或使用其他算法。

结论

希望您喜欢这篇关于使用机器学习预测车辆事故的文章。如果您想尝试和实验代码,可以访问GitHub Gist上的链接,并直接在Google Colab中打开笔记本。

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

    本文来源:图灵汇
责任编辑: : Hadoop技术博文
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
影响何用要素车祸程度机器严重了解学习我们
    下一篇