记录从准研一假期自学PYTHON的全过程day40(归一化 标准化 缺失值处理)

164 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情

也是暑假自学python的第40天

今天继续昨天的学习:

对于数字型数据的学习,主要进行标准缩放,具体有两个方法:1.归一化2.标准化

归一化

归一化学习

特点:通过对原始数据进行变化把数据映射到[0,1]之间

公式:

所对应的区间为[0,1]

x=xmin/maxminx'=x-min/max-min

将区间变为[-1,1]

x=x(maxmin)+minx''=x'*(max-min)+min

归一化代码:

def mm():
    """
    归一化处理
    :return: NOne
    """
    # 归一化缺点 容易受极值的影响
    #feature_range代表特征值范围,一般设置为[0,1],或者[-1,1],默认是[0,1]
    mm = MinMaxScaler(feature_range=(-1, 1))

    data = mm.fit_transform([[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]])

    print(data)

    return None


mm()

输出的结果如下:

image.png

归一化更加容易通过梯度下降找到最优解,但是算法性能一般。

标准化

标准化学习:

特点:通过对原始数据进行变化把数据变化到均值为0,标准差为1的范围内。

公式:

x=xmean/σx’=x-mean/σ

mean为平均值,σ为标准差

算法:

def stand():
    """
    标准化缩放,不是标准正太分布,只均值为0,方差为1的分布
    :return:
    """
    std = StandardScaler()

    data = std.fit_transform([[1., -1., 3.], [2., 4., 2.], [4., 6., -1.]])

    print(data)
    print('-' * 50)
    print(std.mean_)
    print('-' * 50)
    print(std.var_)
    print(std.n_samples_seen_)  # 样本数
    print('-' * 50)

    data1 = std.fit_transform([[-1.06904497, -1.35873244, 0.98058068],
                               [-0.26726124, 0.33968311, 0.39223227],
                               [1.33630621, 1.01904933, -1.37281295]])
    # print(data1)  #这个并不是我们想看的,没意义
    # 均值
    print(std.mean_)
    # 方差
    print(std.var_)
    # 样本数
    print(std.n_samples_seen_)
    return None


stand()

输出的结果如下:

image.png

缺失值处理

缺失值首先填补为nan,然后调用接口:

将nan值填补为中值:im = SimpleImputer(missing_values=np.nan, strategy='median')

也可以填补为平均值:im = SimpleImputer(missing_values=np.nan, strategy='mean')

def im():
    """
    缺失值处理
    :return:NOne
    """
    # NaN, nan,缺失值必须是这种形式,如果是?号(或者其他符号),就要replace换成这种
    im = SimpleImputer(missing_values=np.nan, strategy='median')

    data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6], [3, 2]])

    print(data)

    return None

im()

输出的结果如下: