其他分享
首页 > 其他分享> > 沉船生还概率预测

沉船生还概率预测

作者:互联网

导入数据

测试集的data和target在两个csv里,我们先将它们合并成一个csv。训练集为了方便处理,我们将survived标签方杂质最后一列。

1 import pandas as pd
2 train=pd.read_csv('train.csv',index_col=0)
3 sub=pd.read_csv('gender_submission.csv',index_col=0)
4 test=pd.read_csv('test.csv',index_col=0)
5 # 合并测试集的data和target
6 test['Survived']=sub['Survived']
7 train_target=train['Survived'] 8 train.drop('Survived',axis=1,inplace=True) 9 train['Survived']=train_target

数据分析

训练集缺失率

1 # 数值型特征
2 train_number_tz = train.iloc[:,0:-1].dtypes[train.dtypes != "object"].index
3 # 字符型特征
4 train_str_tz = train.iloc[:,0:-1].dtypes[train.iloc[:,0:-1].dtypes == "object"].index
5 # 缺失率计算
6 miss = 100 * train.loc[:, train_number_tz].isnull().mean()
7 train_num_rank=miss[miss.values > 0].sort_values(ascending=False)
8 miss = 100 * train.loc[:, train_str_tz].isnull().mean()
9 train_str_rank=miss[miss.values > 0].sort_values(ascending=False)

训练集数值型特征缺失率排行如图1-1,字符型特征缺失率如图1-2

     图1-1             图1-2

测试集缺失率

1 # 数值型特征
2 test_number_tz = test.iloc[:,0:-1].dtypes[test.dtypes != "object"].index
3 # 字符型特征
4 test_str_tz = test.iloc[:,0:-1].dtypes[test.iloc[:,0:-1].dtypes == "object"].index
5 # 缺失率计算
6 miss = 100 * test.loc[:, test_number_tz].isnull().mean()
7 test_num_rank=miss[miss.values > 0].sort_values(ascending=False)
8 miss = 100 * test.loc[:, test_str_tz].isnull().mean()
9 test_str_rank=miss[miss.values > 0].sort_values(ascending=False)

训练集数值型特征缺失率排行如图1-3,字符型特征缺失率如图1-4

       图1-3           图1-4

数据处理

缺失值处理

数值型数据我们可以采用中位数或者平均值填充。字符型数据观察数据后发现,训练集和测试集的Cabin特征缺失率挺高,可以直接去除此属性,测试集的Embarked特征缺失率很低,可以直接去除相关数据。

1 #数值型缺失值用平均值填充
2 train[train_number_tz]=train[train_number_tz].fillna(train[train_number_tz].mean())
3 test[test_number_tz]=test[test_number_tz].fillna(test[test_number_tz].mean())
4 #特征Cabin缺失率过高直接删除此特征
5 train.drop('Cabin',axis=1,inplace=True)
6 test.drop('Cabin',axis=1,inplace=True)
7 train.dropna(axis=0,inplace=True)

无用特征处理

根据主观常识,人名和票价对生还率影响不大,但对它们编码却极其复杂,所以应该去除这两个特征。

1 train.drop('Ticket',axis=1,inplace=True)
2 test.drop('Ticket',axis=1,inplace=True)
3 train.drop('Name',axis=1,inplace=True)
4 test.drop('Name',axis=1,inplace=True)

数据分割

1 train_data=train.iloc[:,0:-1]
2 test_data=test.iloc[:,0:-1]
3 train_target=train['Survived']
4 test_target=test['Survived']

哑编码

我们对字符型数据进行哑编码,然后再和数值型数据结合组成最终数据集

1 # 提取字符特征进行编码
2 train_data_strout=train_data[train_str_tz]
3 traincode=pd.get_dummies(train_data_strout)
4 test_data_strout=test_data[test_str_tz]
5 testcode=pd.get_dummies(test_data_strout)
6 # 将编码后的数据和数值型数据结合组成最终数据
7 traindata_ult=pd.concat([train_data[train_number_tz],traincode],axis=1)
8 testdata_ult=pd.concat([test_data[test_number_tz],testcode],axis=1)

模型训练

决策树模型

1 from sklearn.tree import DecisionTreeClassifier
2 from sklearn import tree
3 #定义 决策树模型 
4 clf = DecisionTreeClassifier(criterion='entropy')
5 #在训练集上训练决策树模型
6 clf.fit(traindata_ult, train_target)

决策树模型评分如图2-1

 

 

           图2-1

随机森林分类器

1 # 使用随机森林分类器进行集成模型的训练以及预测分析。
2 from sklearn.ensemble import RandomForestClassifier
3 rfc = RandomForestClassifier()
4 rfc.fit(traindata_ult, train_target)
5 rfc.score(testdata_ult,test_target)

随机森林分类器评分如图2-2

 

           图2-2

梯度提升决策树进行集成模型

1 from sklearn.ensemble import GradientBoostingClassifier
2 gbc = GradientBoostingClassifier()
3 gbc.fit(traindata_ult, train_target)

梯度提升决策树进行集成模型评分如图2-3

 

           图2-3

 

标签:沉船,概率,tz,生还,data,number,train,test,miss
来源: https://www.cnblogs.com/ld66/p/15347270.html