zoukankan      html  css  js  c++  java
  • 数据的预处理

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

      预处理主要使用了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,欢迎分享,转载请保留出处
  • 相关阅读:
    Candy leetcode java
    Trapping Rain Water leetcode java
    Best Time to Buy and Sell Stock III leetcode java
    Best Time to Buy and Sell Stock II leetcode java
    Best Time to Buy and Sell Stock leetcode java
    Maximum Subarray leetcode java
    Word Break II leetcode java
    Word Break leetcode java
    Anagrams leetcode java
    Clone Graph leetcode java(DFS and BFS 基础)
  • 原文地址:https://www.cnblogs.com/NSGUF/p/7861504.html
Copyright © 2011-2022 走看看