日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python笔记:fancyimpute

發布時間:2025/4/5 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
zero用0填充
mean用每一列的均值填充
median用每一列的中位數填充
min用每一列的最小值填充
random根據每一列的均值和方差,隨機生成填充內容\
from fancyimpute import SimpleFill x=SimpleFill(fill_method='mean').fit_transform(tmp) x ''' array([[1. , 2. , 3. , 4. ],[3. , 3. , 2. , 4. ],[5. , 7. , 2.5, 4. ]]) '''

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。