欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python之填充数据槽(二)

程序员文章站 2022-04-11 18:16:02
...

在之前的ipynb中,我们研究了这样的数据槽的填充方法,如:

1. Imputation methods - mean, median imputation
2. Interpolation methods - basic (linear, cubic, polynomial, spline)
3. Smoothing and filtering methods - moving average

链式方程的多重推定(MICE)。
MICE是在对数据遗漏产生机制有一定假设的情况下,用于替换数据集缺失值的一种多重填充(推算)方法。

随机缺失(MAR)数据。
数据完全缺失是随机的(MCAR)。
与 "完整 "数据集的单一归因相比,使用多重归因可以解释现有的统计不确定性。一般来说,单项推算的局限性在于,由于这些方法找到的是最可能的数值,因此它们产生的记录不能准确反映基线数据的分布。此外,链式方程方法非常灵活,可以处理不同类型的变量(如连续或二进制)。

例如,考虑极端的情况,我们用一个平均值来代替遗漏值。事实上,我们会期望在填写跳过后的数据中看到一些变化:极端值、排放和记录不完全符合原始数据的 "模式"。所有的数据集都包含一些噪声,用平均值填充跳过并不试图模拟这种噪声。这就会导致所产生的估计值出现偏差,最终导致所产生的模型在准备阶段和质量控制阶段的准确性下降。

MICE算法的工作原理如下:在运行多个回归模型时,根据观察到的(未遗漏的)值,有条件地模拟每个遗漏值,这样可以考虑到基本的数据分布,消除偏移。

该算法包括三个步骤:

1.推算:我们填补数据的遗漏。在这种情况下,最好的方法是马尔科夫链蒙特卡洛(MCMC)模拟。
2. 分析:从推算数据中分析所研究的模型与各数据集。
3.汇集:将分析结果整合成最终结果。
算法的工作方案

Python之填充数据槽(二)

示例

import numpy as np
import pandas as pd

输入数据:

data_without_nan = pd.read_csv(r'data\regdat1.csv', sep=';', index_col='DATE')

随机插入的数据。

data = pd.read_csv(r'data\regdat1_with_nan.csv', sep=';', index_col='DATE')
data.head()

Python之填充数据槽(二)

data.info()

在数据中,我们看到了大量的遗漏值。让我们用fancyimpute fancyimpute包中的MICE方法来填充它们。

注意 在安装fancyimpute之前(pip install fancyimpute)更新所有包(pip, scipy, numpy, six, tensorflow)

from fancyimpute import IterativeImputer as MICE

Python之填充数据槽(二)

df_complete = data.copy()

for column in data:
    data_train_numeric = data[[column]].select_dtypes(include=[np.float]).as_matrix()
    data_complete = MICE().fit_transform(data_train_numeric)
    
    df_complete[column + '_complete'] = data_complete
    df_complete[column + '_interpolated'] = data[column].interpolate(method='linear')
df_complete.head()

让我们利用MICE和简单的线性插值来估计数据中的通道填充质量。

from sklearn.metrics import r2_score

for column in data_without_nan:
    r2_value_mice = r2_score(data_without_nan[column], df_complete[column + '_complete'])
    print(column, 'data imputation has r2 score by MICE', r2_value_mice)
    
    r2_value_interp = r2_score(data_without_nan[column], df_complete[column + '_interpolated'])
    print(column, 'data imputation has r2 score by linear interpolation', r2_value_interp)

Python之填充数据槽(二)

可以看出,在3种情况中,有2种情况下,MICE数据中的填充通道质量不如插值。

在一个真实的项目中,它绝对是类似的,在测试了大量的方法来填补遗漏的值后,停止在线性插值,作为最小的计算成本,但在同一时间给出了一个可接受的结果质量,填补数据中的通道(评估图形和模型的质量建立在数据的基础上,填补通道)。

 

接下来是...
我们将在以下主题中考虑平滑和过滤。

基于模型的方法----如果还有时间的话;

用ML方法填充通证,以及使用多任务学习(将带通证的数据直接提交给模型,填充通证与主任务同时进行),应该在你之前的课程中已经有过。

用于自学
fancyimpute包和其他方法来填补遗漏的值,例如。

KNN:最近邻推算,其中使用均值平方差对两行都有观测数据的特征进行加权。

SoftImpute:通过迭代软阈值的SVD分解矩阵。受R的softImpute包的启发,该包基于Mazumder等人的Spectral Regularization Algorithms for Learning Large Incomplete Matrices。

迭代SVD:通过迭代低阶SVD分解完成矩阵。应该类似于SVDimpute从缺失值估计方法的DNA微阵列由Troyanskaya等人。

MatrixFactorization:将不完全矩阵直接分解成低阶U和V,对U的元素进行L1稀疏性惩罚,对V的元素进行L2惩罚,用梯度下降法求解。

NuclearNormMinimization:Emmanuel Candes和Benjamin Recht使用cvxpy对精确矩阵完成的简单实现。对于大型矩阵来说太慢了。

 

 

 

相关标签: Python