这并不好。所以,这是正确的方法。我们在数值特征culmen_length_mm、culmen_depth_mm、flipper_length_mm和body_mass_g中检测到缺失的数据。对于这些特征的插补值,我们将使用特征的平均值。对于分类特征"性别",我们使用最常见的值。我们是这样做的:
data = pd.read_csv('./data/penguins_size.csv')
data['culmen_length_mm'].fillna((data['culmen_length_mm'].mean()), inplace=True)
data['culmen_depth_mm'].fillna((data['culmen_depth_mm'].mean()), inplace=True)
data['flipper_length_mm'].fillna((data['flipper_length_mm'].mean()), inplace=True)
data['body_mass_g'].fillna((data['body_mass_g'].mean()), inplace=True)
data['sex'].fillna((data['sex'].value_counts().index[0]), inplace=True)
data.reset_index()
data.head()
观察上面提到的第三个示例现在的样子:
通常,数据不会丢失,但它的值无效。例如,我们知道对于"性别"特征,我们可以有两个值:女性和男性。我们可以检查我们是否有除此以外的值:
data.loc[(data['sex'] != 'female') & (data['sex'] != 'MALE')]
事实证明,我们有一个记录具有此功能的值".",这是不正确的。我们可以将这些实例观察为缺失数据,并删除或替换它们:
data = data.drop([336])
data.reset_index()
2. 分类编码
改进预测的一种方法是在处理类别变量时应用聪明的方法。顾名思义,这些变量具有离散值,并表示某种类别或类。例如,颜色可以是分类变量("红色"、"蓝色"、"绿色")。
挑战在于将这些变量纳入数据分析,并将其与机器学习算法结合使用。一些机器学习算法支持分类变量,无需进一步操作,但有些则不支持。这就是我们使用分类编码的原因。在本教程中,我们将介绍几种类型的分类编码,但在继续之前,让我们将这些变量从数据集中提取到一个单独的变量中,并将它们标记为分类类型:
data["species"] = data["species"].astype('category')
data["island"] = data["island"].astype('category')
data["sex"] = data["sex"].astype('category')
data.dtypes
species category
island category
culmen_length_mm float64
culmen_depth_mm float64
flipper_length_mm float64
body_mass_g float64
sex category
categorical_data = data.drop(['culmen_length_mm', 'culmen_depth_mm', 'flipper_length_mm', \
'body_mass_g'], axis=1)
categorical_data.head()
好了,现在我们准备好了。我们从最简单的编码形式标签编码开始。
2.1 标签编码标签编码将每个分类值转换为某个数字。例如,"物种"特征包含 3 个类别。我们可以将值 0 赋给 Adelie,1 赋给 Gentoo,2 赋给 Chinstrap。要执行此技术,我们可以使用熊猫:
categorical_data["species_cat"] = categorical_data["species"].cat.codes
categorical_data["island_cat"] = categorical_data["island"].cat.codes
categorical_data["sex_cat"] = categorical_data["sex"].cat.codes
categorical_data.head()