机器学习之特征工程(1.1)

为什么我们要进行归一化/标准化?

  • 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征
  • 我们需要用到一些方法进行无量纲化,使不同规格的数据转换到同一规格

归一化:

from sklearn.preprocessing import MinMaxScaler
import pandas as pd

def minmax_demo():
    """
    归一化
    :return:
    """
    # 1、获取数据
    data = pd.read_csv(r"D:/machine learning/dating")
    data = data.iloc[:, :3]
    print("data:\n", data)

    # 2、实例化一个转换器类
    transfer = MinMaxScaler(feature_range=[0, 1])

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None

注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。解决方案如下:

标准化

    通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内;

  • 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
  • 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
from sklearn.preprocessing import StandardScaler
import pandas as pd

def stand_demo():
    """
    标准化
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]
    print("data:\n", data)

    # 2、实例化一个转换器类
    transfer = StandardScaler()

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    return None

在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

 

 

 

 

posted @ 2021-05-25 17:14  纵横捭阖行  阅读(53)  评论(0编辑  收藏  举报