【机器学习】泰坦尼克号 -3 -数据清洗

特征工程和数据清洗

当我们得到一个具有特征的数据集时,是不是所有的特性都很重要?可能有许多冗余的特征应该被消除,我们还可以通过观察或从其他特征中提取信息来获得或添加新特性。

年龄特征:

正如我前面提到的,年龄是连续的特征,在机器学习模型中存在连续变量的问题。

如果我说通过性别来组织或安排体育运动,我们可以很容易地把他们分成男女分开。

如果我说按他们的年龄分组,你会怎么做?如果有30个人,可能有30个年龄值。

我们需要对连续值进行离散化来分组。

好的,乘客的最大年龄是80岁。所以我们将范围从0-80成5箱。所以80/5=16。

data['Age_band']=0
data.loc[data['Age']<=16,'Age_band']=0
data.loc[(data['Age']>16)&(data['Age']<=32),'Age_band']=1
data.loc[(data['Age']>32)&(data['Age']<=48),'Age_band']=2
data.loc[(data['Age']>48)&(data['Age']<=64),'Age_band']=3
data.loc[data['Age']>64,'Age_band']=4
data.head(2)

在这里插入图片描述

data['Age_band'].value_counts().to_frame().style.background_gradient(cmap='summer')#checking the number of passenegers in each band

在这里插入图片描述

sns.factorplot('Age_band','Survived',data=data,col='Pclass')
plt.show()

在这里插入图片描述
生存率随年龄的增加而减少,不论Pclass。

Family_size:家庭总人数

光看兄弟姐妹和老人孩子看不太直接,咱们直接看全家的人数

data['Family_Size']=0
data['Family_Size']=data['Parch']+data['SibSp']#family size
data['Alone']=0
data.loc[data.Family_Size==0,'Alone']=1#Alone

f,ax=plt.subplots(1,2,figsize=(18,6))
sns.factorplot('Family_Size','Survived',data=data,ax=ax[0])
ax[0].set_title('Family_Size vs Survived')
sns.factorplot('Alone','Survived',data=data,ax=ax[1])
ax[1].set_title('Alone vs Survived')
plt.close(2)
plt.close(3)
plt.show()

在这里插入图片描述
family_size = 0意味着passeneger是孤独的。显然,如果你是单独或family_size = 0,那么生存的机会很低。家庭规模4以上,机会也减少。这看起来也是模型的一个重要特性。让我们进一步研究这个问题。

扫描二维码关注公众号,回复: 10133458 查看本文章
sns.factorplot('Alone','Survived',data=data,hue='Sex',col='Pclass')
plt.show()

在这里插入图片描述

船票价格

因为票价也是连续的特性,所以我们需要将它转换为数值。

pandas.qcut

data['Fare_Range']=pd.qcut(data['Fare'],4)
data.groupby(['Fare_Range'])['Survived'].mean().to_frame().style.background_gradient(cmap='summer_r')

在这里插入图片描述

如上所述,我们可以清楚地看到,船票价格增加生存的机会增加。

data['Fare_cat']=0
data.loc[data['Fare']<=7.91,'Fare_cat']=0
data.loc[(data['Fare']>7.91)&(data['Fare']<=14.454),'Fare_cat']=1
data.loc[(data['Fare']>14.454)&(data['Fare']<=31),'Fare_cat']=2
data.loc[(data['Fare']>31)&(data['Fare']<=513),'Fare_cat']=3
sns.factorplot('Fare_cat','Survived',data=data,hue='Sex')
plt.show()

在这里插入图片描述
显然,随着fare_cat增加,存活的几率增加。随着性别的变化,这一特性可能成为建模过程中的一个重要特征。

将字符串值转换为数字
因为我们不能把字符串一个机器学习模型

data['Sex'].replace(['male','female'],[0,1],inplace=True)
data['Embarked'].replace(['S','C','Q'],[0,1,2],inplace=True)
data['Initial'].replace(['Mr','Mrs','Miss','Master','Other'],[0,1,2,3,4],inplace=True)

去掉不必要的特征

名称>我们不需要name特性,因为它不能转换成任何分类值

年龄——>我们有age_band特征,所以不需要这个

票号–>这是任意的字符串,不能被归类

票价——>我们有fare_cat特征,所以不需要

船仓号——>这个也不要没啥含义

passengerid -->不能被归类

data.drop(['Name','Age','Ticket','Fare','Cabin','Fare_Range','PassengerId'],axis=1,inplace=True)
sns.heatmap(data.corr(),annot=True,cmap='spring_r',linewidths=0.2,annot_kws={'size':20})
fig=plt.gcf()
fig.set_size_inches(18,15)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.show()

在这里插入图片描述

现在以上的相关图,我们可以看到一些正相关的特征。他们中的一些人sibsp和family_size和干燥family_size和一些负面的孤独和family_size。

发布了116 篇原创文章 · 获赞 10 · 访问量 1334

猜你喜欢

转载自blog.csdn.net/weixin_44727383/article/details/105053333