泰坦尼克号生存预测(数值数据预处理)--keras--python源码(23)

版权声明:博主是初学者,博文可能会有错误,望批评指正!转载请注明本博客地址,谢谢! https://blog.csdn.net/LieQueov/article/details/80539856
一、说明

本源码主要利用python对于数据进行预处理,包括:

(1)从指定的url中,下载数据文件

(2)使用pandas读取xls文件,填充空缺的数据。

(3)将性别转成二进制编码

(4)对特殊字段进行了one-hot编码

(5)进行数据归一化

(6)按比例将数据分为训练数据和测试数据

(7)构造感知机模型,对生存率进行预测

二、特别注意

训练数据进行尺度变换的函数具体过程不是很清楚,导致测试数据虽然使用相同的变换函数,但是是否进行相同尺度的缩放也不清楚。

三、python源码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Jun  1 14:52:40 2018

@author: sysu-hgavin
"""
import os
import urllib.request
import numpy as np
import pandas as pd
from sklearn import preprocessing
from keras.models import Sequential
from keras.layers import Dense,Dropout
url = "http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.xls"
filepath = "titanic3.xls"
if not os.path.isfile(filepath):
    result = urllib.request.urlretrieve(url,filepath)
    print("download:",result)
all_df = pd.read_excel(filepath)
cols = ['survived','name','pclass','sex','age','sibsp','parch','fare','embarked']
all_df = all_df[cols]
# delete name
df = all_df.drop(['name'],axis=1)
# check null 
df.isnull().sum()
age_mean = df['age'].mean()
df['age'] = df['age'].fillna(age_mean)
fare_mean = df['fare'].mean()
df['fare'] = df['fare'].fillna(fare_mean)

# sex code
df['sex'] = df['sex'].map({'female':0,'male':1}).astype(int)

#embarked code 
df_onehot = pd.get_dummies(data=df,columns=['embarked'])

#to array
ndarray = df_onehot.values
label = ndarray[:,0]
data = ndarray[:,1:]
#normalized
minmax_scale = preprocessing.MinMaxScaler(feature_range = (0,1))
scaleddate = minmax_scale.fit_transform(data)
# split data 
msk = np.random.rand(len(ndarray))< 0.8
y_train = label[msk]
x_train = scaleddate[msk]
y_test = label[~msk]
x_test = scaleddate[~msk]

#build a model
model = Sequential()
model.add(Dense(units=40,input_dim = 9,kernel_initializer='uniform',activation='relu'))
model.add(Dense(30,activation='relu'))
model.add(Dense(1,activation='sigmoid'))

#train
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
train_his = model.fit(x_train,y_train,validation_split=0.1,epochs=30,batch_size=32,verbose=2)
scores = model.evaluate(x_test,y_test)


猜你喜欢

转载自blog.csdn.net/LieQueov/article/details/80539856
今日推荐