北大青鸟:Python机器学习介绍 - 图文 下载本文

数据清理中最常用的技术是填充缺失数据。你可以用众数、平均数或中位数来填充缺失数据。选择这些数据没有绝对规则,你可以一一尝试,然后看看它们的表现如何。但是根据经验来讲,分类数据只能用众数,连续数据可以用中位数或平均数。所以我们用众数来填充登船地数据,用中位数来填充年龄数据。 train_df['Embarked'].fillna(train_df['Embarked'].mode()[0], inplace = True)

train_df['Age'].fillna(train_df['Age'].median(), inplace = True)

接下来的重要操作是删除数据,尤其针对大量缺失的数据。我们针对舱号数据进行以下处理:

drop_column = ['Cabin']

train_df.drop(drop_column, axis=1, inplace = True) 现在检查一下清理过的数据。

print('check the nan value in train data') print(train_df.isnull().sum())

完美!没有任何缺失数据了!这表示数据已经清理干净了。

特征工程

现在数据已经清理干净了。接下来我们要进行特征工程。

特征工程基本上就是根据当前可用数据发现特征或数据的技术。有几种方法可以实现这种技术。在很多时候这都是常识。

我们以登船地数据为例——这是用 Q、S 或 C 填充的数据。Python 库不能处理这个,因为它只能处理数字。所以你需要用所谓的独热向量化(One Hot Vectorization)来处理,它可以把一列变成三列。用 0 或 1 填充

Embarked_Q、Embarked_S 和 Embarked_C,来表示这个人是不是从这个港口出发的。

再以 SibSp 和 Parch 为例。这两列没有什么有趣的,但是你可能会想知道某个乘客有多少家人登上了这艘船。如果家人多的话可能会增加生存几率,因为他们可以互相帮助。从另一个角度说,单独登船的乘客可能很难生存下去。 因此你可以创建新的一列,这一列是成员数量(family size),family size = SibSp + Parch + 1(乘客自己)。

最后一个例子是以 bin 列为例的。由于你认为很难区分具有相似值的事物,所以这种操作创建了值范围(ranges of values),然后将多个值组合在一起。比如,5 岁和 6 岁的乘客之间有显著的差异吗?或者 45 和 46 岁的人之间有显著的差异吗?

这就是创建 bin 列的原因。也许就年龄而言,我们可以创建 4 列——幼儿(0~14 岁)、青少年(14~20 岁)、成年人(20~40 岁)以及年长的人(40 岁以上)。 编码如下: all_data = train_df for dataset in all_data :

dataset['FamilySize'] = dataset['SibSp'] + dataset['Parch'] + 1 import re

# Define function to extract titles from passenger names

def get_title(name):

title_search = re.search(' ([A-Za-z]+).', name) # If the title exists, extract and return it. if title_search:

return title_search.group(1) return \

# Create a new feature Title, containing the titles of passenger names for dataset in all_data:

dataset['Title'] = dataset['Name'].apply(get_title)

# Group all non-common titles into one single grouping \for dataset in all_data:

dataset['Title'] = dataset['Title'].replace(['Lady', 'Countess','Capt', 'Col','Don',

'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare') dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss') dataset['Title'] = dataset['Title'].replace('Ms', 'Miss')