數據插補—拉格朗日插值法

来源:https://www.cnblogs.com/hjk-airl/archive/2022/03/30/15766870.html
-Advertisement-
Play Games

##數據分析 ###數據清洗:缺失值處理、1刪除記錄 2數據插補 3不處理 ###數據在https://book.tipdm.org/jc/219 中的資源包中數據和代碼chapter4\demo\data\catering_sale.xls ###常見插補方法 ####插值法-拉格朗日插值法 根據 ...


數據分析

數據清洗:缺失值處理、1刪除記錄 2數據插補 3不處理

數據在https://book.tipdm.org/jc/219 中的資源包中數據和代碼chapter4\demo\data\catering_sale.xls

image
image

常見插補方法

image

插值法-拉格朗日插值法

根據數學知識可知,對於平面上已知的n個點(無兩點在一條直線上可以找到n-1次多項式
image
,使次多項式曲線過這n個點。
1)求已知過n個點的n-1次多項式:
image

將n個點的坐標帶入多項式:得到image
解出拉格朗日插值多項式:image
將缺失的函數值對應的點x帶入多項式得到趨勢值得近似值L(x)

#拉格朗日插值代碼
import pandas as pd #導入數據分析庫Pandas
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import lagrange #導入拉格朗日插值函數

inputfile = '../data/catering_sale.xls' #銷量數據路徑
outputfile = '../tmp/sales.xls' #輸出數據路徑

data = pd.read_excel(inputfile) #讀入數據
temp = data[u'銷量'][(data[u'銷量'] < 400) | (data[u'銷量'] > 5000)] #找到不符合要求得值 data[列][行]
for i in range(temp.shape[0]):
    data.loc[temp.index[i],u'銷量'] = np.nan #把不符合要求得值變為空值

#自定義列向量插值函數
#s為列向量,n為被插值的位置,k為取前後的數據個數,預設為5
def ployinterp_column(s, n, k=5):
  y = s.iloc[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取數 就是傳入得data
  y = y[y.notnull()] #剔除空值
  f = lagrange(y.index, list(y))
  return f(n) #插值並返回插值結果

#逐個元素判斷是否需要插值
for i in data.columns:
  for j in range(len(data)):
    if (data[i].isnull())[j]: #如果為空即插值。
        data.loc[j,i] = ployinterp_column(data[i], j)

data.to_excel(outputfile) #輸出結果,寫入文件
print("success")

運行結果:

image
這個代碼是可以運行的


問題

沒有SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
image
我也不知道時怎麼把這個警告消除的,反正就是找啊找,在我不註意的時候能運行了!好像是不能一下多個賦值,要分開賦值。

最後

但是我們細看可以發現插入的值有問題:把插入的值輸出可以看到有一個異常值
image

我們在處理數據時把小於400,大於5000的值都變成空值,然後通過拉格朗日插值法插入值,想要把數據沒有那麼大的差值,但是給我們插入一個負數,並且很離譜。我檢查了一下並沒有發現哪裡有錯誤;然後我把用到的數據和擬合出來的拉格朗日函數輸出得到:
f=-0.008874 x + 11.53 x - 6657 x + 2.242e+06 x - 4.854e+08 x + 7.005e+10 x - 6.74e+12 x + 4.168e+14 x - 1.504e+16 x + 2.411e+17
image
並沒有發現問題,讓後我就想著是不是擬合出來的函數步夠精確,我把取點增加,但是都沒有好的結果,反而更離譜,這種情況就是過擬合了,就是這個模型可以把你訓練的模型擬合的很好,但是測試模型並不好。
舉個例子:下麵一組數據可以看到用x4函數擬合的並沒有太多的點在模型上,x4函數擬合的相對較多一點,但是如果進行測試,14次方的模型可能會預測的很離譜:
image

最後我把取值點減小發現上下取點4個時都會有一個好的結果,上下去點為3,2,1(直線,不建議取)時也都還能接受。所以我麽擬合出來的五個上下點時也並沒有錯,只是它擬合出來的函數就是在那個點上數值離譜。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 內核代碼統一使用緩衝塊間接和塊設備(如磁碟)交換數據,緩衝區數據通過塊設備驅動程式和塊設備交換數據。 ...
  • 一:安裝依賴軟體Erlang 安裝包otp_src_22.3.tar.gz,下載到部署伺服器tar -zxvf解壓 mv otp_src_22.3 ./erlang變更文件夾名字 可能需要安裝的依賴包 yum -y install make gcc gcc-c++ kernel-devel m4 n ...
  • 高速緩衝 概念 高速緩衝區是記憶體中的一塊記憶體,在塊設備與內核其它程式之間起著一個橋梁作用。內核程式如果需要訪問塊設備中的數據,都需要經過高速緩衝區來間接的操作。 高速緩衝區結構 高速緩衝區被劃分為1k大小的緩衝塊,與磁碟塊大小一致。高速緩衝區主要包含兩部分內容,緩衝塊頭結構(buffer_head, ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、clearos介紹 ClearOS是一個基於CentOS和Red Hat Enterprise Linux的簡單,開源,價格合理的Linux操作系統。 它設計用於中小型企業作為伺服器或網路網關。 二、clearos安裝 下載地址:develo ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 1. Tomcat 介紹 Apache Tomcat 是由 Apache Software Foundation(ASF)開發的一個開源 Java WEB 應用伺服器。 由於 Tomcat 是由 Java 語言實現的,因此需要運行在 Java 虛 ...
  • 一、 RDD創建 從本地文件系統中載入數據創建RDD sc:SparkContext(shell自動創建) 本地文件系統中載入數據創建RDD Spark採用textFile()方法來從文件系統中載入數據創建RDD 該方法把文件的URI作為參數,這個URI可以是: 本地文件系統的地址 或者是分散式文件 ...
  • 在寫sql語句的時候,數據類型是避不可少的一個環節,以下是我在學習的過程中總結的數據類型,僅供參考: 數值類型 類型 有符號(signed)範圍 無符號(unsigned)範圍 描述 tinyint (-128,127) (0,255) 小整數值 smallint (-32768,32767) (0 ...
  • 位元組跳動數據湖團隊在實時數倉構建寬表的業務場景中,探索實踐出的一種基於 Hudi Payload 的合併機制提出的全新解決方案。 位元組跳動數據湖團隊在實時數倉構建寬表的業務場景中,探索實踐出的一種基於 Hudi Payload 的合併機制提出的全新解決方案。 該方案在存儲層提供對多流數據的關聯能力, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...