跳到主要內容

發表文章

淺談機器學習原理-估模型好壞

評估模型好壞 淺談機器學習原理筆記-- 評估模型好壞 MSE (Mean Squared Error) 是用來評估模型預測值與實際值之間差異的一種常用指標。將預測誤差平方後平均,懲罰大誤差, MSE 的值越小,表示模型的預測越準確。公式如下: M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE = n 1 ​ i = 1 ∑ n ​ ( y i ​ − y ^ ​ i ​ ) 2 其中: ( n ) 是樣本數量 ( y_i ) 是實際值 ( \hat{y}_i ) 是模型的預測值 適合用 MSE 的情境 : 回歸(Regression)問題 不適合用 MSE 的情境 : 資料尺度差異大 : 對離群值敏感的場景:資料裡常有極端值 分類問題(Classification) RMSE (Root Mean Squared Error) RMSE (Root Mean Squared Error) RMSE 是 MSE 的平方根,能夠將誤差的單位與原始數據保持一致,因此更容易解釋。公式如下: R M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} RMSE = n 1 ​ i = 1 ∑ n ​ ( y i ​ − y ^ ​ i ​ ) 2 ​ 其中: ( n ) 是樣本數量 ( y_i ) 是實際值 ( \hat{y}_i ) 是模型的預測值 適用情境 : 與 MSE 類似,適合回歸問題。 結果的單位和原數據一樣,例如房價是 $10,000,那 RMSE = 8,...
最近的文章

Mac安裝python

  安裝Python 使用brew安裝Python https://diveintopython.dev.org.tw/learn/install/mac > brew install python  安裝失敗 > brew reinstall python@3.13 > export PATH="$PATH:/usr/local/bin/python3" > sudo ln -s /usr/local/bin/python3 /usr/local/bin/python >python

UUID&ULID

UUIDs&Uild 應用 UUIDs&Uild 應用 UUIDs 概念 UUID 出自 RFC 9562標準 可以保證跨空間與時間的唯一性,長度總共16bytes或128bits,表示隨機產生這些字串並在某些條件下保證不會重複,這種方式對分散式系統在建立物件ID的地方是很有效益,因為可以保證在分散式系統是唯一值或是保證碰撞的可能性較低,也常應用在微服務架構中。當產生一組隨機序號,字串其中中間4表示UUID的版本,9隨機亂數。 C#呼叫Guid.NewGuid()就是產生UUID字串的方式 範例: cb9ec1e3-0cb1- 4 e33- 9 ee1-e86b725964f8 UUID v4範例 for ( int i = 0 ; i < 10 ; i++) Console.WriteLine(Guid.NewGuid()) /* 輸出 cb9ec1e3-0cb1-4e33-9ee1-e86b725964f8 d7250a44-9ccf-4b21-af55-e13cef7bc09b 3793f197-2d7b-4cad-b5f3-2c88946feb97 08845d8c-cf31-4cc2-b4fb-c23d2426ec56 88bd93f7-116b-4418-8954-b116f2995ebf 2ac06c87-8e2d-4515-9d84-25ee324d9efd b9e911b0-a509-4d24-88ef-bc5739cc6024 91b2185c-92f7-4656-9bce-f9e0aba17181 7ca9976e-6cc4-424b-8453-2c591d9ba17f 1b4af183-d3cc-4571-b2c6-3b76a419b9c8 */ UUID 缺點 (1) UUID在資料庫insert會比較慢,如果大量寫入會很明顯 (2) UUID會造成index fragmentation, 因為UU...

C# DI 輕鬆學

