第2关:数据预处理 — 标准化

本关任务

在前一关卡,我们已经学会了使用sklearn导入数据,然而原始数据总是比较杂乱、不规整的,直接加载至模型中训练会影响预测效果。本关卡,将学会使用sklearn对导入的数据进行预处理。
相关知识

原始数据存在的几个问题:不一致、重复、含噪声、维度高。数据挖掘中,数据预处理包含数据清洗、数据集成、数据变换和数据归约几种方法,在这里不过多叙述预处理方法细节,接下来将简单介绍如何通过调用sklearn中的模块进行数据预处理。

sklearn.preprocessing 模块提供很多公共的方法,将原始不规整的数据转化为更适合分类器的具有代表性的数据。一般说来,使用标准化后的数据集训练学习模型具有更好的效果。

数据标准化的方法有很多种,常用的有“最小—最大标准化”、“Z-score标准化”等等。经过上述标准化处理,各属性值都处于同一个数量级别上,可以进行综合数据分析。   

Z-score 标准化
这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用Z-score标准化到x'。
Z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况,其公式为:
新数据=(原数据-均值)/标准差

sklearn.preprocessing.scale函数,可以直接将给定数据进行标准化。

标准化处理后数据的均值和方差:

sklearn.preprocessing.StandardScaler类实现了Transformer接口,可以保存训练数据中的参数(均值mean_、缩放比例scale_),并能将其应用到测试数据的标准化转换中。

将标准化转换器应用到新的测试数据:

min-max 标准化
min-max标准化方法是对原始数据进行线性变换。设minA和maxA分别为属性A的最小值和最大值,将A的一个原始值x通过min-max标准化映射成在区间[0,1]中的值x',其公式为:
新数据=(原数据-极小值)/(极大值-极小值)

sklearn.preprocessing.MinMaxScaler将属性缩放到一个指定的最大和最小值(通常是1-0)之间。
MinMaxScaler中可以通过设置参数feature_range=(min, max)指定最大最小区间。其具体的计算公式为:

    X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
    X_scaled = X_std * (max - min) + min

将标准化缩放应用到新的测试数据:
编程要求

本关任务希望对于California housing数据集进行标准化转换。
代码中已通过fetch_california_housing函数加载好了数据集,California housing数据集包含8个特征,分别是['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'],可通过dataset.feature_names访问数据具体的特征名称,通过在上一关卡的学习,相信大家对于原始数据的查看应该比较熟练了,在这里不过多说明。

本次任务只对California housing数据集中的两个特征进行操作,分别是第一个特征MedInc,其数据服从长尾分布;第6个特征AveOccup,数据中包含大量离群点。

本关具体分成为几个子任务:
1.使用MinMaxScaler对特征数据X进行标准化转换,并返回转换后的特征数据的前5条。
要补充的代码块如下:

    def getMinMaxScalerValue():
        '''
        对特征数据X进行MinMaxScaler标准化转换,并返回转换后的数据前5条
        返回值:
        X_first5 - 数据列表
        '''
        X_first5 = []
        #   请在此添加实现代码   #
        # ********** Begin *********#
        # ********** End **********#
        return X_first5

2.使用scale对目标数据y进行标准化转换,并返回转换后的前5条数据。
要补充的代码块如下:

    def getScaleValue():
        '''
            对目标数据y进行简单scale标准化转换,并返回转换后的数据前5条
            返回值:
            y_first5 - 数据列表
            '''
        y_first5 = []
        #   请在此添加实现代码   #
        # ********** Begin *********#
        # ********** End **********#
        return y_first5

3.使用StandardScaler对特征数据X的进行标准化转换,并返回转换后的均值和缩放比例值。
要补充的代码块如下:

    def getStandardScalerValue():
        '''
        对特征数据X进行StandardScaler标准化转换,并返回转换后的数据均值和缩放比例
        返回值:
        X_mean - 均值
        X_scale - 缩放比例值
        '''
        X_mean = None
        X_scale = None
        #   请在此添加实现代码   #
        #********** Begin *********#
        #********** End **********#
        return X_mean,X_scale

测试说明

本关卡的测试数据来自./step4/testDataPreprocess.py文件,平台将比对您所编写函数的返回值与正确的数值,只有所有数据全部计算正确才能进入下一关。

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import scale
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import fetch_california_housing
'''
Data descrption:
The data contains 20,640 observations on 9 variables.
This dataset contains the average house value as target variable
and the following input variables (features): average income,
housing average age, average rooms, average bedrooms, population,
average occupation, latitude, and longitude in that order.
dataset : dict-like object with the following attributes:
    dataset.data : ndarray, shape [20640, 8]
        Each row corresponding to the 8 feature values in order.
    dataset.target : numpy array of shape (20640,)
        Each value corresponds to the average house value in units of 100,000.
    dataset.feature_names : array of length 8
        Array of ordered feature names used in the dataset.
    dataset.DESCR : string
        Description of the California housing dataset.
'''
dataset = fetch_california_housing("./step4/")
X_full, y = dataset.data, dataset.target
#抽取其中两个特征数据
X = X_full[:, [0, 5]]
def getMinMaxScalerValue():
    '''
    对特征数据X进行MinMaxScaler标准化转换,并返回转换后的数据前5条
    返回值:
    X_first5 - 数据列表
    '''
    X_first5 = []
    #   请在此添加实现代码   #
    # ********** Begin *********#
    X_first5 = MinMaxScaler().fit_transform(X)
    X_first5 = X_first5[:5]

    # ********** End **********#
    return X_first5
def getScaleValue():
    '''
        对目标数据y进行简单scale标准化转换,并返回转换后的数据前5条
        返回值:
        y_first5 - 数据列表
        '''
    y_first5 = []
    #   请在此添加实现代码   #
    # ********** Begin *********#
    y_first5 = scale(y)
    y_first5 = y_first5[:5]
    # ********** End **********#
    return y_first5
def getStandardScalerValue():
    '''
    对特征数据X进行StandardScaler标准化转换,并返回转换后的数据均值和缩放比例
    返回值:
    X_mean - 均值
    X_scale - 缩放比例值
    '''
    X_mean = None
    X_scale = None
    #   请在此添加实现代码   #
    #********** Begin *********#
    scale = StandardScaler().fit(X)
    X_mean = scale.mean_
    X_scale = scale.scale_

    #********** End **********#
    return X_mean,X_scale

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值