一說起機器學習,同學們的第一反應一般是: 哇,機器學習這麼高大上的技術,一定很難吧。
說實話,機器學習的理論知識,對於非科班出身的同學們來說,確實就像是天書一樣,小編還記得以前硬啃西瓜書從入門到放棄的慘痛經歷。
但是,還好,我們有python這個強大的工具。有了python, 機器學習不再痛苦。
今天, 咱們就來學習一下,如何用25行python代碼,實現一個簡單的機器學習項目。
python環境
python環境肯定是必須的啦, 推薦使用python3.x, 比如小編電腦上安裝的就是python3.7
為什麼不推薦python2呢, 因為, python官方宣布 2020 年 1 月後不再更新維護 Python2了。
機器學習lib包
python裡面有3個極其強大的機器學習lib包, 小編喜歡把他們稱作 」機器學習三劍客「:
1) numpy: 簡稱np, 主要用於矩陣計算。 聽到矩陣兩個字,是不是又感覺很難了, 不要急,這個機器學習項目不涉及矩陣計算~
2) pandas: 簡稱pd, 它是基於NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具和方法。 聽起來也挺複雜的,不過大家也不用擔心, 我們只是用它來讀取csv文件~
3) sklearn: 原文是scikit-learn (簡稱 sklearn) 它是基於 Python 語言的機器學習工具, 裡面有各種模型,各種工具,基本上都是幾行代碼就可以實現c++裡面極其複雜的功能,堪稱「神器「.
這幾個包的安裝,推薦是使用pip來安裝,網速不快的話,可以使用國內的源~, 具體方法本文就不再詳述了,百度一下有茫茫多的教程。
項目背景
在泰坦尼克沉船事故中, 有些乘客遇難,有些乘客則成功獲救。
訓練數據集中記錄了乘客的個人信息以及是否獲救,
我們需要根據這些數據嘗試訓練合適的模型,用於預測測試集中的乘客是否可以獲救。
這個問題本質上是一個二分類的問題。
數據集說明
數據集分為訓練集和測試集,欄位共有12個:
PassengerId, 乘客ID
Survived, 是否獲救
Pclass, 艙位等級
Name, 乘客名稱
Sex, 性別
Age, 年齡
SibSp, 兄弟姐妹個數
Parch, 父母小孩個數
Ticket, 船票文本信息
Fare, 票價
Cabin, 客艙
Embarked 登船港口
其中,Survived欄位就是我們要預測的欄位, 取值為0或者1。
下面看一段數據:
train.csv:
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S
test.csv:
PassengerId,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
892,3,"Kelly, Mr. James",male,34.5,0,0,330911,7.8292,,Q
893,3,"Wilkes, Mrs. James (Ellen Needs)",female,47,1,0,363272,7,,S
894,2,"Myles, Mr. Thomas Francis",male,62,0,0,240276,9.6875,,Q
代碼解析
敲黑板,進入重點了,大家注意聽,讓我們來一行一行地解析這25行代碼。
運行結果
python ML.py
average score: 0.6547085201793722
模型性能
說到性能,程式設計師們通常都會想到「cpu idle」,或者 「運行時間」,「內存占用」等。 但是,對於一個機器學習項目, 其性能指的是準確率得分(accuracy_score), 得分越接近於1.0, 就認為模型的性能越好。
後記
通過上面的運行結果,我們知道這個25行代碼的決策樹模型的得分為0.65,距離1.0還比較遙遠。
但是,一個完整的機器學習項目已經實現了。
在以後的文章中,小編會繼續介紹如何優化這個模型的性能,提前透露一下,最終模型的得分可以達到0.97,是不是很棒。