天天看点

泰坦尼克号生存预测(下)-预测和特征构造

预测

如下代码,使用逻辑回归生存预测。

import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression

data=pd.read_csv(r"E:\MLdata\kaggle_titanic\processing.csv")

# print(data)

data_train=data[data['Survived']!=-1].drop(["PassengerId"],axis=1)
data_train_x=data_train.iloc[:,:-1]
data_train_y=data_train.iloc[:,-1]
# print(data_train_x.columns)

Lr=LogisticRegression()
Lr.fit(data_train_x,data_train_y)

data_predict=data[data['Survived']==-1].drop(['Survived'],axis=1)
data_predict_x=data_predict.drop(['PassengerId'],axis=1)
# print(data_predict_x.columns)

label=Lr.predict(data_predict_x)

# standard_label=pd.read_csv(r"E:\MLdata\kaggle_titanic\gender_submission.csv")["Survived"]
# print(np.sum(standard_label==label)/standard_label.shape[0])

data_predict.insert(data_predict.columns.size,"Survived",label)
df=pd.DataFrame(data=data_predict.loc[:,['PassengerId',"Survived"]].values,columns=["PassengerId","Survived"])
df.to_csv(r"E:\MLdata\kaggle_titanic\res\t2.csv",index=False)      

构造特征

特征构造主要考虑如下方面:

  • 数值特征的非线性因素,如对一些数值特征进行指数放大、缩小
  • 特征与特征之间的关联关系

由于儿童更能得到照顾,所以构造特征:

data_train['isChild']=(data_train['Age']<=10).astype(int)
# data_train['isChild'][:3]
# 0    0
# 1    0
# 2    0
# Name: isChild, dtype: int32      

年龄越大越不易生存,所以放大年龄:

data_train['Age']=data_train['Age']*data_train['Age']      

考虑几等舱(比如一等)和年轻的更容易生存,故构造特征Age∗Class

A

g

e

C

l

a

s

s

data_train['Age_Pclass']=data_train['Age']*data_train['Pclass']      
import sklearn.preprocessing as preprocessing
scaler=preprocessing.StandardScaler()
data_train['Age']=scaler.fit_transform(data_train['Age'].values.reshape(-1,1))
data_train['Age_Pclass']=scaler.fit_transform(data_train['Age_Pclass'].values.reshape(-1,1))      

继续阅读