缺失值處理


缺失值幾種處理方式:不處理,刪除,插值,前兩種沒什么說的,說說插值吧。

 

插值有多種方式

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等進行插值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM