叮~html
終於考完試啦!這段時間忙於複習,很久沒刷題了,如今又要開始整大做業和各類彙報,先來弄機器學習大做業呀!python
師兄早就叮囑要作比賽,結果一直拖着沒有作,如今趁着作大做業,先來上上手,kaggle,天池和DC都是數據科學的比賽,可是看了不少知乎問答後,仍是決定來作kaggle呀!web
kaggle入門級別題目:(1)數字識別(2)泰坦尼克號(3)放假預測正則表達式
第一眼泰坦尼克號就吸引我啦!因此先來作泰坦尼克號吧,分析了題目以後發現其實這就是一個二分類問題,適用於二分類問題的機器學習算法辣麼多,可是第一想法居然是用決策樹,多是這一題有給出來不少特徵,而決策樹就是不斷進行特徵選擇進行分類,因此就暫時決定用決策樹作一下,以後會用其餘方法來進行對比。算法
可是沒有用過python呀,先當了人家的kernel抄人家的代碼邊看邊學了!數組
不得不說scikit-learn(sklearn)真是強大,機器學習算法庫,各類模型都已經在裏面了,直接調用就能夠,可是以後還要導入xgboost庫,網上查的不少須要額外下載軟件,好不容易找到了一篇直接去https://www.lfd.uci.edu/~gohlke/pythonlibs/上下載對應版本的xgboost,而後在anaconda prompt上「pip install 下載的文件名」安裝便可,最後提示成功的話再用pip list或conda list查看已經有的庫便可。瀏覽器
接下來就是代碼裏的各類知識點啦:數據結構
(1)numpy(numerical python):會發現基本上機器學習或python代碼中都會導入該庫,它是python進行科學計算的基礎軟件包,支持高級大量的維度計算與矩陣計算,對數組運算也支持大量的函數庫,運算效率極好,是大量機器學習的基礎庫。框架
(2)pandas:是基於Numpy的一種工具,其中有兩類很是重要的數據結構,序列Series和數據框DataFrame;前者相似於numpy中的一維數組,除了一維數組中的方法,還能夠經過索引標籤的方式獲取數據,還具備索引的自動對齊功能;DataFrame相似於numpy中的二維數組。dom
(3)re:本模塊提供了正則表達式匹配操做。
(4)matplotlib:是python的繪圖庫;使用%matplotlib inline是IPython的一組預約義的魔法函數,可使用命令行樣式調用,將matplotlib的圖表直接嵌入之中。
(5)seaborn:以matplotlib爲底層,更容易定製化做圖的庫,能夠看作是matplotlib的補充。
(6)plotly:一個強大的開源數據可視化框架,經過構建基於瀏覽器顯示的web形式的可交互圖表來展現信息,可建立多達數十種精美的圖表和地圖
並且有在線和離線兩種方式,在線繪圖須要註冊帳號獲取API key,離線繪圖plotly.offline.plot()方式在當前工做目錄下生成html格式的圖像文件並自動打開。
(7)subprocess:啓動一個新的進程而且與之通訊,其中call和check_call都是父進程等待子進程執行命令,返回執行命令的狀態碼,可是後者出現錯誤時會進行報錯,前者不會。
(8)PIL:Python Imaging Library是python的圖像處理標準庫了。
導入的相關庫先記下這麼多了,接下來要研究數據了!
拿到一個問題最早進行的就是分析數據!!!分析數據特徵進行特徵工程:
泰坦尼克號問題中給出了「train.csv」和「test.csv」兩個數據文件,一個用來訓練模型,一個用來測試。其中
train.csv文件中的數據共給出了數據的這幾個特徵:
給出的特徵從直覺上看「Pclass」(乘客等級)、"Sex"、「Age」是最直接有用的幾個數據特徵;「Ticket」(船票號)、「Fare」(船票價格)、「Cabin」(艙位)是間接因素,能夠判斷乘客的經濟水平和「Pclass」相關;另外幾個特徵「Name」、「SibSp」(兄弟姐妹及配偶的個數)、「Parch」(父母及子女的個數)、「Embarked」(登船口岸)直覺上沒有看出來對預測有什麼關係,還須要進一步分析。
另外要查看給出的數據中缺失值的數量,看是否須要進行缺失值填補:
(1)Fare有1個缺失值;(2)Age有263個缺失值(這個缺失引發注意)(3)Cabin有1014個缺失值,缺失較多不能直接填補;(4)Embarked有兩個缺失值能夠直接清除或默認值填補.
爲了避免影響以後原始數據的使用,先對原始數據進行復製備份,而不是簡單的引用:
(1)使用copy()方法:original_data=train.copy();
(2)判斷乘客是否擁有艙位:使用lambda魔法函數,在這裏就使用一個if...else...的方法;
(3)生成新的特徵:將「SibSp」和「Parch」彙總獲得乘客的家庭成員總個數,即「FamilySize」新特徵
(4)從「FamilySize」中生成「IsAlone」的新特徵:使用pandas中的loc函數(使用行標籤索引數據)和iloc函數的區別(經過行號索引行數據).
(5)對於Embarked中的缺失值,使用「S」做爲缺省值填補;
(6)對於Fare中的缺失值,使用Fare的中值做爲缺省值填補;
(7)對於Age中的缺失值,比較麻煩,由於Age是一個比較重要的數據特徵,這裏使用np.random.randint(low,high,size)函數返回一個從[low,high)的隨機整形數。同時使用np.isnan()函數來獲取數據中的空值,另外pd.isnull()也能夠用來看行空值檢測,只是前者多用來單個值的檢驗,後者用於對一個DataFrame或Series總體進行檢驗。
(8)對於Name特徵,提取出有關的Title信息(lady,miss,sir等):須要使用正則表達式,其中group()爲返回匹配正則表達式部分,而後將匹配的部分title信息替換爲「稱呼」信息。
特徵提取和生成以後,將數據中的字符型都轉換爲整數型方便下面的統計。