FukuML 在執行某些數值計算時可能會產生 NumPy RuntimeWarning,例如:
divide by zero encountered in dotoverflow encountered in dotinvalid value encountered in dotdivide by zero encountered in matmuloverflow encountered in matmulinvalid value encountered in matmul
這些警告通常是因為數值計算時遇到數值精度問題,但不影響功能正確性。
從目前版本開始,FukuML 使用全域設定自動抑制這些警告,用戶完全不會看到這些警告。
實現方式:
- 在
FukuML/__init__.py中自動載入FukuML.Config - 使用 NumPy 的
np.seterr()進行全域錯誤狀態控制 - 無需在各個檔案中重複處理警告
如果您需要控制警告顯示,可以使用 FukuML.Config 模組:
import FukuML
import FukuML.Config as config
# 方法1: 恢復警告顯示(用於除錯)
config.suppress_warnings(False)
# 使用您的演算法 - 現在會顯示警告
import FukuML.PLA as pla
pla_bc = pla.BinaryClassifier()
pla_bc.init_W('linear_regression_accelerator')
# 方法2: 重新抑制警告
config.suppress_warnings(True)
# 方法3: 重置所有警告設置
config.reset_warnings()import FukuML.Config as config
# 完全停用 FukuML 的警告管理,恢復 NumPy 預設行為
config.suppress_warnings(False)
# 您也可以直接使用 NumPy 的 seterr
import numpy as np
np.seterr(all='warn') # 恢復預設警告
np.seterr(divide='ignore', over='ignore', invalid='ignore') # 自訂抑制這些警告來自於:
- 偽逆矩陣計算:
np.linalg.pinv()在處理近似奇異矩陣時 - 數值精度限制:浮點運算的固有限制
- 特殊數據情況:某些數據分布可能導致數值不穩定
- ✅ 功能正常:警告不影響算法的正確性
- ✅ 結果準確:數值計算結果依然正確
- ✅ 用戶體驗:現在警告已被自動抑制
可以運行任何測試確認用戶體驗:
# 測試 PLA 演算法 - 不會出現警告
python tests/test_pla_binary_classifier.py
python tests/test_pla_multi_classifier.py
# 測試其他演算法
python test_fuku_ml.py這些測試會確認不會出現任何 RuntimeWarning。
- 全域配置:在
FukuML/Config.py中定義全域警告控制 - 自動初始化:
FukuML/__init__.py中自動 import Config 並啟用警告抑制 - NumPy seterr:使用
np.seterr()全域控制數值錯誤行為 - 無需修改演算法:各演算法檔案保持簡潔,無需個別處理警告
- 一次設定,全域生效:無需在每個檔案處理警告
- 代碼更簡潔:移除重複的警告處理代碼
- 維護性更好:警告控制邏輯集中管理
- 使用者友好:預設提供最佳體驗
- ✅ 所有現有 API 保持不變
- ✅ 算法行為完全一致
- ✅ 只是抑制了警告顯示
- ✅ 使用者仍可自由控制警告行為