• 数据的预处理


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

      预处理主要使用了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,欢迎分享,转载请保留出处
  • 相关阅读:
    java的构造方法 java程序员
    No result defined for action cxd.action.QueryAction and result success java程序员
    大学毕业后拉开差距的真正原因 java程序员
    hibernate的回滚 java程序员
    验证码 getOutputStream() has already been called for this response异常的原因和解决方法 java程序员
    浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓 java程序员
    你平静的生活或许会在某个不可预见的时刻被彻底打碎 java程序员
    Spring配置文件中使用ref local与ref bean的区别. 在ApplicationResources.properties文件中,使用<ref bean>与<ref local>方法如下 java程序员
    poj1416Shredding Company
    poj1905Expanding Rods
  • 原文地址:https://www.cnblogs.com/NSGUF/p/7861504.html
Copyright © 2020-2023  润新知