返回

用机器学习预测泰坦尼克号乘客的生存率: 数据预处理和特征工程(第二部分)**

人工智能

数据预处理: 理解缺失值

在数据预处理中, 缺失值是不可避免的挑战. 缺失值是指数据集中缺失或未知的值, 可能由于各种原因造成. 了解缺失值并正确处理它们对于机器学习建模至关重要.

泰坦尼克号数据集中的缺失值

为了说明缺失值处理, 我们将使用泰坦尼克号数据集. 该数据集包含三个特征: "Age" (数值型), "Sex" 和 "Embarked" (字符型), 以及一个标签 "Survived" (字符型).

import pandas as pd

# 加载泰坦尼克号数据集
df = pd.read_csv('titanic.csv')

# 检查缺失值
df.isnull().sum()

输出:

Age           177
Cabin       891
Embarked       2
Name           0
Parch           0
PassengerId    0
Pclass          0
Sex             0
SibSp           0
Survived       0
Ticket          0
Fare            0

如上所示, "Age" 和 "Embarked" 特征存在缺失值, 分别为 177 个和 2 个.

缺失值处理方法

处理缺失值有几种方法, 取决于缺失值的模式和潜在原因. 常见方法包括:

  • 删除缺失值: 如果缺失值的数量很少, 并且它们不太可能对模型产生显著影响, 则可以简单地删除它们.
  • 均值/中值插补: 对于数值型特征, 缺失值可以用该特征的均值或中值来代替.
  • 众数插补: 对于字符型特征, 缺失值可以用该特征中出现次数最多的值来代替.
  • K-最近邻插补: 缺失值可以用数据集中与该缺失值最接近的 K 个观测值的加权平均值来代替.
  • 模型预测: 缺失值可以用根据其他特征构建的模型预测值来代替.

泰坦尼克号数据集中缺失值的处理

对于泰坦尼克号数据集, 我们将使用均值插补来处理 "Age" 特征的缺失值, 并使用众数插补来处理 "Embarked" 特征的缺失值.

# 用均值插补 "Age" 缺失值
df['Age'].fillna(df['Age'].mean(), inplace=True)

# 用众数插补 "Embarked" 缺失值
df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)

结论

缺失值处理是数据预处理和特征工程中必不可少的步骤. 通过理解缺失值的模式和潜在原因, 并采用适当的处理方法, 我们可以确保数据更适合机器学习建模, 从而提高模型的预测准确性.