预测
如下代码,使用逻辑回归生存预测。
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))