python笔记:fancyimpute
0 包介紹
各種矩陣補全和插補
注:
- 這個包的作者不打算添加更多的插補算法或特征
- IterativeImputer 最初是一個 fancyimpute 包的原創模塊,但后來被合并到 scikit-learn 中,。 為方便起見,您仍然可以 from fancyimpute import IterativeImputer,但實際上它只是從 sklearn.impute import IterativeImputer 做的。?
1 涉及的算法
| SimpleFill | 用每列的平均值或中值替換缺失的條目。 |
| KNN | 最近鄰插補,它使用兩行都具有觀察數據的特征的均方差對樣本進行加權。 |
| SoftImpute | 通過 SVD 分解的迭代軟閾值完成矩陣 論文筆記 Spectral Regularization Algorithms for Learning Large IncompleteMatrices (soft-impute)_UQI-LIUWJ的博客-CSDN博客 |
| IterativeImputer | 通過以循環方式將具有缺失值的每個特征建模為其他特征的函數,來估算缺失值 類似于推薦系統筆記:使用分類模型進行協同過濾_UQI-LIUWJ的博客-CSDN博客 |
| IterativeSVD | 通過迭代低秩 SVD 分解完成矩陣 類似于?推薦系統筆記:基于SVD的協同過濾_UQI-LIUWJ的博客-CSDN博客_基于svd的協同過濾 |
| MatrixFactorization | 將不完整矩陣直接分解為低秩 U 和 V,具有每行和每列偏差以及全局偏差。? |
| BiScaler | 行/列均值和標準差的迭代估計以獲得雙重歸一化矩陣。 不保證收斂,但在實踐中效果很好。 |
2 每個的使用方法
2.1 SimpleFill?
需要補全的矩陣(實際應用中比這個會大很多)
tmp=np.array([[1,2,3,4],[np.nan,3,2,np.nan],[5,7,np.nan,np.nan]])tmp ''' array([[ 1., 2., 3., 4.],[nan, 3., 2., nan],[ 5., 7., nan, nan]]) '''聲明的時候有一個參數可以設置
| fill_method |
|
2.2 KNN
2.2.1 聲明參數
| k | 用于插補的相鄰行數。 |
| orientation | 輸入矩陣的哪個軸應該被視為樣本(默認是row,可以設置為column) |
| use_argpartition | True或者False,默認為False 如果少于 k 個鄰居可用于缺失值,則可能給出 NaN。 |
| print_interval | 每補全幾行打印一次信息,默認是100 |
| min_value | 補全的數值的下限(小于之的會被設置為這個值) |
| max_value | 補全的數值的上限(大于之的會被設置為這個值) |
2.2.2 具體使用
需要補全的矩陣
array([[ 1., 2., 3., 4.],[nan, 3., 2., nan],[ 5., 7., nan, nan],[ 7., nan, 11., 14.],[76., 37., 27., nan],[56., 77., nan, nan],[ 1., 28., 33., 41.],[nan, 31., 21., nan],[ 5., 7., nan, nan]]) from fancyimpute import KNN x=KNN(k=2,print_interval=3).fit_transform(tmp) x''' Imputing row 1/9 with 0 missing, elapsed time: 0.000 Imputing row 4/9 with 1 missing, elapsed time: 0.000 Imputing row 7/9 with 0 missing, elapsed time: 0.000array([[ 1. , 2. , 3. , 4. ],[ 1.23529412, 3. , 2. , 4.12195125],[ 5. , 7. , 9.2 , 12.36734637],[ 7. , 7. , 11. , 14. ],[76. , 37. , 27. , 24.86588619],[56. , 77. , 25.07445545, 26.67637945],[ 1. , 28. , 33. , 41. ],[51.99999875, 31. , 21. , 29.29744947],[ 5. , 7. , 9.2 , 12.36734637]]) ''' from fancyimpute import KNN x=KNN(k=2,print_interval=6,max_value=2).fit_transform(tmp) x ''' Imputing row 1/9 with 0 missing, elapsed time: 0.000 Imputing row 7/9 with 0 missing, elapsed time: 0.000array([[ 1. , 2. , 3. , 4. ],[ 1.23529412, 3. , 2. , 2. ],[ 5. , 7. , 2. , 2. ],[ 7. , 2. , 11. , 14. ],[76. , 37. , 27. , 2. ],[56. , 77. , 2. , 2. ],[ 1. , 28. , 33. , 41. ],[ 2. , 31. , 21. , 2. ],[ 5. , 7. , 2. , 2. ]]) '''2.3 SoftImpute
需要補全的矩陣
array([[ 1., 2., 3., 4.],[nan, 3., 2., nan],[ 5., 7., nan, nan],[ 7., nan, 11., 14.],[76., 37., 27., nan],[56., 77., nan, nan],[ 1., 28., 33., 41.],[nan, 31., 21., nan],[ 5., 7., nan, nan]])2.3.1 聲明時的參數
| shrinkage_value | ????????默認無 ????????我們在每次迭代中縮小奇異值的值。 如果省略,則默認值將是初始化矩陣的最大奇異值(缺失值用零補全)除以 50。 |
| convergence_threshold | ????????停止前迭代之間的最小定量差,默認為0.001 soft-impute?中的ε |
| max_iters | ????????SVD迭代的最大次數,默認為100 (這個和上面一個同時限制的時候,誰先達到就結束迭代) |
| min_value | 補全的數值的下限(小于之的會被設置為這個值) |
| max_value | 補全的數值的上限(大于之的會被設置為這個值) |
| init_fill_method | 如何初始化缺失值,和SimpleFill類似 ? |
| verbose | 默認True,是否打印信息 |
2.3.2 進行補全
from fancyimpute import SoftImpute x=SoftImpute().fit_transform(tmp) x''' [SoftImpute] Max Singular Value of X_init = 131.068550 [SoftImpute] Iter 1: observed MAE=0.688068 rank=4 [SoftImpute] Iter 2: observed MAE=0.688751 rank=4 [SoftImpute] Iter 3: observed MAE=0.689301 rank=4 [SoftImpute] Iter 4: observed MAE=0.689713 rank=4 [SoftImpute] Iter 5: observed MAE=0.689983 rank=4 [SoftImpute] Iter 6: observed MAE=0.690109 rank=4.....[SoftImpute] Iter 98: observed MAE=0.668583 rank=3 [SoftImpute] Iter 99: observed MAE=0.668481 rank=3 [SoftImpute] Iter 100: observed MAE=0.668381 rank=3 [SoftImpute] Stopped after iteration 100 for lambda=2.621371array([[ 1. , 2. , 3. , 4. ],[ 1.99541572, 3. , 2. , 1.49377198],[ 5. , 7. , 3.24041776, 1.71202629],[ 7. , 9.85341851, 11. , 14. ],[76. , 37. , 27. , 4.83992705],[56. , 77. , 35.75297423, 18.6416866 ],[ 1. , 28. , 33. , 41. ],[20.74186052, 31. , 21. , 15.78120489],[ 5. , 7. , 3.24041776, 1.71202629]]) '''2.4 IterativeSVD
?需要補全的矩陣
array([[ 1., 2., 3., 4.],[nan, 3., 2., nan],[ 5., 7., nan, nan],[ 7., nan, 11., 14.],[76., 37., 27., nan],[56., 77., nan, nan],[ 1., 28., 33., 41.],[nan, 31., 21., nan],[ 5., 7., nan, nan]])2.4.1 聲明時的參數
| rank | 截斷SVD的時候,選擇最大的幾個奇異值 默認是10個 |
| convergence_threshold | ????????停止前迭代之間的最小定量差,默認為0.00001 |
| max_iters | ????????SVD迭代的最大次數,默認為200 (這個和上面一個同時限制的時候,誰先達到就結束迭代) |
| min_value | 補全的數值的下限(小于之的會被設置為這個值) |
| max_value | 補全的數值的上限(大于之的會被設置為這個值) |
| init_fill_method | 如何初始化缺失值,和SimpleFill類似 |
| verbose | 默認True,是否打印信息 |
2.4.2 進行補全
from fancyimpute import IterativeSVD x=IterativeSVD(rank=2).fit_transform(tmp) x ''' [IterativeSVD] Iter 1: observed MAE=9.314811 [IterativeSVD] Iter 2: observed MAE=3.898237 [IterativeSVD] Iter 3: observed MAE=3.044470 [IterativeSVD] Iter 4: observed MAE=2.463926 [IterativeSVD] Iter 5: observed MAE=2.080959...[IterativeSVD] Iter 80: observed MAE=0.653643 [IterativeSVD] Iter 81: observed MAE=0.650037 [IterativeSVD] Iter 82: observed MAE=0.646448 [IterativeSVD] Iter 83: observed MAE=0.642877 [IterativeSVD] Iter 84: observed MAE=0.639324array([[ 1. , 2. , 3. , 4. ],[ 4.36077941, 3. , 2. , -0.30385289],[ 5. , 7. , 6.66333863, 5.15766473],[ 7. , 12.71726727, 11. , 14. ],[ 76. , 37. , 27. , -21.33610166],[ 56. , 77. , 73.07388471, 55.70698081],[ 1. , 28. , 33. , 41. ],[ 44.14701235, 31. , 21. , -2.11268537],[ 5. , 7. , 6.66333863, 5.15766473]]) '''2.5 MatrixFactorization
??需要補全的矩陣
array([[ 1., 2., 3., 4.],[nan, 3., 2., nan],[ 5., 7., nan, nan],[ 7., nan, 11., 14.],[76., 37., 27., nan],[56., 77., nan, nan],[ 1., 28., 33., 41.],[nan, 31., 21., nan],[ 5., 7., nan, nan]])2.5.1 聲明時需要的參數
| rank | 默認為40 U,V低秩矩陣的rank |
| learning_rate | 學習率 |
| max_iters | 最大迭代次數 |
| min_value | 補全的數值的下限(小于之的會被設置為這個值) |
| max_value | 補全的數值的上限(大于之的會被設置為這個值) |
2.5.2 進行補全
from fancyimpute import MatrixFactorization x=MatrixFactorization(rank=2).fit_transform(tmp) x ''' [MatrixFactorization] Iter 10: observed MAE=2.560441 rank=2 [MatrixFactorization] Iter 20: observed MAE=1.120212 rank=2 [MatrixFactorization] Iter 30: observed MAE=0.924099 rank=2 [MatrixFactorization] Iter 40: observed MAE=0.735406 rank=2 [MatrixFactorization] Iter 50: observed MAE=0.624251 rank=2array([[ 1. , 2. , 3. , 4. ],[ 3.24821785, 3. , 2. , 4.244756 ],[ 5. , 7. , 6.69442221, 9.34054331],[ 7. , 11.5915197 , 11. , 14. ],[76. , 37. , 27. , 12.29345116],[56. , 77. , 70.03487199, 71.43511672],[ 1. , 28. , 33. , 41. ],[33.91093635, 31. , 21. , 21.18448482],[ 5. , 7. , 6.67985782, 9.32187028]]) '''參考資料
iskandr/fancyimpute: Multivariate imputation and matrix completion algorithms implemented in Python (github.com)
總結
以上是生活随笔為你收集整理的python笔记:fancyimpute的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文笔记 Spectral Regula
- 下一篇: NTU 课程笔记 CV6422 Stat