‘壹’ 股价数据缺失,用什么插值法补齐较好
meigushe888:
将这些错误的数据当错缺失数据处理,需要采取一定的手段填充。缺失的数据采取插值法填充,这一点早就确定下来,但在如何实现上却困扰很久。将原始问题简化一下。比如有这样一组数据。ID so co1 1 0.1 0.1 2 0 0.2 3 0.2 0 4 0 0 5 0 0.4 6 0.1 0.5插值法计算方法如下:(也可以不使用这两个步骤,只要最后的结果一致就行) 步骤一:计算缺失值上下的已知值间的斜率: k = (b2 - b1)/(n + 1) n 为缺失数据的个数 步骤二:计算对应的缺失值 a(i) = b1 + k * i 经过处理后,得到的数据是这样的:1 0.10 0.102 0.15 0.203 0.20 0.274 0.17 0.335 0.13 0.406 0.10 0.50我最初的想法是:在sql语句中用for循环来做。逐条地检查每个数值,如果是0,那么获取它的前一个记录的值b1,然后再继续向后遍历,获取后面一个非0的值b2,计算这两个非0数据之间的距离n,之后再用插值法将缺失的数据计算出来,并update到b1和b2之间的每一个值。按照这个思路,很麻烦,比如遍历过程中如何获取前一个数值?出现0的时候,如何记录出现多少个0?for循环经过后,再如何update之前的数值? 被这些问题困扰很久!在论坛上发帖解决,解决的办法很受启发。1. 创建一个函数ALTER FUNCTION FUN_CO(@ID INT) RETURNS DECIMAL(18, 3) AS BEGIN DECLARE @NUM1 NUMERIC(19,2),@ID1 INT,@NUM2 NUMERIC(19,2),@ID2 INT SELECT TOP 1 @ID1=ID , @NUM1=CO FROM APRECORD WHERE ID<=@ID AND CO<>0 ORDER BY ID DESC SELECT TOP 1 @ID2=ID , @NUM2=CO FROM APRECORD WHERE ID>=@ID AND CO<>0 ORDER BY ID ASC IF @ID2<>@ID1 RETURN @NUM1+(((@NUM2-@NUM1)/(@ID2-@ID1))*(@ID-@ID1)) RETURN @NUM1 END2. 更新数据库UPDATE APRECORD SET CO=DBO.FUN_CO(ID) WHERE DAYTIME >= @BDT AND DAYTIME < @EDT 在这个解决方案中,首先查找到缺失的数据,也就是值为0的数据,然后向前查找非0数据@NUM1,以及它的编号@ID1,向后查找非0的数据@NUM2. 以及编号@ID2。也就是步骤一。然后用公式计算出填充的数据。将上述过程保存在一个函数中,在存储过程中调用。甚至不用for循环之类。
‘贰’ 数据预处理-缺失值
在数据清洗过程种,主要处理的是缺失值、异常值和重复值。所谓清洗,是对数据进行丢弃、填充、替换、去重等操作,实现去除异常、纠正错误、补足缺失的目的。
不适用采取丢弃的场景:数据集总体中存在大量的数据记录不完整情况且比例较大,例如超过10%。删除这些带有缺失值的记录悄信意味着将会损失过多有用信息。或者带有缺失值的数据记录大量存在着明显的数据分布规律或者特征,例如带有缺失值的数据记录的目标标签主要集中在某一类或者几类,如果删除会使对应分类的数据样本丢失大量特征信息,导致模型过拟合或者分类不准确。
2.1:统启悔轮计法:使用均值、加权均值、中位数等方法补足;对于分类数据,使用类别众数最多的值补足。
2.2:模型法:更多时候我们会基于已有的其他字段,将缺失字段作为目标变量进行预测,从而得到最为可能的补全值。
2.3:专家补全
2.4:随机法,特殊值法,多重填补等。
转换前:性别(男,前盯女,未知)
转换后:性别 男(值域1,0) 性别 女(值域1,0),性别未知(值域1,0)
将一个变量变为3个变量。
常见的能够自动处理缺失值的模型包括:KNN,决策树和随机森林,神经网络和朴素贝叶斯,DBSCAN等。
忽略,缺失值不参与距离计算,例如KNN。
将缺失值作为分布的一种状态,并参与到建模过程,例如决策树。
不基于距离做计算,因此基于值得距离做计算,本身得影响就消除,例如DBSCAN.
对于缺失值得处理思路是先通过一定方法找到缺失值,然后分析缺失值在整个样本中的分布占比以及缺失值是否具有显着的无规律分布特征,然后考虑后续要使用的模型是否满足缺失值自动处理,最后决定采用哪种缺失值处理方法。
‘叁’ 数据分析:数据预处理--缺失值处理(三)
上一篇 数据分析:数据纳握梁预处理--标准化方法优劣了解(二) 讲了两类常用标准化方法,但没涉及到如何处理缺失数据。更多知识分享请到 https://zouhua.top/ 。
全局校正(global adjustment)标准化是蛋白质组学中常用的洞运方法之一,它将log化的intensity数据的中心转换成一个常数,这个常数可以是mean、median或者其它数学测量指标。比如Zscore就是将数据中心的mean转换成常数0,且standard variation为1的标准化方法。虽然不全局校正标准化能够有效校正样本间的差异,但不能处理如非线性的偏差。
Robust scatter plot smoothing 或 lowess regression是另一类标准化方法,limma包的voom函数就使用了该方法。通过线性回归的残差拟合曲线,然后计算每个feature对应的权重值,这作为标准化结果。
蛋白质组的质谱数据的特点是缺失值特别多,产生皮宏缺失值的原因有好多:
处理的缺失值的策略有:
缺失值分类:
缺失值到底是符合MCAR还是censored data呢,可以通过概率模型判断。可阅读文献 A statistical framework for protein quantitation in bottom-up MS-based proteomics 或 Bayesian analysis of iTRAQ data with nonrandom missingness: identification of differentially expressed proteins 。
**Notes: ** 从1st和3rd分位数能看出KNN的补缺效果还不错,但也看到Sepal.Length的最小值补缺前后差距较大。
‘肆’ 数据预处理的流程是什么
数据预处理的流程可没知扒以概括为以下步骤:
1、数据采集和收集:收集各种数据资源,包括数据库、文件、API接口、传感器等。
2、数据清洗:去除不猛滑完整、不准确、重枯昌复或无关的数据,填补缺失值,处理异常值。
3、数据集成:将来自不同数据源的数据进行整合和合并,消除重复和不一致的数据。
4、数据转换:将数据进行归一化、标准化、离散化等转换操作,以便更好地支持数据分析和建模。
5、数据规约:对数据进行压缩、抽样、特征选择等处理,以便更好地支持数据分析和建模。
6、数据可视化:通过图形化方式展示数据,以便更好地理解和分析数据。
‘伍’ 数据预处理的流程是什么
数据预处理的常用流程为:去除唯一属性、处理缺失值、属性编码、数据标准化正则化、特征选择、主成分分析。
去除唯一属性
唯一属性通常是一些id属性,这些属性并不能刻画样本自身的分布规律,所以简单地删除这些属性即可。
处理缺失值
缺失值处理的三种方法:直接使用含有缺失值的特征;删除含有缺失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的);缺失值补全。
常见的缺失值补全方法:均值插补、同类均值插补、建模预测、高维映射、多重插补、极大似然估计、压缩感知和矩阵补全。
(1)均值插补
如果样本属性的距离是可度量的,则使用该属性有效值的平均值来插补缺失的值;
如果的距离是不可度量的,则使用该属性有效值的众数来插补缺失的值。如果使用众数插补,出现数据倾斜会造成什么影响?
(2)同类均值插补
首先将样本进行分类,然后以该类中样本的均值来插补缺失值。
(3)建模预测
将缺失的属性作为预测目标来预测,将数据集按照是否含有特定属性的缺失值分为两类,利用现有的机器学习算法对待预测数据集的缺失值进行预测。
该方法的根本的缺陷是如果其他属性和缺失属性无关,则预测的结果毫无意义;但是亮神激若预测结果相当准确,则说明这个缺失属性是没必要纳入数据集中的;一般的情况是介于两者之间。
(4)高维映射
将属性映射到高维空间,采用独热码编码(one-hot)技术。将包含K个离散取值范围的属性值扩展为K+1个属性值,若该属性值缺失,则扩展后的第K+1个属性值置为1。
这种做法是最精确的做法,保留了所有的信息,也未添加任何额外信息,若预处理时把所有的变量都这样处理,会大大增加数据的维度。这样做的好处是完整保留了原始数敬袜据的全部信息、不用考虑缺失值;缺点是计算量大大提升,且只有在样本量非常大的时候效果才好。
(5)多重插补(MultipleImputation,MI)
多重插补认为待插补的值是随机的,实践上通常是估计出待插补的值,再加上不同的噪声,形成多瞎宴组可选插补值,根据某种选择依据,选取最合适的插补值。
(6)压缩感知和矩阵补全
(7)手动插补
插补处理只是将未知值补以我们的主观估计值,不一定完全符合客观事实。在许多情况下,根据对所在领域的理解,手动对缺失值进行插补的效果会更好。
‘陆’ 对于缺失值的处理
建议:不同场景下的数据缺失机制不同,这需要工程师基于对业务选择合适的填充方法。
如何判断缺失值类型?
缺失值的分类按照数据缺失机制可分为:
可忽略的缺失
不可忽略的缺失
平常工作中遇到的缺失值大部分情况下是随机的(缺失变量和其他变量有关)
这个就可以用estimator来做了,选其中一个变量(y),然后用其他变量作为X,随便选个值填充X的缺失部分,用X train一个estimator,再预测y的缺失部分(大致思路)
此外有些数据是符合某种分布的,利用这个分布呢也可以填充缺失的数据,如(EM算法)
处理缺失数据的三个标准:
1. 非偏置的参数估计
不管你估计means, regressions或者是odds ratios,都希望参数估计可以准确代表真实的总体参数。在统计项中,这意味着估计需要是无偏的。有缺失值可能会影响无偏估计,所以需要处理。
2. 有效的能力:
删除缺失数据会降低采样的大小,因此会降低power。如果说问题是无偏的,那么得到的结果会是显着的,那么会有足够的能力来检验这个效力(have adequate power to detect your effects)。反之,整个检测可能失效。
3. 准确的标准差(影响p值和置信区间):
不仅需要参数估计无偏,还需要标准差估计准确,在统计推断中才会有效。
缺失值处理的方法大致分为这几类:1、删除法;2、基于插补的方法;3、基于模型的方法; 4、不处理; 5、映射高维
有些处理方法是基于完全随机缺失假设(MCAR),一般来说,当数据不是 MCAR 而 是随机缺失(MAR)时,这些方法是不适用的;而有些方法(如似然估计法)在 MAR 的假设下是适用的,因此,在进行缺失数据处理时,首先需要认真分析缺失数 据产生的原因,然后采取有针对性的补救措施,这样才能够获得无偏或弱偏估计。
此处关于使用多重插补来处理非随机缺失(MNAR)的问题,它其实效果不一定,也可能出现效果倒退的情况,总的说多重更适合MAR
注:此处一元与多元指的是仅有一个特征有缺失值与多个特征有缺失值
对于不同类别的缺失值的处理方法如上图。
以下展开介绍各个方法:
注: k-means插补 与KNN插补很相似,区别在于k-means是利用无缺失值的特征来寻找最近的N个点,然后用这N个点的我们所需的缺失的特征平均值来填充,而KNN则是先用均值填充缺失值再找最近的N个点。
类似的还有 随机回归插补 :也优于纯回归插补
其他单一插补法:
与单一插补方法相比较,多重插补方法充分地考虑了数据的不确定性。多重插补的主要分为三个步骤,综合起来即为:插补、分析、合并。插补步是为每个缺失值都构造出 m 个可能的插补值,缺失模型具有不确定性,这些插补值能体现出模型的这个性质,利用这些可能插补值对缺失值进行插补就得到了 m 个完整数据集。分析步是对插补后的 m 个完整数据集使用一样的统计数据分析方法进行分析,同时得到 m 个统计结果。综合步就是把得到的这 m 个统计结果综合起来得到的分析结果,把这个分析结果作为缺失值的替代值。多重插补构造多个插补值主要是通过模拟的方式对估计量的分布进行推测,然后采用不同的模型对缺失值进行插补,这种插补是随机抽取的方式,这样以来能提高估计的有效性和可靠性。
多重插补-python手册
多重插补法主要有以下几种:
(使用回归、贝叶斯、随机森林、决策树等模型对缺失数据进行预测。)
基于已有的其他字段,将缺失字段作为目标变量进行预测,从而得到较为可能的补全值。如果带有缺失值的列是数值变量,采用回归模型补全;如果是分类变量,则采用分类模型补全。
常见能够自动处理缺失值模型包括:KNN、决策树和随机森林、神经网络和朴素贝叶斯、DBSCAN(基于密度的带有噪声的空间聚类)等。
处理思路:
自动插补 :例如XGBoost会通过training loss rection来学习并找到最佳插补值。
忽略 :缺失值不参与距离计算,例如:KNN,LightGBM
将缺失值作为分布的一种状态 :并参与到建模过程,例如:决策树以及变体。
不基于距离做计算 :因此基于值得距离计算本身的影响就消除了,例如:DBSCAN。
ID3、c4.5、cart、rf到底是如何处理缺失值的?
最精确的做法,把变量映射到高维空间。
比如性别,有男、女缺失三种情况,则映射成3个变量:是否男、否女、是否缺失。连续型变量也可以这样处理。比如Google、 网络的CTR预估模型,预处理时会把所有变量都这样处理,达到几亿维。又或者可根据每个值的频数,将频数较小的值归为一类'other',降低维度。此做法可最大化保留变量的信息。
前推法 (LOCF,Last Observation Carried Forward,将每个缺失值替换为缺失之前的最后一次观测值)与 后推法 (NOCB,Next Observation Carried Backward,与LOCF方向相反——使用缺失值后面的观测值进行填补)
这是分析可能缺少后续观测值的纵向重复测量数据的常用方法。纵向数据在不同时间点跟踪同一样本。当数据具有明显的趋势时,这两种方法都可能在分析中引入偏差,表现不佳。
线性插值 。此方法适用于具有某些趋势但并非季节性数据的时间序列。
季节性调整+线性插值 。此方法适用于具有趋势与季节性的数据。
总而言之,大部分数据挖掘的预处理都会使用比较方便的方法来处理缺失值,比如均值法,但是效果上并不一定好,因此还是需要根据不同的需要选择合适的方法,并没有一个解决所有问题的万能方法。
具体的方法采用还需要考虑多个方面的:
在做数据预处理时,要多尝试几种填充方法,选择表现最佳的即可。
总结来说,没有一个最完美的策略,每个策略都会更适用于某些数据集和数据类型,但再另一些数据集上表现很差。虽然有一些规则能帮助你决定选用哪一种策略,但除此之外,你还应该尝试不同的方法,来找到最适用于你的数据集的插补策略。
当前最流行的方法应该是 删除法、KNN、多重插补法 。
参考文献: 庞新生. 缺失数据处理方法的比较[J]. 统计与决策, 2010(24):152-155.
‘柒’ 数据预处理
在数据挖掘中,海量的原始数据中存在大量不完整(有缺失值)、不一致、有异常的数据,会严重影响到数据挖掘建模的执行效果,甚至会导致挖掘结果的偏差,进而数据清洗就变得尤为重要。在数据清洗完成后接着甚至同时进行数据集成、变换、规约等一系列的处理,而整个过程称之为 数据预处理 。在整个数据挖掘过程中,数据预处理工作大致占据整个过程的 60% 。
一般来说,数据预处理的主要包括如下内容: 数据清洗、数据集成、数据变换、数据规约。
接下来的内容,我们也是樱碰从这几方面阐述。
常见的缺失值处理方法: 删除法、替换法、插补法等
(1)、删除法: 最简单的缺失值处理方法。从不同角度进行数据处理划分:
<code>
缺失值的处理
inputfile$date=as.numeric(inputfile$date)#将日期转换成数值型变量
sub=which(is.na(inputfile$sales))#识别缺失值所在行数
inputfile1=inputfile[-sub,]#将数据集分成完整数据和缺失数据两部分
inputfile2=inputfile[sub,]
行删除法处理缺失,结果转存
result1=inputfile1
</code>
(2)、替换法
一般根据属性将变量分:数值型和非数值型
在数据挖掘过程中,可能会存在数据分布在不同的数据源中,而这个时候需要将多个数据源合并存放在一个一致的数据存储(如数据仓库),整个过程称之为 数据集成 。
【
数据仓库:
关于数据仓库构思
漫谈数据仓库之维度建模
漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)
】
在R中,通过将存储在两个数据框中的数据以关键字为依据,以行为单位做列向合并,直渣裂接通过merge()函数完成。
merge(数据框1,数据框2,by="关键字"),而合并后的新数据自动按照关键字取值大小升序排列。不过在数据集成过程中存在表达形式不一样,导致不能直接完成匹配,就需要我们进行加以转换、提炼、集成等操作。具体从如下几方面:
(1)、实体识别
从不同数据源识别出现如颂闭实世界的实体,来完成统一不同源的数据矛盾之处。
实体识别承担着检测和解决这些冲突的任务
(2)、冗余属性识别
数据变换主要对数据进行规范化处理、连续变量的离散化以及属性属性的构造,将数据转换成“适当的”形式,来满足挖掘任务及算法的需要。
(1)、简单函数变换
对原始数据进行某些数学函数变换,常见平方、开方、取对数、差分运算等等
主要来完成不具有正态分布变换服从正态分布;非平稳序列变为平稳序列等等
(2)、数据规范化
为了清除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,使之落入一个特定区域,便于进行综合分析。
常见方法如下:
<code>
读取数据
data=read.csv('./data/normalization_data.csv',he=F)
最小-最大规范化
b1=(data[,1]-min(data[,1]))/(max(data[,1])-min(data[,1]))
b2=(data[,2]-min(data[,2]))/(max(data[,2])-min(data[,2]))
b3=(data[,3]-min(data[,3]))/(max(data[,3])-min(data[,3]))
b4=(data[,4]-min(data[,4]))/(max(data[,4])-min(data[,4]))
data_scatter=cbind(b1,b2,b3,b4)
零-均值规范化
data_zscore=scale(data)
小数定标规范化
i1=ceiling(log(max(abs(data[,1])),10))#小数定标的指数
c1=data[,1]/10^i1
i2=ceiling(log(max(abs(data[,2])),10))
c2=data[,2]/10^i2
i3=ceiling(log(max(abs(data[,3])),10))
c3=data[,3]/10^i3
i4=ceiling(log(max(abs(data[,4])),10))
c4=data[,4]/10^i4
data_dot=cbind(c1,c2,c3,c4)
</code>
(3)、连续属性离散化
在数据的取值范围内设定若干个离散的划分点,将取值范围划分为不同的离散化的区间,最后使用不同的符号或数值代表落在不同区间的数据值。
常见离散方法:
(4)、属性构造
利用已有的属性构造出新的属性
(5)、小波变换(本次不进行阐述)
数据规约在大数据集上产生更小的且保持原数据完整性的新数据集,提升在数据集合上进行分析和挖掘的效率。
意义如下:
‘捌’ 数据预处理的缺失值
1.1 缺失值
很多比赛和实际项目中,常常有字段缺失值很多但是有不能舍弃字段的情况,因此数据预处理中非常重要的一项就是处理缺失值。
1.2 impute.SimpleImputer
calss sklearn.impute.SimpleImputer(missing_valued=nan,strategy='mean', fill_value=None, verboser=0,=True)
1.3 使用impute.SimpleImputer填充缺失值
1.4 使用pandas和numpy进行填充更简单
1.5 使用随机森林进行填充缺失值,通常在比赛中,不能填充test中数据集,至于train中数据集可以自行考虑要不要填充。下面使用随机森林回归进行说明。
使用随机森林回归填充缺失值:任何回归都是从特征矩阵中学习然后求解连续型标签y的过程,之所以能实现这个过程,是因为回归算法认为特征矩阵和标签存在某种联系,实际上,标签和特征是可以相互转化的,比如说,可以用一个地区、环境,附近学校数量预测房价的问题中,我们也可以反过来,用环境,附近学校数量,房价来预测地区,而回归填充缺失值就是利用了这种思想。
对于一个有N个特征顷坦的数据来说,其中特征T有缺失值,我们可以把郑派特征T当做标签,其余N-1个特征和原本的标签组成新的特征矩阵。对于T来说,它没有缺失值的部分就是train,这部分数据既有标签也有特征,而她缺失值的部分只有特征没有标签,就是我们需要预测的部分。
特征T不缺失的值对应的其他n-1个特征+原本的标签:X_train
特征T不缺失的值:Y_train
喊乎贺 特征T缺失的值对应的其他n-1个特征+原本的标签:X_test
特征T缺失的值:Y_test
对于某一个特征大量缺失,其他特征却很完整的情况下,非常适合用随机森林填充。
如果数据中除了T特征之外,还有其他特征缺失怎么办呢?遍历所有的特征,从缺失值最少的开始进行填充(因为缺失值最少的特征所需要的准确信息最少),填充一个特征时,先将其他特征的缺失值用0代替,每完成一次回归预测,就将预测值放到原本的特征矩阵中,再继续填充下一个特征。每填充一次缺失值的特征就会少一个,每次循环后,需要用0填充的特征就越来越少,当进行到最后一个特征的时候(缺失值最多的特征),已经没有需要用0来填充的特征了,遍历所有特征会后,数据就完整了,不再有缺失值。
‘玖’ 数据的预处理之缺失值处理
工作是基于3种缺失值机制告皮来识别缺失模式:
MCAR(完全随机丢失):如果数据的缺失与任何值(观察或缺失)之间没有关系,则为MCAR。
MAR(丛戚半随机丢失):您必须考虑MAR与MCAR有何不同, 如果缺失和观测值之间存在系统关系,则为MAR。例如-男性比女性更容易告诉您自己的体重,因此体重就渗友陵是MAR。“ Weight”变量的缺失取决于变量“ Sex”的观测值。
MNAR(不随机丢失):如果2个或更多变量的缺失具有相同模式,则为MNAR。