SDU项目实训记录1.4——数据预处理基础(7.1)

一、标准化和归一化

该项目不需要对数据进行标准化和归一化处理

二、拆分数据集

1、数据集划分

机器学习数据集通常划分为三个部分:

  • 训练集: 用于模型拟合的数据样本
  • 测试集: 用来评估模最终模型的泛化能力
  • 验证集: 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估

2、流程与方法

(1)留出法
留出法(hold_out)直接将数据集划分为训练集和测试集(不含验证集)

(2)K折交叉验证法

  • 先将数据集D划分为 K K K个大小相同的互斥子集,即 D = D 1 ∪ D 2 ∪ ⋯ ∪ D k D=D_{1} ∪ D_{2} ∪ \dots ∪ D_{k} D=D1D2Dk
  • 建立第1个划分结果:用第1个子集作为测试集,第2~ K K K个子集作为训练集
  • 建立第2个划分结果:用第2个子集作为测试集,其余子集作为训练集
  • 这样一共可以得到 K K K组划分,从而可以进行 K K K次模型的训练。每次训练使用该组划分中的训练集,并用测试集评估结果;最后把这 K K K个测试集评估结果的均值作为最终评估结果。
  • 关于 K K K的取值,主要是要保证有足量的训练数据。当总体数据量比较小的时候, K K K值可以稍微设置大一些,这样训练集占整体比例就比较大。相反,数据量比较大的时候, K K K值可以设置的小一些。

下图是 K = 10 K=10 K=10的交叉验证数据划分方法图示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y3CD2yhW-1625131502490)(./images/1.png)]

(3)留一法

  • 在K折交叉验证法中,如果设置 K = 1 K=1 K=1,则始终只保留1个样本作为测试集。这种方法称为留一法
  • 它的优点是可以保证训练集尽可能大。这对于有限数据来说比较有意义

(4)自助法

  • 针对具有 N N N个样本数据集D,每次从D中有放回地采样,获取一个样本放入D’,直到 D’的样本数达到 N N N
  • 由于是有放回的采样,所以D’中存在重复的样本,而且D中有部分样本不会出现在D’中
  • 以D’为训练集,没有在D’出现的样本作为测试集
  • 何种方法在数据集小、难以有效划分训练集/测试集时很有用,不过它会改变数据集的分布会,引入偏差

上述方法都只实现了划分训练集和测试集。如果希望再划分出验证集,可采用下列办法:

  • 使用留出法,将数据集划分成初始训练集和测试集
  • 使用K折交叉法,把初始训练集生成 K K K个划分结果,每个结果均包含训练集和验证集(此时验证集就是该划分的测试集)

3、技术与实现

(1)使用自定义方法划分训练集和测试集

  • 将数据样本打乱以后,从头部开始取若干个样本作为训练集,剩余的样本作为测试集
  • 使用np.random.shuffle、np.random.permutation等函数来打乱数据

(2)调用库函数划分训练集和测试集

  • 使用sklearn.model_selection.train_test_split函数,直接指定测试集样本的数量占比

(3)调用库函数实现K折交叉验证法

  • sklearn.model_selection.KFold:无放回采样
  • sklearn.model_selection.RepeatedKFold:是有放回的采样(本演练不演示)
  • sklearn.model_selection.LeaveOneOut:留一法实现(本演练不演示)
  • sklearn.model_selection.StratifiedKFold:与KFold类似,但是将保持样本的均衡性。
  • sklearn.model_selection.StratifiedShuffleSplit:与StratifiedKFold类似,但可以指定测试样本数据所占的比重

三、文本的数值化处理

该项目数据不存在文本类型数据

四、检测和处理缺失值与重复值

1、流程与方法

(1)缺失值的处理方法-删除法

  • 将缺失值所在的行删除,或者删除缺失值对应变量字段(如果该变量含有缺失值比例过大)
  • 可能产生的问题
    • 丢失被删除的样本或字段中隐藏的重要信息
    • 产生数据偏移,例如原本的正态分布变为非正态分布
  • 适用范围:样本数据量大且缺失值不多

(2)缺失值的处理方法-单变量插补

  • 仅仅在缺失字段内部进行某些统计计算,将计算结果作为缺失值。这种方式不考虑其它字段对本缺失字段的影响。
  • 填补方法
    • 平均值填补:计算该字段的平均值作为缺失值的默认值。适合正态分布的数值型变量
    • 中位数填补:计算该字段的中位数作为缺失值的默认值,适合偏态分布的数值型变量
    • 众数填补:统计该字段中出现次数最多的取值,作为缺失值的默认值,适合文本型变量
    • 临近值填补:使用样本的前一个或后一个样本所对应字段值作为该样本的默认值
  • 可能产生的问题:
    • 扭曲目标变量的分布,可能错误判断了变量与变量之间的关系

