昨天我們發現,過多的樣本反而會對估計做出反效果,因此我們今天要來縮小樣本來補值,說到縮小樣本,就不得不提到鼎鼎大名的KNN演算法,又稱為K-近鄰演算法、最近鄰居法,相關理論很複雜,我們先跳過,總而言之就是是用空缺鄰近的數值來推估缺值,以下示範多款比較高端的插值法
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./temp.csv")
# 有些插值法是時間序列專用,所以最好先將索引轉成時間
data["time"] = pd.to_datetime(data["time"])
data = data.set_index("time")
# 線性插值法
data["linear_imputed"] = data["temp"].interpolate(method="linear")
# 最近鄰居插值法
data["nearest_imputed"] = data["temp"].interpolate(method="nearest")
# 導數插值法
data["from_derivatives_imputed"] = data["temp"].interpolate(method="from_derivatives")
# 以下這些方法會使用到索引,請加上一個順序參數,其中多項式跟樣條一定要加
# 時間插值法,時間序列專用
data["time_imputed"] = data["temp"].interpolate(method="time", order=10)
# 線性插值法
data["slinear_imputed"] = data["temp"].interpolate(method="slinear", order=10)
# 二次插值法
data["quadratic’_imputed"] = data["temp"].interpolate(method="quadratic", order=10)
# 三次插值法
data["cubic_imputed"] = data["temp"].interpolate(method="cubic", order=10)
# 零插值法
data["zero_imputed"] = data["temp"].interpolate(method="zero", order=10)
# 樣條插值法
data["spline_imputed"] = data["temp"].interpolate(method="spline", order=2)
# 多項式插值法
data["polynomial_imputed"] = data["temp"].interpolate(method="polynomial", order=2)
data.to_csv("./OK.csv")
這個數值是不是比昨天更有說服力了呢