用決策樹或隨機森林解決泰坦尼克號乘客生存預測(內附資料集百度網路硬碟)

2023-07-28 21:00:27

 實現該模型的訓練要用到的主要演演算法和實現思路是

"""
專案:泰坦尼克號乘客生存預測

主要演演算法:決策樹\隨機森林

實現思路:
    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:該隨筆是作者一邊學習一邊寫的,裡面有一些自己的拙見,如果有錯誤或者哪裡可以改正的話,還請大家指出並批評改正!)