机器学习入门-数据预处理(如何处理数据缺失值)

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啦!
请给辛苦创作的博主点个赞吧!

以下是一个简单的 Python 代码段,使用拉格朗日插值法来填补 Excel 表格中的缺失值。请注意,这里只提供了一个示例代码段,并未完全测试,具体使用时需要根据实际情况进行修改。 ```python import pandas as pd import numpy as np from scipy.interpolate import lagrange # 读入 Excel 表格 data = pd.read_excel('your_excel_file.xlsx') # 定义插值函数 def lag_interpolate(column): """ column: 缺失值的 Series 列 返回插值后的 Series 列 """ # 使用拉格朗日插值法,k表示插值多项式的阶数 # 注意:k的值不能太大,否则容易造成过拟合 new_column = lagrange(column[column.notnull()].index, column[column.notnull()].values, k=2)(column.isnull().values.astype(float).cumsum()) return new_column # 对每个列进行缺失值处理 for column in data.columns: # 如果该列存在缺失值,则对其进行插值处理 if data[column].isnull().sum() > 0: data[column] = lag_interpolate(data[column]) # 输出处理好的表格 print(data) ``` 说明: 本代码段使用了 pandas 库来读取 Excel 表格,并使用 scipy 库中的 lagrange 函数来进行拉格朗日插值。具体的插值方法详见函数内部注释。 在使用拉格朗日插值时,需要注意防止过拟合。在本代码段中,我们使用了 k=2 的多项式来进行插值,但在实际使用中需要根据具体数据情况选取合适的阶数。 此外,本代码段仅支持对每列进行缺失值处理,如果需要对整个表格进行处理,可以考虑使用更为高级的插值方法,如 KNN、决策树等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值