机器学习之数据预处理

机器学习之数据预处理机器学习之数据预处理

一. 数据预处理
1)导入主要的库,pandas数据处理库,Numpy数学运算库。
2)导入数据集,数据集的格式有很多,json,csv,txt,等
以csv为例,通过pandas读取。
3)数据集中会出现很多问题,例如缺失值,异常值,会影响模型的准确率,所以需要对这些值进行处理。这里会用到sklearn库,sklearn.preprocessing中的Imputer中完成。
4)处理标签值,如果是分类问题,类别需要转化成数字,作为模型的目标值。这里使用的是sklearn.preprocesing中的LabelEncoder。
5)特征进行缩放,不同的特征值可能会出现差距过大的问题,所以需要使用特征的标准化或者是归一化,导入sklearn.preprocessing中的StandardScalar。
6)将数据集进行拆分,按照一定的百分比进行划分成训练集和测试集。这里使用的是sklearn.crossvalidation中的train_test_split()方法。

PS:
1.缺失值该如何处理,单纯的使用中间值或者是平均值替换,是否可以有好的结果。
2.特征缩放问题,为什么不同特征值,会出现问题。
3.如果只使用归一化或者是标准化,是否是影响原始特征所包含的信息,是否意味着对所有的特征值在权重方面一视同仁。

二. 代码

  1. 导入库
    import numpy as np
    import pandas as pd

  2. 导数数据
    dataset = pd.read_csv(‘Data.csv’)//读取csv文件
    X = dataset.iloc[ : , :-1].values//.iloc[行,列]
    Y = dataset.iloc[ : , 3].values
    // : 全部行 or 列;[a]第a行 or 列
    // [a,b,c]第 a,b,c 行 or 列

  3. 处理缺失值
    from sklearn.preprocessing import Imputer
    imputer = Imputer(missing_values = “NaN”, strategy = “mean”, axis = 0)
    imputer = imputer.fit(X[ : , 1:3])
    X[ : , 1:3] = imputer.transform(X[ : , 1:3])
    sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)
    参数说明:
    missing_values :缺失值可以是整数或者是NaN。
    stategy:替换的策略,默认是使用均值“mean”
    1)如果是mean,用特征列的均值替换
    2)如果是median,用特征列的中位数替换
    3)如果是most_frequent时,用特征列的众数替换
    axis:指定是行还是列。
    copy:默认值为True,表示不会再原数据集上进行修改,设置为Flase时,直接会修改。如果是下面的情况,设置Flase时,也不会就地修改
    1)X不是浮点值数组
    2)X稀疏且missing_value = 0
    3)axis = 0 X是CRS稀疏矩阵列压缩
    4)axis = 1 X是CSC稀疏矩阵行压缩

  4. 转换分类数据标签
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder
    labelencoder_X = LabelEncoder()
    X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
    onehotencoder = OneHotEncoder(categorical_features = [0])
    X = onehotencoder.fit_transform(X).toarray()
    labelencoder_Y = LabelEncoder()
    Y = labelencoder_Y.fit_transform(Y)

  5. 拆分数据
    from sklearn.model_selection import train_test_split
    X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)

  6. 归一化数据
    from sklearn.preprocessing import StandardScaler
    sc_X = StandardScaler()
    X_train = sc_X.fit_transform(X_train)
    X_test = sc_X.transform(X_test)

参考:
https://github.com/MLEveryday/100-Days-Of-ML-Code/blob/master/Code/Day 1_Data_Preprocessing.md
https://blog.csdn.net/weixin_38656890/article/details/80849334