(3)缺失值的处理方法-多变量插补

  • 以缺失字段为结果(因变量),以其它字段为特征(自变量),建立机器学习模型,预测缺失字段的值
  • 填补方法:
    • K-近邻算法填补:对于需要填补缺失字段的样本,先利用欧氏距离找到其邻近的 K K K个样本(计算距离时不计入缺失字段),再将这 K K K个邻近的值进行加权平均进行填补
    • 随机森林填补:以待填补的缺失字段为目标,基于其它字段训练随机森林模型,用模型预测缺失字段的值
    • 迭代插补:
      • 如果有多个字段存在缺失值,则先选择其中1个字段作为结果 y y y,其它字段作为特征 X X X
      • 使用一个回归器来在不含缺失y值的样本上对 ( X , y ) (X, y) (X,y)进行拟合,然后使用这个回归器来预测缺失样本的y值
      • 该字段预测完成后,换到下一个缺失字段作为结果 y y y,其它字段作为特征 X X X,继续进行回归
      • 以迭代的方式对每个特征依次进行,重复若干轮,最后一轮的计算结果作为最终的填充结果

(4)缺失值的处理方法-多重插补(Multiple Imputation)

  • 多重填补方法分为三个步骤:
    • 插补:将不完整数据集缺失的观测行估算填充 M M M次,这将生成 M M M个完整的数据集。估算方法可以采用前述单变量插补或多变量插补,但更好的方法是采用马尔科夫链蒙特卡洛模拟(MCMC,Markov Chain Monte Carlo Simulation)
    • 分析:针对 M M M个数据集分别使用统计方法(例如线性或广义线性模型)进行统计分析
    • 合并:对来自各个插补数据集的统计分析结果,根据评分函数进行选择,产生最终的插补值
  • R语言的mice包提供了经典的多重插补实现,Python提供了miceforest包进行处理。本演练不包括多重插补的内容

(5)重复值判断和处理的方法

  • 判断两个样本是否重复,一般应先指定其中的若干个字段,如果对应字段的值都相同,则视为重复样本
  • 对于重复样本,一般来说是仅保留1条。但具体是保留哪一条,则可能需要根据其它字段的取值,或者样本的顺序来确定

2、技术与实现

(1)判断和检测缺失值

  • pandas.DateFrame.isnull()

(2)直接删除缺失值

  • pandas:DateFrame.dropna

(3)缺失值填充

  • 单变量插补:pandas.DataFrame.fillna、sklearn.impute.SimpleImputer
  • 多变量插补:sklearn.impute.IterativeImputer、sklearn.impute.KNNImputer、sklearn.ensemble.RandomForestRegressor

(4)重复值检测与删除

  • 检测指定字段是否具有重复值:pandas.DataFrame.duplicated
  • 删除指定字段具有重复值的行(保留1行):pandas.drop_duplicates

五、离散化和分箱处理

1、流程与方法

(1) 离散化的一般步骤

  • 确定需要多少个类别值
  • 如何将原数据离散化处理映射到对应的类别值上
    • 例如针对连续值,将原数据的连续值进行排序后,指定n个类别也就是n-1个分割点划分为n个区间,将处于同一个区间内的数据映射到相同的类别上

(2) 离散化处理方法

  • 等宽法
    • 根据属性的值域来划分,使每个区间的宽度相等
    • 例如数组[4,18,19,22,14,8,9,13,10 ]划分为三组,区间分别是[4,10],(10,16],(16,22] 分组结果是[4,8,9,10],[13,14],[18,19,22]
  • 等频法
    • 等频分组也叫分位数分组,即分组后,每个分组的元素个数是一样的
    • 例如数组[1, 7, 12, 12, 22, 30, 34, 38, 46],需要分成三组,分组后的结果:[1, 7, 12],[12, 22, 30], [34, 38, 46]
  • 卡方分箱
    • 卡方分箱是基于合并的数据离散方法,它依赖于卡方检验。
    • 原理:对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开
    • 本演练不涉及卡方分箱
  • K-Means聚类算法
    • 将n个样本点划分为 K K K个簇,使得相似的样本尽量被分到同一个聚簇
  • 二值化处理
    • 这是一种比较极端的处理方式,通过指定一个阈值,大于阈值的数据划分为一个区间,其余数据划分到另一个区间

2、技术与实现

(1)二值化处理

  • sklearn.preprocessing.Binarizer

(2)分箱处理

  • numpy.digitize
  • sklearn.preprocessing.KBinsDiscretizer
  • pandas.cut

(3)聚类

  • sklearn.cluster.KMeans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宅女不减肥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值