当前位置: 首页 > news >正文

「日拱一码」034 机器学习——插值处理

目录

统计学方法

均值填充

中位数填充

众数填充

数学插值方法

线性插值

多项式插值

样条插值

基于模型的插值方法

K-近邻填充

随机森林填充

时间序列插值


机器学习中的插值处理方法可以分为以下几类:统计学方法、数学插值方法、基于模型的插值方法和高级插值方法。

统计学方法

均值填充

用特征列的均值替换缺失值, 适用于数值型数据,尤其是当数据分布较为均匀时

## 统计学方法
# 1. 均值填充
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputerdata = {'A': [1, 2, np.nan, 4, 5], 'B': [5, np.nan, np.nan, 8, 10]}
df = pd.DataFrame(data)# 使用均值填充
imputer = SimpleImputer(strategy='mean')
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)print(df_imputed)
#      A          B
# 0  1.0   5.000000
# 1  2.0   7.666667
# 2  3.0   7.666667
# 3  4.0   8.000000
# 4  5.0  10.000000

中位数填充

用特征列的中位数替换缺失值,适用于数值型数据,尤其是当数据存在异常值时

# 2. 中位数填充import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputerdata = {'A': [1, 2, np.nan, 4, 5], 'B': [5, np.nan, np.nan, 8, 10]}
df = pd.DataFrame(data)
imputer = SimpleImputer(strategy='median')
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)print(df_imputed)
#      A     B
# 0  1.0   5.0
# 1  2.0   8.0
# 2  3.0   8.0
# 3  4.0   8.0
# 4  5.0  10.0

众数填充

用特征列的众数替换缺失值, 适用于分类数据或数值型数据

# 3. 众数填充import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputerdata = {'A': [1, 2, np.nan, 4, 5], 'B': [5, np.nan, np.nan, 8, 10]}
df = pd.DataFrame(data)
imputer = SimpleImputer(strategy='most_frequent')
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)print(df_imputed)
#      A     B
# 0  1.0   5.0
# 1  2.0   5.0
# 2  1.0   5.0
# 3  4.0   8.0
# 4  5.0  10.0

数学插值方法

线性插值

假设数据在缺失点之间呈线性关系,通过已知点计算缺失点的值。适用于数值型数据,且数据变化较为平缓

## 数学插值方法
#1. 线性插值import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputerdata = {'A': [1, 2, np.nan, 4, 5], 'B': [5, np.nan, np.nan, 8, 10]}
df = pd.DataFrame(data)
df_interpolated = df.interpolate(method='linear')print(df_interpolated)
#      A     B
# 0  1.0   5.0
# 1  2.0   6.0
# 2  3.0   7.0
# 3  4.0   8.0
# 4  5.0  10.0

多项式插值

用多项式函数拟合已知数据点,计算缺失点的值。适用于数值型数据,且数据变化较为复杂

# 2. 多项式插值import numpy as np
import pandas as pddata = {'A': [1, 2, np.nan, 4, 5], 'B': [5, np.nan, np.nan, 8, 10]}
df = pd.DataFrame(data)
df_interpolated = df.interpolate(method='polynomial', order=2)print(df_interpolated)
#      A     B
# 0  1.0   5.0
# 1  2.0   5.5
# 2  3.0   6.5
# 3  4.0   8.0
# 4  5.0  10.0

样条插值

用分段多项式函数拟合数据,确保在连接点处光滑。适用于数值型数据,且需要高精度插值

# 3. 样条插值
from scipy.interpolate import interp1d
import matplotlib.pyplot as pltx = np.arange(0, 10)
y = np.sin(x)
x_new = np.linspace(0, 9, 30)# 创建样条插值函数
f = interp1d(x, y, kind='cubic')# 计算插值结果
y_new = f(x_new)plt.plot(x, y, 'o', label='original data')
plt.plot(x_new, y_new, '-', label='cubic spline')
plt.legend()
plt.show()

基于模型的插值方法

K-近邻填充

用缺失值的 K 个最近邻点的值进行加权平均或投票填充。适用于数值型数据或分类数据

