缺失值几种处理方式:不处理,删除,插值,前两种没什么说的,说说插值吧。
插值有多种方式
1. 均值、中位数、众数、固定值、插值
2. 邻近插值
3. 回归方法插值:曲线拟合
4. 插值法:专门插值的方法,如拉格朗日插值法,牛顿插值法,分段插值,样条插值等
回归是有误差的插值,,插值法是没有误差的插值,因为插值法是“完全拟合”
sklearn 实现均值 中位数 众数插值
sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)
参数
missing_values:指定缺失值的表现形式,当然不一定是缺失值,如果你指定这个为1,会按指定的方式替换1
strategy:指定方式替换缺失值,可取 mean median most_frequent 众数
据说在2.0版本上,可取 constant 常数,此时会有另一个参数 fill_value 来指定这个常数,我还没验证
axis:指定轴,0代表列,1代表行
copy:是否在原数据集上修改,如果为True,修改原数据集,如果为False,复杂一份数据,然后再修改
示例代码
import numpy as np from sklearn.preprocessing import Imputer ### NaN 的表现形式 imp=Imputer(missing_values='NaN',strategy='mean',axis=0) imp=Imputer(missing_values=np.nan,strategy='mean',axis=0) imp=Imputer(missing_values=np.NaN,strategy='mean',axis=0) x=np.array([[1,2], [np.nan,3], [7,6]]) imp.fit(x) print(x) print(imp.transform(x)) # [[1. 2.] # [4. 3.] # [7. 6.]] ### 替换非缺失值 imp=Imputer(missing_values=7,strategy='mean') x=np.array([[1,2], [6,3], [7,6]]) imp.fit(x) print(x) print(imp.transform(x)) # [[1. 2. ] # [6. 3. ] # [3.5 6. ]]
scipy 实现拉格朗日插值
平面上n个点,一定可以找到一个n-1次多项式,使得这个多项式经过这n个点,具体请百度
示例代码
from scipy.interpolate import lagrange import numpy as np import matplotlib.pyplot as plt def interp_lagrange(x, y, xx): # 调用拉格朗日插值,得到插值函数p p = lagrange(x, y) yy = p(xx) plt.plot(x, y, "b*") plt.plot(xx, yy, "ro") plt.show() if __name__ == '__main__': NUMBER = 20 eps = np.random.rand(NUMBER) * 2 # 构造样本数据 x = np.linspace(0, 20, NUMBER) y = np.linspace(2, 14, NUMBER) + eps # 兴趣点数据 xx = np.linspace(12, 15, 10) interp_lagrange(x, y, xx)
输出
注意点:
1. 拉格朗日插值法并不是数据越多越准确,因为数据过多时,其曲线最高次数会很高,曲线很复杂,这会造成较大的误差,此时可以尝试分段进行插值
2. 拉格朗日插值在增加数据点时,曲线就会发生变化,这样就得重新插值,很不方便。
3. 插值一般采用内插值,即对样本中存在的点进行插值,不存在的不进行插值。
插值 VS 回归
可以看到插值曲线是对蓝色*点完全拟合,回归曲线肯定不是这样的。
此外还可以使用pandas、numpy等进行插值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)