数据清理
机器学习算法难以在缺失的特征值上工作,所以我们要创建一些函数处理那些缺失的特征值。
1.放弃相应的区域,抛弃缺失数据的样本
2.放弃整个特征
3.将缺失的值填充为特定的值(平均数、中位数、0)
可以使用sklearn中的SimpleImputer填充中位数。如下例,设置超参数strategy="median",然后用drop函数抛去文本类型的特征(这里是"ocean_proximity"),然后用 fit()函数 对数据进行使用。
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy="median")
housing_num = housing.drop("ocean_proximity", axis=1)#去除文本属性
imputer.fit(housing_num)
检验一下,imputer填充的确实是中位数:
转换器
估算器estimator:能根据数据集对某些参数进行估算的任意对象都可称为估算器。如imputer就是一个估算器。估算由 fit() 执行。
转换器transformer:有些估算器不仅可以估算数据集,还可以转换数据集。由transformer()方法和待转换数据一起执行,例如 fit() 后用 transformer()、或者直接用 fit_transformer()
流水线
Pipeline流水线将许多算法模型串联起来,可以用于把多个估算器estamitors串联成一个整体。
比如将特征提取、归一化、分类器组织在一起形成一个典型的机器学习问题工作流。Pipleline中最后一个之外的所有估算器estimators都必须是变换器(transformers),最后一个估算器estimator可以是任意类型(transformer,classifier,regresser)。如若最后一个estimator是个分类器,则整个pipeline就可以作为分类器使用。
例子:下列代码可将数值型数据列表数据清理、特征缩放。imputer将缺失的值填为其他值的中位数,std_scaler将数值标准化缩放。
import sklearn
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
num_pipeline = Pipeline([
('imputer', SimpleImputer(strategy="median")),
('attribs_adder', CombinedAttributesAdder()),
('std_scaler', StandardScaler()),
])
housing_num_tr = num_pipeline.fit_transform(housing_num)
housing_num_tr