實現該模型的訓練要用到的主要演演算法和實現思路是
""" 專案:泰坦尼克號乘客生存預測 主要演演算法:決策樹\隨機森林 實現思路: 1、導包 2、讀取資料 3、對資料進行基本處理 4、特徵工程 5、決策樹預估器流程 6、模型評估 """
首先的首先當然是導包啦
# 1、導包
import pandas as pd # 讀取檔案用的 from sklearn.feature_extraction import DictVectorizer # 用來進行字典特徵抽取 from sklearn.tree import DecisionTreeClassifier #決策樹 from sklearn.model_selection import GridSearchCV # 網格搜尋和CV(交叉驗證) from sklearn.ensemble import RandomForestClassifier # 隨機森林
然後就是讀取檔案裡面的資料進來了
# 2、讀取資料
train = pd.read_csv('train.csv') test = pd.read_csv('test.csv') y_test = pd.read_csv('gender_submission.csv')
資料集下載:百度網路硬碟
連結:https://pan.baidu.com/s/1slaouE4Es37U8u0U-kDJnw
提取碼:ss5o
接著是進行對資料進行基本的處理了,以下是作者的處理方法:
第一步是把多餘的特徵去除,選取出有用的特徵,作者認為,在資料集裡面有用的有"Pclass","Age","Sex"三個,所以我對它進行提取出來
# 3、對資料進行基本處理
# 1)選取有用的資料 x_train = train[["Pclass","Age","Sex"]] y_train = train["Survived"] x_test = test[["Pclass","Age","Sex"]]
第二步是把缺失值給填充為平均值。對於缺失值有兩種處理方式,一是如果該特徵不重要,直接刪除便是,二是填充平均值或眾數
# 2)缺失值處理:用平均值填充 x_train["Age"].fillna(x_train["Age"].mean(),inplace=True) x_test["Age"].fillna(x_train["Age"].mean(),inplace=True) # .fillna()是用來把括號裡的值填充進空值裡,裡面的inplace是決定是否要在自身進行修改 # .mean()是取到其平均值
第三步是把資料轉化成字典型別
# 3)轉換成字典 x_train = x_train.to_dict(orient="records") x_test = x_test.to_dict(orient="records") 「「「
orient 控制的是轉換成的字典的形式 orient =‘dict’,是函數預設的,轉化後的字典形式:{column(列名) : {index(行名) : value(值) )}}; orient =‘list’ ,轉化後的字典形式:{column(列名) :{[ values ](值)}}; orient =‘series’ ,轉化後的字典形式:{column(列名) : Series (values) (值)}; orient =‘split’ ,轉化後的字典形式:{‘index’ : [index],‘columns’ :[columns],’data‘ : [values]}; orient =‘records’ ,轉化後是 list形式:[{column(列名) : value(值)}…{column:value}]; orient =‘index’ ,轉化後的字典形式:{index(值) : {column(列名) : value(值)}}; 」」」
下一步是進行特徵工程,把資料處理成計算機能看懂的鴨子
# 4、特徵工程
# 1)範例化兩個轉換器 transfer = DictVectorizer()
# 2)使用轉換器
x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) 「「「 注:以上x_test是用transform方法,是應為fit_transform方法實際上可以分為兩個方法, 一個是fit,一個是transform,fit是用來計算資料的標準差和平均數,transform是用來 轉化資料的,在第一次使用fit_transform時,transfer裡面已經通過fit得到了x_train 的標準差和平均值了,為了資料標準化更加真實,所以x_test也要用一樣的標準差和平均值, 這就是x_test使用transform的原因 」」」
最後就是使用決策樹演演算法了
# 5、決策樹預估器流程 # 範例化預估器 es = DecisionTreeClassifier(criterion="entropy") # 新增網格搜尋和CV es = GridSearchCV(es,param_grid={"max_depth":[1,2,3,4,5,6,7,8,9]},cv=3) # 6、模型評估 # 使用預估器 es.fit(x_train, y_train) # 檢視準確率 print(es.score(x_test, y_test["Survived"])) # 檢視最佳資料 print("最佳深度:",es.best_params_) print("最佳成績:",es.best_score)
另外一個就是也可以用隨機森林的演演算法
# 5、隨機森林預估器流程 # 使用隨機森林進行解決 est = RandomForestClassifier() # 新增網格搜尋和CV est = GridSearchCV(est,param_grid={"n_estimators":[10,20,40,80,160,320,640,1280]},cv=3) # 使用 est.fit(x_train, y_train) # 6、模型評估 # 檢視準確率 print(est.score(x_test, y_test["Survived"])) # 檢視最好引數 print("最好的樹數量:",est.best_params_) print("最佳成績:",est.best_score_)
如此下來,我們便完成了一個關於泰坦尼克號乘客生存預測的模型辣!
(ps:該隨筆是作者一邊學習一邊寫的,裡面有一些自己的拙見,如果有錯誤或者哪裡可以改正的話,還請大家指出並批評改正!)