Python数据分析 | 泰坦尼克逻辑回归(上):https://developer.aliyun.com/article/1512112
titleDf = pd.get_dummies(titleDf['title']) titleDf.head()
结果:
full = pd.concat([full,titleDf],axis=1) #添加one-hot编码产生的虚拟变量(dummy variable)到full中 full.head()
结果:
#对船舱号Cabin进行同样的one-hot编码处理 full['Cabin']=full['Cabin'].map(lambda c:c[0]) #取船舱号的首位做标识符 cabindf = pd.DataFrame() #存放提取后的特征 cabindf = pd.get_dummies(full['Cabin'],prefix='Cabin') #使用get_dummies进行one-hot编码,列名前缀是Cabin full = pd.concat([full,cabindf],axis=1) #添加one-hot编码产生的虚拟变量(dummy variable)到full中 full.drop('Cabin',axis=1,inplace=True) #将原Cabin列删除 full.head()
结果:
#家庭数据Parch、SibSp:对于家庭数据选择计算家庭人数的方法提取特征 familydf=pd.DataFrame() #存放提取后的特征 familydf['family_size']=full['SibSp']+full['Parch']+1 familydf['family_single']=familydf['family_size'].map(lambda a:1 if a==1 else 0) familydf['family_small']=familydf['family_size'].map(lambda a:1 if 2<=a<=4 else 0) familydf['family_large']=familydf['family_size'].map(lambda a:1 if 5<=a else 0) full = pd.concat([full,familydf],axis=1) #添加one-hot编码产生的虚拟变量(dummy variable)到full中 full.head()
结果:
full.info()
结果:
#查看相关性,使用corr生成相关系数矩阵 corrDf = full.corr() corrDf
结果:
#查看各个特征与生存情况的相关性 corrDf['Survived'].sort_values(ascending=False)
结果:
#特征选择 full_x=pd.concat([titleDf,pclassdf,familydf,full['Fare'],cabindf,embarkeddf,full['Sex']],axis=1) full_x.head()
结果:
print(full_x.shape)
结果:
#构建模型 #原始数据集有891条数据 sourceRow=891 #原始数据集特征 source_x=full_x.loc[0:sourceRow-1,:] #原始数据集标签 source_y=full.loc[0:sourceRow-1,'Survived'] #预测数据集特征 pre_x=full_x.loc[sourceRow:,:] #取sourceRow之后的数据 source_x.head()
结果:
#建立训练数据和测试数据 from sklearn.model_selection import train_test_split train_x,test_x,train_y,test_y=train_test_split(source_x,source_y,train_size=0.8) #数据集大小 print('原始数据集特征',source_x.shape, '训练数据集特征',train_x.shape, '测试数据集特征',test_x.shape) print('原始数据集标签',source_y.shape, '训练数据集标签',train_y.shape, '测试数据集标签',test_y.shape)
结果:
#导入机器算法 from sklearn.linear_model import LogisticRegression model=LogisticRegression() #创建逻辑回归模型 model.fit(train_x,train_y) #训练模型 #评估模型,查看正确率 model.score(test_x,test_y)
结果:可以看到这个正确率还是非常高的,可以用来后续的预测。
#通过机器学习模型,对预测数据生存情况进行预测 pre_y=model.predict(pre_x) #将预测结果转换为整数型 pre_y=pre_y.astype(int) #乘客ID passenger_ID=full.loc[sourceRow:,'PassengerId'] #乘客名字 passenger_Name=full.loc[sourceRow:,'Name'] #数据框:乘客ID,预测结果 preDf=pd.DataFrame({'PassengerId':passenger_ID,'Name':passenger_Name,'Survived':pre_y}) preDf.head()
结果:预测结果为乘客编号、乘客姓名与是否生存。
#将文件保存到本地 preDf.to_csv('tintanic_prd.csv',index=False)
参考资料: