1. 程式人生 > 其它 >【學術】將吳恩達的第一個深度神經網路應用於泰坦尼克生存資料集

【學術】將吳恩達的第一個深度神經網路應用於泰坦尼克生存資料集

這篇文章包括了神經網路在kaggle泰坦尼克生存資料集上的應用程式。它幫助讀者加深他們對神經網路的理解,而不是簡單地執行吳恩達程式碼。泰坦尼克生存資料集就是可以隨意使用的一個例子。

  • Github repo上的程式碼地址: https://github.com/jaza10/AppliedNeuralNetworkTitanicSurvival

1.下載“深度神經網路應用程式”和來自Coursera中心的“dnn_utils_v2.py”檔案,並將其儲存在本地

  • Github repo不包含deeplearning.ai提供的程式碼。請從Coursera深度學習專業化課程中學習。所需的材料在第4周的程式設計作業中。

課程地址:https://www.coursera.org/learn/neural-networks-deep-learning

下載Coursera中心的“深度神經網路應用程式v3”並點選“開啟”

下載dnn_app_utils_v2.py檔案

2. 下載kaggle泰坦尼克生存資料集,並將其儲存在與“資料集”資料夾相同的位置。

  • 泰坦尼克生存資料集地址:https://www.kaggle.com/c/titanic/data
  • 為方便起見,我已經在Github repo中包含了資料集。

3.開啟“深度神經網路應用程式”筆記本。

  • 你可以安全地刪除所有其他單元格,除了輸入和L-Layer_model單元格;
  • 執行兩個單元格。

4.載入泰坦尼克生存資料集。

5.預先處理資料集。

  • 以等級為基礎來計算乘客年齡–該想法來自Jose Portilla極力推薦的Udemy課程“資料科學與機器學習訓練營的Python”,它屬於邏輯迴歸的一個分支;
  • 課程地址:https://www.udemy.com/python-for-data-science-and-machine-learning-bootcamp/learn/v4/overview
  • 從名字中提取乘客頭銜 – 我遵循曼努埃爾(Manuel)偉大而簡單的文章–從名字中提取頭銜;
  • 文章地址:https://www.kaggle.com/manuelatadvice/feature-engineering-titles
  • 列出乘客序號、客艙和名字;
  • 偽編碼分類變數的性別,登船卡和頭銜;
  • 衡量年齡和票價–特徵擴充套件幫助梯度下降演算法收斂更快,參閱scikit-learn文件或Github repo。

scikit-學習文件地址:http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

預先處理資料看起來是這樣的:

訓練集包含11個特徵,為神經網路的評估做好準備

6.應用神經網路.

得到變數X和y,然後轉置以適應神經網路結構。

from sklearn.model_selectionimport train_test_split
X= train.drop('Survived', axis=1)
y= train['Survived']
X_tr, X_te, y_tr, y_te= train_test_split(X, y, test_size=0.2)

# Transpose your data
X_tr_T= X_tr.T
X_te_T= X_te.T
y_tr_T= y_tr.T.values.reshape(1,y_tr.shape[0])
y_te_T= y_te.T.values.reshape(1,y_te.shape[0])

根據特性的數量選擇第一層的維度。在這種情況下,第一個維度是11。然後選擇儘可能多的隱藏層。

### CONSTANTS ###
layers_dims= [11,25,25,25,25,25,10,1]#  7-layer model
parameters= L_layer_model(X_tr_T, y_tr_T, layers_dims, num_iterations= 2500, print_cost= True)
# Calculate accuracy on the training set
pred_train= predict(X_tr_T, y_tr_T, parameters)
# Calculate accuracy on the test set
pred_test= predict(X_te_T, y_te_T, parameters)

第一次嘗試獲得85%的訓練和82%的測試精度

預先處理測試資料。通過X的正向傳播和訓練神經網路的引數生成預測。

# Load test data
test= pd.read_csv('datasets/titanic_test.csv')

# Preprocess test data

# Prepare X to generate predictions
X= test.drop(['PassengerId','Master'], axis=1)

# Transpose X to fit neural network architecture
X_tr_T= X.T

# Calculate predictions through forward propagation with the parameters
# obtained through fitting the neural net to the training data
probas, caches= L_model_forward(X_tr_T, parameters)

# Get classes from predictions
p= np.zeros((1,X_tr_T.shape[1]))
for iin range(0, probas.shape[1]):
        if probas[0,i] >0.5:
            p[0,i]= 1
        else:
            p[0,i]= 0

# Generate the predictions file
pIds= pd.DataFrame(data=test['PassengerId'].astype(int), columns=['PassengerId'], dtype=int)
preds= pd.DataFrame(data=p.T,columns=['Survived'], dtype=int)
final_prediction= pd.concat([pIds, preds], axis=1)
final_prediction.to_csv('titanic_survival_predictions.csv', index=False)

最後一步:生成測試資料的預測

將生成的預測儲存為csv檔案,然後將檔案提交給kaggle。這一預測將使你躋身於參與者的前30%。

提交預測檔案會使你進入前三名,並幫助你適應kaggle競賽

你已經將神經網路應用於你自己的資料集了。現在我鼓勵你使用網路中的迭代次數和層數。在泰坦尼克號生存資料庫上應用的神經網路大概有些矯枉過正。

關鍵要點:

  • 從Coursera中心下載“應用深度學習”和“dnn_utils_v2”jupyter notebook,並在區域性環境中執行;
  • 相應地預先處理資料;
  • 調換X和Y變數,以便擁有一個“示例特徵”的訓練矩陣;
  • 調整第一個圖層的維度以匹配特徵的數量;
  • 訓練神經網路並儲存生成的引數;
  • 通過測試資料的正向傳播和之前儲存的神經網路引數,生成對測試集的預測。