目录
感觉大家对原理性的东西不太感兴趣,那我就直接举例提供代码,以及详细的注释,大家自己对照改代码应用于你自己建立的模型吧。
完整代码关注博客底部微信公众号获得!
这些代码全部是我自己做数模竞赛时候自己用的代码。可以直接运行,记得修改文件路径。
一、安装所需的python 包
pip install scipy
pip install numpy
pip install pandas
pip install joblib
二、采用Newton插值法进行缺失值填充
注意代码需要把自己的数据文件格式转换为CSV文件,并且把路径修改为自己文件所在的路径,不会转换的参考我此教程文件格式转换:EXCEL和CSV文件格式互相转换。
我知道大家对原理性的东西不感兴趣,我把他的原理介绍放在文末,需要写论文的同学自己拿去用,记得修改,否则查重率过不去。
2.1代码(完整代码关注底部微信公众号获得)
"""
牛顿插值法填充
Newton插值法
根据固定公式,构造近似函数、补上缺失值、普遍适用性强
缺点:区间边缘处的不稳定震荡,即龙格现象。不适合对导数有要求的题目
适用赛题:热力学温度、地形测量、定位等只追求函数值精准而不关心变化的数掘
这个的效果比那些都好,我想了想可能是因为数据的规律性太强,而那些训练模型的那个可能是因为数据量太少,效果差。
"""
from scipy.interpolate import interp1d
import numpy as np
import pandas as pd
import joblib
# 读取数据,请将'缺失值填充.csv'替换为你的真实数据文件名
filename = '缺失值填充.csv'
data = pd.read_csv(filename, encoding='gbk')
# 用填充后的数据保存文件
data.to_csv('牛顿插值法填充.csv', index=False)
注意:
filename = '缺失值填充.csv'
里面的缺失值填充.csv
是你自己的缺失值的csv文件路径,data.to_csv('牛顿插值法填充.csv', index=False)
中的牛顿插值法填充.csv
是你填充后的文件名,你可以自己起名。
2.2以某个缺失值数据进行实战
注意:数据量较少,由自己构建,均有规律,
如下图:
构造缺失值,如下图:
运行代码查看填充后的数据怎么样,
运行代码如下图+填充后的截图:
2.2.1代码运行过程截屏:
2.2.2填充后的数据截屏:
说明:对于这种规律的数据使用牛顿插值法倒是挺不错的,数据量大的,可以使用神经网络遗传算法来进行缺失值填充,下面我都会介绍,但是你在进行数模比赛时候,需要说明为什么你要选用牛顿插值法填充,说明他的原理即可,不必纠结填充的数据是否正确,因为你本身也不知道数据的正确性。
接下来我将继续分享其他我参加数模时候常用的几种数据填充的代码,都是我自己调试跑通过的,大家直接复制粘贴使用。
三、牛顿插值法算法原理介绍
3.1牛顿插值法的定义
牛顿插值法 是一种多项式插值方法,用于构建一个插值多项式,该多项式通过给定的一组数据点,并用于估计数据点之间的值。它是根据已知数据点的函数值,利用差分表格递推地求出插值多项式的系数。牛顿插值法因其计算效率较高且易于实现,广泛应用于数值计算和工程应用中。
3.2牛顿插值法的基本思想
牛顿插值法的基本思想是通过构建一个插值多项式,使其在给定数据点处的值与目标函数的值相等。牛顿插值法的多项式形式使用了前向差分表或后向差分表来递推计算多项式的各项系数。插值多项式可以表示为:
P n ( x ) = f ( x 0 ) + ( x − x 0 ) f [ x 0 , x 1 ] + ( x − x 0 ) ( x − x 1 ) f [ x 0 , x 1 , x 2 ] + ⋯ + ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) f [ x 0 , x 1 , … , x n ] P_n(x) = f(x_0) + (x - x_0)f[x_0, x_1] + (x - x_0)(x - x_1)f[x_0, x_1, x_2] + \cdots + (x - x_0)(x - x_1) \cdots (x - x_{n-1})f[x_0, x_1, \ldots, x_n] Pn(x)=f(x0)+(x−x0)f[x0,x1]+(x−x0)(x−x1)f[x0