C&num; DI 輕鬆學 C# DI 輕鬆學 DI 概念 IoC (Inversion of Control) - 控制反轉 定義:IoC 是一種設計原則,將對象的控制權從內部轉移到外部。具體而言,應用程式不再負責控制物件的建立與管理,而是將這些工作交給外部的容器或框架。 作用:通過將控制權反轉,可以讓應用程式更具彈性、更容易測試,並提高可維護性。 舉例: 傳統設計:類別 A 自行建立類別 B 的實例(new 關鍵字)。 IoC 設計:類別 A 的類別 B 由外部容器或框架提供,類別 A 不直接控制物件的建立。 DIP (Dependency Inversion Principle) - 相依反轉原則 定義:DIP 是 SOLID 原則中的一部分,主要指: 高層模組不應該依賴低層模組;兩者應依賴於抽象(介面或抽象類別),處處都介面。 抽象不應該依賴細節;細節應該依賴抽象。 目的:降低模組間的耦合性,使程式更靈活、更易於擴展。 舉例: 壞設計:類別 A 直接依賴類別 B。 好設計:類別 A 依賴於一個介面,由類別 B 實現該介面。 說明: 當使用 MSSQL 建立的 Repository 來存取資料表時,Service 類別會依賴該 Repository 類別進行資料操作。 也就是說,Service 與低層的 Repository 類別存在相依性。然而,假設有一天需要將 Repository 的實現改為使用 NoSQL 來存取資料,此時勢必需要重新改寫 Repository 的實作,而這種改變也會影響到 Service 類別的內部結構, 導致高層模組(Service)與低層模組(Repository)的耦合性過高。 為了解決這個問題,我們可以採用 DIP(依賴反轉原則) 的設計模式。在此模式下,我們會建立一個 IRepository 介面 ,定義高層模組與低層模組之間的契約。Service 類別只依賴於該介面,而不關心具體的...

Poetry 問題指南

  1. 安裝poetry > curl -sSL https://install.python-poetry.org | python3  >pip install poetry > poetry config virtualenvs.in-project true >poetry env use /usr/local/bin/python3.11 >poetry run python --version 2.  Poetry下任何指令都會出現No Python 問題 PS D:\雜項\python範例> poetry config --list No Python at '"C:\Users\Bryant.lin\AppData\Local\Programs\Python\Python311\python.exe'\ Ans: C:\Users\Bryant.lin\AppData\Roaming\pypoetry\venv\pyvenv.cfg 將內容python的目錄修改,就可以重新執行 home = C:\Users\Bryant.lin\AppData\Local\Programs\Python\Python313 include-system-site-packages = false version = 3.11.3 executable = C:\Users\Bryant.lin\AppData\Local\Programs\Python\Python313\python.exe command = C:\Users\Bryant.lin\AppData\Local\Programs\Python\Python313\python.exe -m venv --clear C:\Users\Bryant.lin\AppData\Roaming\pypoetry\venv

淺談機器學習原理-Nonlinear Transform

Nonlinear Transform 淺談機器學習原理-Nonlinear Transform Nonlinear Transform *通用能力 gerneralization : 就是將訓練好的模型,放到正式環境可以正常的運作,通常Linear Model的gerneralization會比較好,因為線性模型解決的問題比較單純。缺點是應用侷限比較大。 參考Chih-Chung Chang老師的範例:縣性與非線性分類範例 https://www.csie.ntu.edu.tw/~cjlin/libsvm/ 非線性問題 當如果今天假設要圈出裡面小圈圈的資料,我們就無法使用線性的模型,我們可以用非線性解像圈圈的方程式 s i g n ( − x 1 2 − x 2 2 + r ) sign(-x1^2-x2^2+r) s i g n ( − x 1 2 − x 2 2 + r ) 來解決,在演算法我們利用reduce來將不會的問題透過已知的問題來解決,所以在這個問題 我們將圈圈的方程式(非線性模型)reduce成線性模型來解決。 Reduce 方法論 我們調整圓形的方程式改為 z 0 z_0 z 0 ​ , z 1 z_1 z 1 ​ , z 2 z_2 z 2 ​ 來轉換線性方程式, { ( x n , y n ) } \{{(x_n,y_n)}\} { ( x n ​ , y n ​ ) } => { ( z n , y n ) } \{{(z_n,y_n)}\} { ( z n ​ , y n ​ ) } 在這空間資料中只要能找線,就可將不同的分類區分,圖中可以線性可以線去做分類。 透過向量方式來轉換成線性方程式 我們找到一個方式將非線性資料X透過向量轉換為Z後,希望透過線性方程式方式來學習,得到正解。 當我們Nonlinear transform轉換成線性方程式,當有新的資料進來我們無法使用invertiable(逆向工程)的方式去轉回非線...