沉船生还概率预测
作者:互联网
导入数据
测试集的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