机器学习中数据集的加载和预处理

机器学习使用样本数据集训练模型:

  • 如果数据集出现问题,那么训练结果也会出现问题(garbage in, garbage out.);
  • 通常需要对数据集进行检查,对有问题的数据集进行预处理;

加载并浏览数据集

举例:

```
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

house = pd.read_csv('data\\boston.csv')
print(house.shape)
```
数据项说明
  • CRIM:城镇人均犯罪率;
  • ZN:住宅用地超过25000的比例;
  • INDUS:城镇非零售商用土地的比例;
  • CHAS:查理斯河空变量(如果边界是河流,则为1;否则为0);
  • NOX:一氧化氮浓度;
  • RM:住宅平均房间数;
  • AGE:1940年之前建成的自用房屋比例;
  • DIS:到波士顿五个中心区域的加权距离;
  • RAD:辐射性公路的接近指数;
  • TAX:每10000美元的全值财产税率;
  • PTRATIO:城镇师生比例;
  • B:1000(Bk-0.63)^ 2,其中 Bk 指代城镇中黑人的比例;
  • LSTAT:人口中地位低下者的比例;
  • MEDV:自住房的平均房价,以千美元为单位;

对数据的预处理

  • 预期结果:
    • 无缺失值、重复值;、
    • 所包含的特征项都是经过相关性分析筛选出来的,此外还有预测目标;
    • 非数值型特征使用独热编码;
    • 数值型特征经过标准化处理;
缺失值(NaN)
  • drop:参考pandas部分笔记
  • fill:参考pandas部分笔记
    • df.fillna(method=“ffill”) 填充相邻的数据;
  • interpolate;插入值
    • 举例
      df = df.interpolate(method='linear')
      
      根据前后数据,线性填充缺失数据;
重复值(duplicate)

重复的样本数据,没有处理意义;

df.drop_duplicates()
特征选择
  • 原则:
    • 特征应尽量选择与目标线性相关,否则属于无用特征;
    • 各特征项之间应当尽量不相关,否则属于冗余特征;
  • 使用皮尔逊相关系数作为统计指标:
    • 系数:
      • 如果系数大于零:两个随机变量正相关(同增同减);
      • 如果系数小于零,表示负相关;
      • 系数等于零表示系数不相关;
      • 相关系数绝对值越大则相关程度越大;
    • 计算公式

      ρ = Cov(X,Y)/σ_x * σ_y
      • Cov(X,Y)为X与Y的协方差,分母为X、Y的标准差;
      • pandas中使用
      df.corr(method='pearson')
      
      可计算各个特征项之间的相关系数;
  • 筛选后得到的特征项重新构成新数据集;
非数值型特征的编码
  • 布尔型特征:
    • 对于二元性特征(是否、有无、男女)可转换为0-1编码;
    • pandas中的series类的map()方法可以将二元特征映射为布尔型;
  • 离散型类别特征:
    • 比如:籍贯(北京、上海、山东……)、颜色(红、绿、蓝……)
    • 当按顺序使用整数进行编码时会将本来无序的序列变成有序序列,可能会对后续机器学习造成干扰;
    • 将其分解成n个0-1形式的数据;
      • 独热编码(one-hot):是否北京、是否上海、是否山东……
数值型特征的标准化

尽量消除量纲、同一不同特征项的取值范围,这就是数据标准化(缩放);

  • 取值范围不同的原因:
    • 数据集不同特征项之间的取值范围可能存在较大差异;
    • 不同量纲也会到取值范围;
  • 取值范围不同造成的影响:
    • 取值范围的差异会造成特征项之间的不平等;
  • 常用方法:调用sklearn.preprocessing模块
    • Min-Max标准化

      min = min_x_i , max = max_x_i

      m_i = (x_i - min)/(max - min)

      此时m_i∈[0, 1]
      • sklearn库中的preprocessing.MinMaxScaler模块;
        mmScaler = MinMaxScaler()
        m = mmScaler.transform(df)["X", "Y"]
        new_df = pd.dataframe(m, columns=["X", "Y"])
        
    • Z-score标准化:

      将数据转化为Z分数;

      对原始数据实施了去中心化(使均值为0)和归一化(使方差为1)
      • 首先计算样本点的均值μ_x和方差σ_x;
      • 使用公式:z_i = (x_i - μ_x)/σ_x
      • sklearn库中的preprocessing.StandardScaler模块:
        zScaler = StandardScaler()
        z = mmScaler.transform(df)["X", "Y"]
        new_df = pd.dataframe(m, columns=["X", "Y"])
        

你可能感兴趣的:(#,Python学习笔记,机器学习,数据挖掘,python)