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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

kaggle实战:Titanic

發布時間:2023/12/20 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kaggle实战:Titanic 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、問題重述
    • 1.1 問題描述
    • 1.2 數據集
    • 1.3 提交格式
  • 二、問題求解:決策樹
    • 2.1導入模塊
    • 2.2載入數據
    • 2.3探索數據
    • 2.4數據預處理
      • 2.4.1 無關變量處理
      • 2.4.2缺失值的處理
      • 2.4.3 非數值變量處理
    • 2.5 獲取特征矩陣和目標矩陣
    • 2.5 劃分測試集和訓練集
    • 2.6模型建立

一、問題重述

1.1 問題描述

泰坦尼克號的沉沒是歷史上最臭名昭著的沉船之一。1912 年 4 月 15 日,在她的初次航行期間,被廣泛認為“不沉”的泰坦尼克號在與冰山相撞后沉沒。不幸的是,船上的每個人都沒有足夠的救生艇,導致 2224 名乘客和船員中有 1502 人死亡。雖然幸存下來有一些運氣因素,但似乎有些人比其他人更有可能幸存下來。在這個挑戰中,我們要求您構建一個預測模型來回答這個問題:“什么樣的人更有可能生存?” 使用乘客數據(即姓名、年齡、性別、社會經濟階層等)。

1.2 數據集

在本次比賽中,您將獲得兩個相似的數據集,其中包括姓名、年齡、性別、社會經濟等級等乘客信息。一個數據集名為“train.csv”,另一個名為“test.csv” .
Train.csv 將包含一部分乘客的詳細信息(確切地說是 891 名),重要的是,將揭示他們是否幸存下來,也被稱為“地面真相”。
test.csv 數據集包含類似的信息,但沒有透露每位乘客的“真實情況”。預測這些結果是你的工作。
使用您在 train.csv 數據中找到的模式,預測船上的其他 418 名乘客(在 test.csv 中找到)是否幸存下來。

1.3 提交格式

提交文件格式:您應該提交一個包含 418 個條目和一個標題行的 csv 文件。如果您有額外的列(PassengerId 和 Survived 之外)或行,您的提交將顯示錯誤。
該文件應該正好有 2 列:

  • 乘客 ID(按任意順序排序)
  • 幸存(包含您的二元預測:1 表示幸存,0 表示已故)

二、問題求解:決策樹

2.1導入模塊

import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import GridSearchCV import matplotlib.pyplot as plt from sklearn.model_selection import GridSearchCV, cross_val_score import numpy as np

2.2載入數據

#導入數據 data=pd.read_csv("E:/21國賽/Titannic/train.csv")

2.3探索數據

#探索數據 data.head()#展示數據表前幾行數據

輸出結果:

data.info()#展示數據表缺失值

輸出結果:

可以看出數據表總共優891個數據,其中Age,Cabin,Embarked存在缺失值。因此我們要對缺失值進行處理。

2.4數據預處理

2.4.1 無關變量處理

通過分析,我們可以假設,Name,Ticket,Cabin與乘客的生存情況無關,因此,我們將這三個變量從數據表中除去。

data.drop(['Cabin','Name','Ticket'],inplace=True,axis=1)

輸出結果:

2.4.2缺失值的處理

對于Cabin由于變量與成可存活相關性不大,且缺失值過多,我們直接將其除去。
對于Age,有缺失值較小,我們將期使用平均值填補。

data["Age"]=data["Age"].fillna(data["Age"].mean())

輸出結果:

由于Embarked的缺失值只有兩個,因此,我們將這兩行刪除

data=data.dropna(axis=0)

輸出結果:

2.4.3 非數值變量處理

對于Embarked和Sex兩個變量,可以看出他們的值為非數值類型,因此,我們將其轉化為數值類型。

labels=data["Embarked"].unique().tolist() data["Embarked"]=data["Embarked"].apply(lambda x:labels.index(x)) data["Sex"]=(data["Sex"]=='male').astype("int")

輸出結果:

2.5 獲取特征矩陣和目標矩陣

X = data.iloc[:,data.columns != "Survived"]#特征矩陣 y = data.iloc[:,data.columns == "Survived"]#目標矩陣

輸出結果:

2.5 劃分測試集和訓練集

from sklearn.model_selection import train_test_split Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3) #將訓練集和測試集索引排序 for i in [Xtrain, Xtest, Ytrain, Ytest]:i.index = range(i.shape[0]) Xtrain

輸出訓練集的特征數據:

2.6模型建立

采用決策樹分類樹:

clf=DecisionTreeClassifier(random_state=25) clf=clf.fit(Xtrain,Ytrain) score=clf.score(Xtest,Ytest) print(score)

輸出結果:

采用交叉驗證:

clf=DecisionTreeClassifier(random_state=25) score=cross_val_score(clf,X,y,cv=10).mean() print(score)

輸出結果:

采用單參數優化:

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

輸出結果:


采用網格搜索多參數優化:

#網格搜索:能夠幫助我們同時調整多個參數的技術,枚舉技術 gini_threholds=np.linspace(0,0.5,50) #entropy_threholds=np.linspace(0,50,50) clf=DecisionTreeClassifier(random_state=25) #一串參數以及這些參數對應的取值范圍 parameters={"criterion":("gini","entropy"),"splitter":("best","random"),"max_depth":[*range(1,10)],"min_samples_leaf":[*range(1,50,5)],"min_impurity_decrease":[*np.linspace(0,0.5,50)]} GS=GridSearchCV(clf,parameters,cv=10) GS.fit(Xtrain,Ytrain)

輸出結果:

得到最終模型:

clf=DecisionTreeClassifier(criterion='entropy',random_state=25,splitter='random',max_depth=4# ,min_impurity_split=0.0,min_samples_leaf=1) score=cross_val_score(clf,X,y,cv=10).mean() print(score)

準確率:0.8087717058222677

總結

以上是生活随笔為你收集整理的kaggle实战:Titanic的全部內容,希望文章能夠幫你解決所遇到的問題。

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