1.机器学习数据预处理-缺失值
在处理机器学习所需要的数据时,经常会遇到处理含有缺失值的数据,这种数据未经过预处理,常常存在缺失值、异常值情况,此篇文章仅仅介绍如何解决缺失值的问题。
2.拉格朗日插值法
我相信即使我在这里放了拉格朗日插值法的数学原理也是没有人看的,所以此处就简要的说明一下拉格朗日插值法的原理。
2.1原理
拉格朗日插值法的原理即,取缺失值所在位置的前后k个数放进拉格朗日多项式插值公式进行计算。(此处不懂什么是拉格朗日多项式插值公式的回去问你的大学高数老师)
2.2数据示例
此处我们使用如图所示的小数据进行说明:
2.3拉格朗日插值代码
以下代码默认取缺失值前后5个数进行计算,可直接运行。
step1:读取数据
# 拉格朗日插值法
import pandas as pd
import numpy as np
from scipy.interpolate import lagrange
#注意此处要改成你自己的路径
inputfile='../missing_data.xls'
outputfile='../missing_data_processed.xls'
data=pd.read_excel(inputfile,header=None)
step2:自定义列向量
这一步有些人可能不太懂为什么,这就是用拉格朗日插值法进行计算的一个式子。你就当做你把数据输进去,他就能给你算出缺失的那个值就行啦!
# 自定义列向量插值函数
#s代表所有data的一列数据,n代表缺失值的index
def ployinterp_column(s,n,k=5):
#取缺失值的前5个数字和后五个数字
y=s[list(range(n-k,n))+list(range(n+1,n+1+k))]
#筛选出那些非空的数据
y=y[y.notnull()]
return lagrange(y.index,list(y))(n)
step3:逐个元素判断是否需要插值
#遍历数据的列
for i in data.columns:
#遍历数据的行
for j in range(len(data)):
#如果数据为空则进行插值
if(data[i].isnull())[j]:
data[i][j]=ployinterp_column(data[i],j)
最后得到的data就是已经经过填充的完整的data啦!
请给辛苦创作的博主点个赞吧!