日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

决策树系列(二)——基于决策树算法实现泰坦尼克号生还预测

發布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 决策树系列(二)——基于决策树算法实现泰坦尼克号生还预测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 下載數據集

鏈接:https://pan.baidu.com/s/1Z570Ri3d2UMEPP2Nz-Q1lw 提取碼:mfof

2.代碼實現

2.1 引包

[1]:import pandas as pdimport numpy as npfrom sklearn.tree import DecisionTreeClassifier # 分類樹import matplotlib.pyplot as plt # 畫圖from sklearn.model_selection import GridSearchCV,cross_val_score # 網格搜索,交叉驗證from sklearn.model_selection import train_test_split # 切分訓練集和測試集

2.2 讀取數據

[2]:data = pd.read_csv("E:/project_data/train.csv")

2.3 分析數據

??該訓練集共有12列數據,其中包含11個特征feature和一個標簽label(Survived )。其中英文對照表如下:

PassengerId乘客ID
Survived存活情況
Pclass客艙等級
Name乘客姓名
Sex性別
Age年齡
SibSp同代直系親屬人數
Parch不同代直系親屬人數
Ticket船票編號
Fare票價
Cabin船艙號
Embarked登船港口
[3]:data.head()


??info()此方法顯示有關DataFrame的信息,包括索引dtype和列dtype,非空值和內存使用情況。從結果中可以看出包含缺失值的特征有Age,Cabin,Embarked,所以我們需要對缺失值進行預處理。

[4]:data.info()

2.4 數據預處理

2.4.1 特征篩選

??在所有的特征中,根據我們的生活經驗知道,其中一些特征對乘客是否能夠存活幾乎沒什么幫助。比如姓名和船票編號,不可能因為你很出名以及你編號比較好,就能優先上救生艇。且由于船艙號缺失量確實比例很高,于是我們將這三個特征刪除。

[5]:data.drop(["Name","Cabin","Ticket"],inplace = True,axis=1) [6]:data.head()

2.4.2 處理缺失值

對于含有缺失值的特征,通常有三種處理方法:

  • 直接刪除
  • 填補缺失值
  • 直接使用

??對于Cabin這個特征,由于其缺失比例太高,所以我們使用第一種方法,直接刪除該特征。但是對于Age,缺失值不多且較為重要。所以我們對于Age使用均值填補;Embarked只是缺失兩個,所以我們刪除缺失值所在的兩行即可,對整體數據影響不大。

[7]:data["Age"] = data["Age"].fillna(data["Age"].mean())data.info()

[8]:data.dropna(inplace=True)data.info()

2.4.3 特征轉換

??由于sklearn中,決策樹模型只能處理數字以及數據的類別,所以對字符串我們需要進行特征轉換.

[9]:labels = data["Embarked"].unique().tolist()labels

[10]:data["Embarked"] = data["Embarked"].apply(lambda x:labels.index(x))data.head()

[11]:data["Sex"] = (data["Sex"] == "male").astype("int")data.head()

2.4.4 切分訓練集和測試集

[12]:x = data.iloc[:,data.columns!="Survived"]y = data.iloc[:,data.columns == "Survived"] [13]:Xtrain,Xtest,Ytrain,Ytest = train_test_split(x,y,test_size = 0.3)


??在切分數據集之后,index是混亂的。雖然在決策樹算法中并沒有影響,但是當我們使用其他模型需要使用到index時,會發生錯誤。所以養成習慣,每次切分完訓練集和數據集,需要回復順序索引。

[14]:for i in [Xtrain,Xtest,Ytrain,Ytest]:i.index = range(i.shape[0])

2.5 模型構建

2.5.1 無參數建模

[15]:clf = DecisionTreeClassifier(random_state=25)clf = clf.fit(Xtrain,Ytrain)score = clf.score(Xtest,Ytest)score

0.7565543071161048

2.5.2 交叉驗證

[16]:clf = DecisionTreeClassifier(random_state=30)score = cross_val_score(clf,x,y,cv=10).mean()score

0.7514683350357507

2.5.3 使用max_depth調參

[17]:clf = DecisionTreeClassifier(random_state=30,max_depth=5)score = cross_val_score(clf,x,y,cv=10).mean()score

0.7941905005107252

2.5.3 繪制max_depth超參數學習曲線

[18]:tr = []te = []for i in range(10):clf = DecisionTreeClassifier(random_state=25,max_depth=i+1,criterion="entropy")clf = clf.fit(Xtrain,Ytrain)score_tr = clf.score(Xtrain,Ytrain)score_te = cross_val_score(clf,x,y,cv=10).mean()tr.append(score_tr)te.append(score_te)print(max(te))plt.plot(range(1,11),tr,color = "red",label="train")plt.plot(range(1,11),te,color = "blue",label = "test")plt.legend()plt.show()

0.8166624106230849

2.5.4 網格搜索

??上面我們只是通過學習曲線找到了一個參數的最佳值,那么每一個參數都需要這樣一條一條繪制學習曲線嗎?sklearn為我們提供了網格搜索GridSearchCV,這個方法可以找出多個參數在各自的范圍內組合后模型最好的參數。

[19]:parameters = {"min_samples_leaf":[*range(1,50,5)],"min_impurity_decrease":[*np.linspace(0,0.5,50)]}clf = DecisionTreeClassifier(random_state=25,max_depth=3)GS = GridSearchCV(clf,parameters,cv=10)GS = GS.fit(Xtrain,Ytrain)

??best_score_屬性會返回在我們給出的參數選值內,模型效果最好的那組得到的模型準確率。

[20]:GS.best_score_

0.8006430868167203

??best_params_屬性會返回在我們給出的參數選值內,模型效果最好的那組使用的參數信息。

[21]:GS.best_params_

{‘min_impurity_decrease’: 0.0, ‘min_samples_leaf’: 16}

2.5.5 使用最優參數訓練模型并繪制樹形圖

[22]:clf = DecisionTreeClassifier(random_state=25,max_depth=3,criterion="entropy",min_samples_leaf=16,min_impurity_decrease=0)clf = clf.fit(Xtrain,Ytrain)score = clf.score(Xtest,Ytest)score

0.7752808988764045

繪制樹形圖

[22]:import graphvizfrom sklearn import treedot_data = tree.export_graphviz(clf,out_file=None,feature_names=feature_name,filled=True,rounded=True)graph = graphviz.Source(dot_data)graph

2.6 總結

??由于此數據集更多是用來熟悉數據處理以及決策樹建模流程,所以準確率并不用太過于糾結。之后會使用決策樹做隱形眼鏡數據預測以及球隊勝率預測,感覺有幫助可以關注一下!!!

系列文章:

機器學習系列——決策樹(一)

參考資料:

菜菜的sklearn

總結

以上是生活随笔為你收集整理的决策树系列(二)——基于决策树算法实现泰坦尼克号生还预测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。