Kaggle泰坦尼克之灾( 二 )


图上貌似看不出什么我们对他在处理
print(df[['SibSp','Survived']].groupby('SibSp').mean())
貌似有一个或者两个家人或者朋友的存活率跟高点,这应该也是影响是否被救的一个条件之一
查看船舱类型不同的获救情况
船舱类型的有效数据只有200多条不足全部数据的二分之一,我们将该数据舍弃
查看票的费用情况和获救的情况
明显可以看出价格高的被救的概率也达低价票的基本都死翘翘,船票价格也是影响被救的因素之一
在看了全部有的数据之后我们在对数据处理
1.首先就是缺失值处理
处理和数据
只缺失两个,所以用众数填充即可
在做数据操作前我们先将训练集和测试集合并
#合并数据集train_and_test = df.append(dt, sort=False) # 合并训练集与测试集PassengerId = test['PassengerId']train_and_test.shape
df.Embarked[df.Embarked.isnull() == True] = df.Embarked.dropna().mode().values
对Fare 用均值填充
其他数据采用森林模型预测填充
# 把已有的数值型特征取出来丢进Random Forest Regressor中age_df = train_and_test[['Age', 'Fare', 'Parch', 'SibSp', 'Pclass']]# 乘客分成已知年龄和未知年龄两部分known_age = age_df[age_df.Age.notnull()].valuesunknown_age = age_df[age_df.Age.isnull()].values# y即目标年龄y = known_age[:, 0]# X即特征属性值X = known_age[:, 1:]# fit到RandomForestRegressor之中rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)rfr.fit(X, y)# 用得到的模型进行未知年龄结果预测predictedAges = rfr.predict(unknown_age[:, 1::])# 用得到的预测结果填补原缺失数据train_and_test.loc[(train_and_test.Age.isnull()), 'Age'] = predictedAgestrain_and_test.info()
数据清洗,提取训练字段
因为逻辑回归建模时,需要输入的特征都是数值型特征,我们通常会先对类目型的特征因子化 。我们使用的””来完成这个工作,并拼接在原来的数据上
cols = ['Embarked', 'Sex', 'Pclass']train_and_test = pd.get_dummies(train_and_test, columns=cols, prefix_sep='__')
对于cabin的缺失值,我们将缺失值为0有值的为1
train_and_test.loc[train_and_test.Cabin.isnull(), 'Cabin'] = 'U0'train_and_test['Cabin'] = train_and_test['Cabin'].apply(lambda x : 0 if x == 'U0' else 1)
建模及模型评价
划分训练集和测试集
index = PassengerId[0] - 1train_and_test_drop = train_and_test.drop(['PassengerId', 'Name', 'Ticket'], axis=1)train_data = http://www.kingceram.com/post/train_and_test_drop[:index]test_data = train_and_test_drop[index:]train_X = train_data.drop(['Survived'], axis=1)train_y = train_data['Survived']test_X = test_data.drop(['Survived'], axis=1)test_y = dl['Survived']
随机森林
rfc = RandomForestClassifier()rfc.fit(train_X, train_y)pred_rfc = rfc.predict(test_X)accuracy_rfc = roc_auc_score(test_y, pred_rfc) print("随机森林的预测结果:", accuracy_rfc)
模型得分
逻辑回归
lr = LogisticRegression() # logit 逻辑回归lr.fit(train_X, train_y)pred_lr = lr.predict(test_X) accuracy_lr = roc_auc_score(test_y, pred_lr)print("逻辑回归的预测结果:", accuracy_lr)