Scikit-Learn 与 TensorFlow 机器学习实用指南 读书笔记(三)

六、准备数据(数据预处理)

首先分开特征(feature)和目标标签(label),以median_house_value为标签,其他为特征

train_housing = strat_train_set.drop("median_house_value", axis=1)
train_housing_labels = strat_train_set["median_house_value"].copy()

数据清理

①处理缺失值:三种方案:去掉含有缺失值的个体(dropna);去掉含有缺失值的特征(drop);

给缺失值补上一些值(0、平均数、中位数)(fillna)

Scikit-Learn  中对缺失值处理的类Imputer(只对实数值有效,需要先去除文本特征)

from sklearn.preprocessing import Imputer
imputer = Imputer(strategy="median")
housing_num = train_housing.drop("ocean_proximity", axis=1)

imputer.fit(housing_num)

②处理类别文本特征

由于文本特征不能做median等操作,所以需要将文本特征转换为实数特征,对应的类Scikit-Learn中的LabelEncoder,通过调用LabelEnconder类,在使用fit_transform()方法自动将文本特征编码

from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
housing_cat = train_housing["ocean_proximity"]
housing_cat_encoded = encoder.fit_transform(housing_cat)
print(housing_cat_encoded)

print(encoder.classes_)


由于0到1的距离比0到3的距离要近,所以这种数字编码暗含了0和1的相似性比0到3的相似性要强,然而事实
上并非如此,每个元素的相似性应趋于相等。如果该数字编码作为label,则只是一个标签,没有什么影响。但
是如果用于特征,则这种数字编码不适用,应该采用one hot编码(形式可以看下面的图),对应Scikit-Learn

中的类为OneHotEncoder

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder()
housing_cat_1hot = encoder.fit_transform(housing_cat_encoded.reshape(-1,1))

默认的输出结果为稀疏矩阵Scipy(sparse matrix),而不是Numpy,由于矩阵大部分为0,浪费空间,所以使
用稀疏矩阵存放,如果想看矩阵的具体样子,则用toarray()方法变为dense matrix(Numpy)

上述文本编码先经过数字编码再转为one hot编码用了两步,当然也可以一步到位,直接从文本编码到one

hot,对应Scikit-Learn中的类为LabelBinarizer

from sklearn.preprocessing import LabelBinarizer
encoder = LabelBinarizer()
#encoder = LabelBinarizer(sparse_output=True)

housing_cat_1hot = encoder.fit_transform(housing_cat)

要注意的是,不设参数sparse_output=True的话,默认输出的是Numpy矩阵。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值