-
1 # 千鋒頭號粉絲
-
2 # 讀芯術
來點實際能寫出來的有點意思的東西吧
教你如何用Python預測交通事故,成為“死亡”預言家?惠靈頓交通事故熱感圖
交通事故是世界各個社會都存在的重大問題。2010年,據世界衛生組織(WHO)估計,道路交通事故造成的死亡人數高達125萬人。2016年,僅美國便有37461人死於機動車事故,平均每天死亡102人。同樣在歐洲,根據2017年的資料顯示,平均每分鐘就有50人死於交通事故。那麼機器學習能否幫助我們去了解影響交通事故嚴重性的原因和因素呢?
本文將完整地展現一次機器學習的流水線:從APIs收集資料開始,到進行探索性資料分析,然後將一個現實生活中存在的問題構建到機器學習模型中。整個流程都是在Google Colab中完成的,使用它免費的GPU/TPU環境進行,你可以直接從Github開啟Notebook在Google Colab中進行實驗。
收集資料你可以在不同的APIs中找到各種格式的交通事故分析系統(CAS)資料,很容易就可以透過API介面收集資料,而不用將它們下載到本地電腦中。這樣有一個好處是,我們每次執行Jupyter Notebook時都能獲取最新的資料。在這個流程中,我發現有一個特殊的問題,因為交通事故和地點(地理)緊密相關,所以在資料收集時,我們應該獲取Geojson檔案而不是一般的CSV檔案,如此一來,在進行地理資料分析時就不用從經緯來建立幾何圖形,並且能夠處理座標基準系和投影。
隨後可以使用Geopandas庫來讀取資料。如果你熟悉Pandas庫,那麼Geopnadas的使用應該也不在話下,因為它是建立在Pandas的基礎上的工具。它是一個高階資料收集工具,可以使Python中的地理資料工作變得更加簡單,它不僅具備Pandas的功能,還擁有能夠在地理幾何圖形上進行空間運算在資料型別。得益於Pandas、Matplotlib以及幾何圖形的運算庫,Geopandas能夠完美地融入Python的生態系統。
探索性資料分析在紐西蘭,從2000年至2018年,交通事故的死亡總人數為6922人。而事故中受重傷和輕傷的人數分別達到了45,044人和205,895人。然而這記錄的只是在事故發生後上報了紐西蘭警方的資料,我們還要考慮那些未被記錄在案的輕微交通事故。大多數的交通事故都是輕微、不致命的,而造成死亡的事故只佔極少數。在死亡人數的統計上,大多數事故中的死亡率為0。
交通事故的嚴重等級
交通事故中的死亡人數
過去的幾年中,整體資料表明事故的嚴重性和死亡人數在下降,但如下列折線圖所示,從2016年開始事故死亡人數似乎有所上升。另外,在2017年事故重傷和輕傷人數達到了峰值。
車道數量與事故死亡人數統計
道路彎曲程度與死亡人數統計
道路以及其他相關因素同樣可以展現事故的嚴重程度和死亡人數等級。讓我們進一步挖掘他們之間的關係。在死亡人數和車道數量的關係中,比起其他的多車道,雙車道所佔的百分比最高。直路的交通事故死亡人數最少,大部分傷亡都出現在各種型別的彎路(小彎、中彎和大型彎道。)
讓我們來看看交通法規和事故嚴重程度以及死亡人數的關係。其中,限速是一個很好的著手點。限速90km/h所佔據的死亡人數最高,100km/h其次。
限速和死亡人數統計
分析天氣因素後,同樣發現霧天和強風天事故死亡人數的佔比最高。雨天、雪天和霜凍天氣同樣也有較高的佔比。
天氣對交通事故死傷人數的影響
地理資料探索下圖所示的地理資料可檢視清楚地顯示事故發生的地點。如大家所料,大多數事故都發生在道路附近,尤其是城市裡。
所有交通事故發生點
讓我們來看看發生在奧克蘭的交通事故總和的聚類圖。
紐西蘭的奧克蘭交通事故頻發點
機器學習我們可以透過不同方法對這個問題進行建模。把它看成迴歸問題,並基於交通事故成因的資料集推測死亡人數。也可以把它看作分類問題,並透過事故的資料集預測事故的嚴重程度。下面,我將以迴歸問題為例進行機器學習建模(你也可以嘗試使用分類問題的方法,兩個方法基本相同)。在這個例子中,我不會進行任何特徵工程,我認為這個問題中的成因已經足夠建立一個起點,隨後可以再進一遍這個流程,並且透過特徵工程來提高模型的精確度。
首先,需要將無序特徵轉化為數值可以使用Sklearn庫來進行:
隨後,將資料與訓練和驗證集分離為獨立和非獨立的變數,以便隨後評估模型的結果。
現在準備將機器學習模型運用到資料中。我通常從隨機森林(Random Forest)開始,這是一個種利用多種分類樹進行的演算法,在應對有多個數據集的情況時非常有效。
如你所見,隨機森林模型在驗證集上有高達86%的準確性,再進過一些初始的調整和特徵選擇後,此模型的精確度可以提高到87%。如果在模型上進行一些改善,建立新的特徵或使用一些其他的演算法來提高模型的執行力,還能到達更高的準確率。但現在,已經達到本文的目的了。下面是隨機森林模型中最重要的特徵。
特徵重要性
我們一起分享AI學習與發展的乾貨
回覆列表
Python具有簡單、易學、免費、開源、可移植、可擴充套件、可嵌入、面向物件等優點,它的面向物件甚至比java和C#.net更徹底。作為一種通用語言,Python幾乎可以用在任何領域和場合,角色幾乎是無限的。 python能做什麼?
1.網站開發。Python資料處理很線上,用它編寫網站可以為大眾提供優秀的服務,主要使用django和flask框架,著名的網站像知乎、YouTube就是Python寫的。
2.自動化運維。Python執行在Linux系統上可以作為伺服器指令碼不停工作,實現對主機的自動化操作,自動登入等就是應用之一。
外掛是寫不了的,Python是指令碼語言,不可能像易語言、C語言那樣流暢自如地編寫輔助;
遊戲並不適合用Python開發,Python雖有pygame庫,但是功能不強,遊戲執行效率低下,寫遊戲還是要靠遊戲引擎。
Python的優勢有必要作為第一步去了解,Python作為面向物件的指令碼語言,優勢就是資料處理和挖掘,這也註定了它和AI、網際網路技術的緊密聯絡。