• 数据的预处理


      机器学习算法无法理解原始数据,所以需对原始数据进行预处理,常用预处理如下:

      预处理主要使用了preprocessing包,所以需对该包进行导入:

    import numpy as np
    from sklearn import preprocessing
    data=np.array([
            [3,-1.5,2,-5.4],
            [0,4,-0.3,2.1],
            [1,3.3,-1.9,-4.3]
            ])

      1.均值移除(Mean removal) 

    #将特征数据的分布调整成标准正太分布,也叫高斯分布,
    #也就是使得数据的均值维0,方差为1.标准化是针对每一列而言的
    #方法一
    data_standardized=preprocessing.scale(data)
    print('Mean=',data_standardized.mean(axis=0))#特征均值几乎为0
    print('Std=',data_standardized.std(axis=0))#标准差为1
    #方法二
    scaler=preprocessing.StandardScaler().fit(data)
    print('Mean=',scaler.transform(data).mean(axis=0))#特征均值几乎为0
    print('Std=',scaler.transform(data).std(axis=0))#标准差为1

      2.范围缩放(Scaling)

    #为了对付那些标准差相当小的特征并且保留下稀疏数据中的0值
    #方法一:计算公式如下:
    #X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
    #X_scaled = X_std / (max - min) + min
    data_minmax_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
    data_scaled = data_minmax_scaler.fit_transform(data)
    print("Min max scaled data:", data_scaled)
    #方法二:特征中绝对值最大的那个数为1,其他数以此维标准分布在[[-1,1]之间
    max_abs_scaler = preprocessing.MaxAbsScaler()
    x_train_maxsbs = max_abs_scaler.fit_transform(data)
    print("Max abs scaled data:", x_train_maxsbs)

      3.归一化(Normalization)

    # 正则化:保证每个特征向量的值都缩放到相同的数值范围内,
    #提高不同特征特征数据的可比性,如数据有许多异常值可使用此方法
    #方法一:第二个参数可谓l1与l2,最常用为调整到l1范数,使所有特征向量之和为1
    data_normalized = preprocessing.normalize(data, norm='l1')
    print("
    L1 normalized data:
    ", data_normalized)
    #方法二:
    normalizer = preprocessing.Normalizer(copy=True, norm='l2').fit(data)#创建正则器
    normalizer.transform(data)

           4.二值化(Binarization)

    # 将数值型的特征数据转换成布尔类型的值
    # 方法一
    data_binarized = preprocessing.Binarizer(threshold=1.4).transform(data)#比1.4大的为1,小的为0
    print("
    Binarized data:
    ", data_binarized)
    #方法二:
    binarizer = preprocessing.Binarizer(threshold=0)
    print("
    Binarized data:
    ", binarizer.transform(data)) 

      5.独热编码(One-Hot Encoding)

    # http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
    encoder = preprocessing.OneHotEncoder()
    encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4, 3]])
    encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
    print("Encoded vector:", encoded_vector)
    print("_values_:", encoder.n_values_)#值的每个特征的最大数量。
    print("Encoded vector:", encoder.feature_indices_)

      6.弥补缺失值

    #
    imp = preprocessing.Imputer(missing_values='NaN', axis=0)#NaN可换成其他
    imp.fit([[1, 2], [np.nan, 3], [7, 6]])
    x = [[np.nan, 2], [6, np.nan], [7, 6]]
    print(imp.transform(x))#填入(1+7)/2和(2+3+6)/3

      7.生成多项式的特征

    # 生成多项式的特征,得到高阶相互作用特征
    poly = preprocessing.PolynomialFeatures(2)# 创建2次方的多项式
    print(poly.fit_transform(data))

      8.定制变压器

    #定制变压器:辅助数据清洗或处理
    transformer = preprocessing.FunctionTransformer(np.log1p)
    print(transformer.transform(np.array([[0, 1], [2, 3]])))

    参考文献:http://blog.csdn.net/sinat_33761963/article/details/53433799

         http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

         http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

         Python机器学习经典实例

    文章来源:NSGUF,欢迎分享,转载请保留出处
  • 相关阅读:
    Roslyn 编译器和RyuJIT 编译器
    go语言---defer
    go语言---for
    go语言--time.After
    go语言---for range
    用gulp打包带参数资源做法与asp.net/java项目结合的自动构建方案探讨
    JQuery判断元素是否存在
    gulp实现打包js/css/img/html文件,并对js/css/img文件加上版本号
    gulp同步执行任务
    gulp-rev同时将js和css文件写在一个rev-manifest.json文件里面的方式探讨
  • 原文地址:https://www.cnblogs.com/NSGUF/p/7861504.html
Copyright © 2020-2023  润新知