## 基于模型的插值方法
# 1. K-近邻填充
from sklearn.impute import KNNImputerdata = {'A': [1, 2, np.nan, 4, 5], 'B': [5, np.nan, np.nan, 8, 10]}
df = pd.DataFrame(data)
# 使用 KNN 填充
imputer = KNNImputer(n_neighbors=2)
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)print(df_imputed)
#      A          B
# 0  1.0   5.000000
# 1  2.0   6.500000
# 2  3.0   7.666667
# 3  4.0   8.000000
# 4  5.0  10.000000

随机森林填充

通过随机森林模型预测缺失值。适用于复杂数据,尤其是特征之间存在非线性关系

# 2. 随机森林填充
from sklearn.ensemble import RandomForestRegressordata = {'A': [1, 2, np.nan, 4, 5], 'B': [5, np.nan, np.nan, 8, 10]}
df = pd.DataFrame(data)X = df.dropna().drop(columns=['B'])
y = df.dropna()['B']# 训练随机森林模型
model = RandomForestRegressor()
model.fit(X, y)# 预测缺失值
df.loc[df['B'].isna(), 'B'] = model.predict(df[df['B'].isna()].drop(columns=['B']))print(df)
#      A      B
# 0  1.0   5.00
# 1  2.0   5.67
# 2  NaN   9.27
# 3  4.0   8.00
# 4  5.0  10.00

时间序列插值

利用时间序列的周期性和趋势性进行插值。适用于时间序列数据

## 高级插值方法
# 1. 时间序列插值import pandas as pddata = {'A': [1, 2, np.nan, 4, 5], 'B': [5, np.nan, np.nan, 8, 10]}
df = pd.DataFrame(data)
# 假设数据是时间序列
df['time'] = pd.date_range(start='2025-01-01', periods=len(df), freq='D')
df.set_index('time', inplace=True)# 使用时间序列插值
df_interpolated = df.interpolate(method='time')print(df_interpolated)
#               A     B
# time
# 2025-01-01  1.0   5.0
# 2025-01-02  2.0   6.0
# 2025-01-03  3.0   7.0
# 2025-01-04  4.0   8.0
# 2025-01-05  5.0  10.0
http://www.dtcms.com/a/290492.html

相关文章:

  • FreeSwitch通过Websocket(流式双向语音)对接AI实时语音大模型技术方案(mod_ppy_aduio_stream)
  • 优测发布IoT云联解决方案,赋能生态应用创新跨端体验!
  • 智慧水厂怎么建?物联网数据采集+SCADA升级,水务工业智能转型
  • 蜂窝物联网模组市场新展望:中国企业继续保持最强竞争力
  • Netty中AbstractReferenceCountedByteBuf源码解析
  • 康复器材动静态性能测试台:精准检测,为康复器械安全保驾护航
  • 【Android】交叉编译faiss库 | 问题解决
  • jdk25浅谈
  • 亚马逊自养号测评实战指南:从环境搭建到安全提排名
  • 智能合约安全 - 重入攻击 - 常见漏洞(第一篇)
  • 电科金仓2025发布会,国产数据库的AI融合进化与智领未来
  • A316-Mini-V1:超小尺寸USB高清音频解码器模组技术探析
  • Sequential 损失函数 反向传播 优化器 模型的使用修改保存加载
  • 20250721
  • A316-1926-V1 USB多路高清音频解码器模组技术解析
  • 番茄工作法
  • 在幸狐RV1106板子上用gcc14.2本地编译安装mysql-8.0.42数据库
  • 【高等数学】第五章 定积分——第一节 定积分的概念与性质
  • C++学习<2>--引用、函数、内存分区
  • 数据结构-哈希表(一)哈希函数、哈希表介绍、优缺点
  • 计算机发展史:个人计算机时代的多元融合与变革
  • 【ASP.NET Core】ASP.NET Core中Redis分布式缓存的应用
  • 进程资源分配的安全性判断与安全序列
  • 14.6 《3步实战LLaMA2-7B指令微调:Hugging Face生态+LoRA技术,MT-Bench得分从5.1直升7.3》
  • 【烧脑算法】拓扑排序:从“依赖”到“序列”,理解题目中的先后逻辑
  • 通俗易懂卷积神经网络(CNN)指南
  • [深度学习] 大模型学习3上-模型训练与微调
  • Pytorch02:深度学习基础示例——猫狗识别
  • 无人机避障雷达模式运行方式
  • 【服务器】服务器调试及仿真软件安装调试心得