Kaggle Titanic 入门题

关于Titanic入门题,这是一个经典的二分类题目。其给出处一些数据,我们需要从数据中找出相关特征,然后我们根据特征构建训练模型,使模型可预测乘客的生存率。这里我们采用softmax分类的方法做预测。

具体代码如下:

# Titanic题目实战
import pandas as pd
from sklearn.model_selection import train_test_split
import tensorflow as tf
import numpy as np


data=pd.read_csv('train.csv')
#数据预处理
data['Sex']=data['Sex'].apply(lambda s: 1 if s =='male' else 0)  #把性别二值化
data=data.fillna(0)   #把NAN填充为0

# 选取特征
dataset_X = data[['Sex', 'Age', 'Pclass', 'SibSp', 'Parch', 'Fare']].as_matrix()
# 字段说明:性别,年龄,客舱等级,兄弟姐妹和配偶在船数量,父母孩子在船的数量,船票价格

#幸存与死亡两种分类,survidved是一种,deceased是另一种,其取值为suividved的非
#这两个分类也构成one-hot编码
data['Deceased'] = data['Survived'].apply(lambda s: int(not s))
dataset_Y = data[['Deceased', 'Survived']]
dataset_Y = dataset_Y.as_matrix()

#train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train_data和test_data
x_train, x_test, y_train, y_test = train_test_split(dataset_X, dataset_Y,test_size=0.2, random_state=42)
#这部分分割成两部分数据,一部分为训练数据,一部分为测试数据,用来最后评估模型准确率

# 构建计算图
# 声明输入数据占位符
# shape参数的第一个元素为None,表示可以同时放入任意条记录
X=tf.placeholder(tf.float32,shape=[None,6])
Y=tf.placeholder(tf.float32,shape=[None,2])

# 使用逻辑回归算法
weights = tf.Variable(tf.random_normal([6, 2]), name='weights')
bias = tf.Variable(tf.zeros([2]),name='bias')
y_pred = tf.nn.softmax(tf.matmul(X,weights)+bias)

# 定义交叉熵
cross_entropy=- tf.reduce_sum(Y * tf.log(y_pred + 1e-10), reduction_indices=1)  # 降维求和
# 定义损失函数
cost = tf.reduce_mean(cross_entropy)

# 使用梯度下降优化算法最小化损失函数
train_op = tf.train.GradientDescentOptimizer(0.001).minimize(cost)

with tf.Session() as sess:
    #变量初始化
    tf.global_variables_initializer().run()

    #训练模型
    for epoch in range(50):
        total_loss=0
        for i in range(len(dataset_X)):
            #准备feed_dict
            feed_dict={X:[dataset_X[i]],Y:[dataset_Y[i]]}
            _, loss=sess.run([train_op,cost], feed_dict=feed_dict)
            total_loss+=loss
        print('Epoch:%04d,total_loss=%.9f'%(epoch+1,total_loss))
    print('train complete')

    #验证
    pred=sess.run(y_pred,{X:x_train})
    correct=np.equal(np.argmax(pred, 1), np.argmax(y_train, 1))
    accuracy = np.mean(correct.astype(np.float32))
    print('Accuracy on validation set: %.9f' % accuracy)

这个模型是有参照别人的代码改写的,关于Titanic入门题的做法CSDN上还有很多,有兴趣的同学可以多去尝试其他方法。这里只是简单的做个记录分享。

你可能感兴趣的:(竞赛题)