李奕憲

@kenny88881234

Joined on Jan 20, 2017

  • 基本簡介 什麼是 .Net Core 微軟開發的第一個跨平台的應用程式開發框架 為 .NET 5 + 之前版本的名稱 .NET Core 1.0、1.1、2.0、2.1、2.2、3.0、3.1 .NET 5、6
     Like 1 Bookmark
  • JQuery 為 Javascript 的函式庫 ( Library ) 在各瀏覽器的 Javascript 寫法不一樣,JQuery 統一了寫法 引入 : <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script> JQuery API JQuery basic $(document).ready(function(){ $("p").text("Hello World!"); });
     Like  Bookmark
  • 基本特性 泛用的程式語言 強調效能 易學 垃圾回收 ( 內存管理 ) 編譯語言 ( Compiled language ) 安裝 下載地址 : Golang 官方網址
     Like  Bookmark
  • # [筆記] Golang 撰寫共時性 ( Concurrency ) ### 為什麼使用共時性 目前的 CPU 時脈已達到上限,硬體大多往多核心發展,然而如果程式碼沒有共時性,則無法真正地發揮平行處理使效能提升 #### 共時性 ( Concurrent ) 與平行處理 ( Parallel ) 的差別 * 共時性 : 每個工作結束後,另外一個工作才會開始 ![](https://i.imgur.com/Rq7N9Lo.png) * 平行處理 : 在同個時間運行多個工作 ![](https://i.imgur.com/6zUY5yO.png) #### 撰寫共時性程式碼要做的事 * 我們需要決定哪個工作可以被平行處理 * 撰寫程式時,我們不需考慮將工作對應到硬體,由這些處理 : * Operating system * Go runtime scheduler #### Hiding Latency 既然共時性無法同個時間運行多個工作,那為何需要共時性呢? * 就算沒有平行處理,共時性也可以改善效能 * 許多工作需要定期去等待一些東西,例如
     Like  Bookmark
  • # [筆記] 機器學習 大規模的機器學習 > It's not who has the best algorithm that wins. It's who has the most data. * 大規模的機器學習是用來處理大數據的算法 * 可以先使用較少的資料,並畫出學習曲線,判斷是否需要用到大數據 * 當資料量較大時,會使梯度下降算法 ( 批量梯度下降 batch gradient descent ) 的計算量非常大,因此必須使用不同的梯度下降算法 ### 隨機梯度下降 ( stochastic gradient descent ) 1. 資料預處理,將資料打亂 2. 循環運算資料 1 到 m,每筆資料做一次迭代 * Repeat ( 整個循環可能循環計算 1 ~ 10 次,取決於資料量大小 ) * for i = 1 to m * $\theta_j$ = $\theta_j - \alpha(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)}$ ( for j = 0, 1, ...,
     Like  Bookmark
  • # [筆記] 機器學習 應用實例 : Photo OCR * 光學字符識別 Photo OCR ( photo optical character recognition ) * 目的 : 讓計算機讀出照片中拍到的文字信息 ### Machine Learning pipeline ![](https://i.imgur.com/tJsgTk0.png) * Photo OCR 步驟 : 1. 文字檢測 ( Text detection ) : 把圖像瀏覽一遍,找出哪裡有文字信息 ![](https://i.imgur.com/CGYOjwN.png) 2. 字符分割 ( Character segmentation ) : 將區域內的文字信息分割成獨立字符 ![](https://i.imgur.com/78XDGBn.png) 3. 字符識別 ( Character recognition ) : 運行分類器辨識這些字符 ![](https://i.imgur.com/g6MAFK
     Like  Bookmark
  • # [筆記] 依賴注入 DI、控制反轉 IoC、依賴反轉原則 DIP >DI is about wiring, IoC is about direction, and DIP is about shape. * 依賴注入 ( Dependency Injection ) : 為一種**設計模式**,將依賴通過注入的方式提供給需要的 class,是 IoC 與 DIP 的具體表現 * 控制反轉 ( Inversion of Control ) : 為一種**思想**,函式主要功能之外的其他功能應該由第三方完成 * 依賴反轉原則 ( Dependency-Inversion Principle ) : 為一種**思想**,較高層次的模組不應該依賴較低層次的被模組,應該提供接口讓較低層次的模組實現 * 目的都是為了**解偶**,使程式**好維護**,且更**容易測試** ### 依賴反轉原則 * 原則 : * 高階模組不該依賴於低階模組,兩者都該依賴抽象 * 抽象不依賴具體實作方式,具體實作方式則依賴抽象 * 雖然透過依賴反轉原則可以改變依賴於抽象,但程式上
     Like 6 Bookmark
  • # [筆記] 機器學習 推薦系統 ( Recommender Systems ) * 以下例子會用到這些 : * n<sub>u</sub> : 使用者人數 * n<sub>m</sub> : 電影數量 * r(i, j) : 如果使用者 j 有評價電影 i,則 r(i, j) 為 1 * y<sup>(i, j)</sup> : 使用者 j 對於電影 i 的評價 ( 前提是 r(i, j) 為 1 ) ### 基於內容推薦 ( content based recommendations ) * 使用線性回歸來預測 * 對於每個使用者 j,訓練出 θ<sup>(j)</sup> ( 因為有 n + 1 項特徵值,包含 x<sub>0</sub> ),使用 $(\theta^{(j)})^Tx^{(i)}$ 預測使用者 j 對於電影 i 的評價 * θ<sup>(j)</sup> 為使用者 j 對應的參數向量 * x<sup>(i)</sup> 為電影 i 的特徵值 ( 包含 x<sub>0</sub> = 1 )
     Like  Bookmark
  • # [筆記] 機器學習 異常檢測 ( Anomaly detection ) * 主要用於非監督式學習 * 假設有一組資料 : {x<sup>(1)</sup>,x<sup>(2)</sup>,...,x<sup>(m)</sup>} * 異常檢測用於檢查新的一筆資料 x<sub>test</sub> 是否異常 * p(x<sub>test</sub>) < ε : 可能異常 * p(x<sub>test</sub>) ≥ ε : 正常 ![](https://i.imgur.com/ZxBarcV.png) * 常見的應用 * 欺詐檢測 ( Fraud detection ) : * 對不同的用戶計算特徵變量 : 登入頻率、訪問某頁面的次數、發文次數、打字速度...等 * 根據這些資料建立一個模型 p(x) * 對 p(x) < ε 的可能異常用戶,進一步篩選或要求驗證身分 * 工業生產領域 : * 檢查是否有異常飛機引擎...等 * 數據中心的計算機監控 :
     Like 1 Bookmark
  • # [筆記] 機器學習 降維 ( Dimension Reduction ) 與 PCA ### 使用降維的原因 1. 資料壓縮 * 降低記憶體佔用空間 * 增加運算效率 ![](https://i.imgur.com/HQ32n7E.png) * 將 2 維降為 1 維 2. 資料可視化 * 將多維降到 2 維或 3 維 * 進行資料可視化,可以更了解資料 ![](https://i.imgur.com/VMyrxx0.png) * 多維資料 ![](https://i.imgur.com/7MkkIOn.png) * 降為 2 維並可視化 ### 主成成分分析法 PCA ( Principal Componet Analysis ) * PCA 的目的為 : 假設我們要將資料從 n 維降到 k 維,找到 k 個向量 u<sup>(1)</sup>,u<sup>(2)</sup>,...,u<sup>(k)</sup>,將資料投影到這些向量時,投影距離誤差能夠最小化 * PCA 與線性回歸的差別
     Like  Bookmark
  • # [筆記] 機器學習 聚類 ( Clustering ) * 屬於非監督式學習 * 使用的是未標記的資料,{x<sup>(1)</sup>, x<sup>(2)</sup>, x<sup>(3)</sup>, ..., x<sup>(m)</sup>} * ![](https://i.imgur.com/DYlffFf.png) ### K 均值算法 ( K-Means ) 1. 隨機選擇 i 個點叫做聚類中心 ( cluster centroids ),因為要分成 i 類 ![](https://i.imgur.com/KsnAKb6.png) 2. 進行聚類分配,所有資料點依照對聚類中心的遠近做分配 ![](https://i.imgur.com/5ZB6Gpu.png) 3. 移動聚類中心,依照分配到的點,移動聚類中心到這些點的均值處 ![](https://i.imgur.com/XeOftGn.png) 4. 重複上面 2、3 點,直到聚類中心不變 ![](https://i.imgur.com/iVfd
     Like  Bookmark
  • # [筆記] Golang 進階 ### 函式 ( Function ) #### 為甚麼要使用函式 1. 可重複使用性 ( Reusability ) : * 不須重複撰寫功能相似的程式碼 * 宣告一個函式後可重複使用 2. 抽象化 ( Abstraction ) : * 使用時不須特別了解函式的詳細內容 * 使用時只需知道需要的參數與此函次的功能 * 依函式命名,可以清楚了解主程式碼在做甚麼 #### 函式的參數與回傳值 1. 參數 ```go= func foo (x int, y int) { fmt.Print(x * y) } ``` ```go= func foo() { fmt.Print("Hello") } ``` * 函式可以有參數傳入,也可以不用 ```go= func foo (x, y int) { fmt.Print(x * y)
     Like  Bookmark
  • # [實作] 將 Hexo blog 搬家到 Gitlab * 因為 Gitlab 可以設定自動建置與部屬,所以就被吸引搬家過去啦 ### 1. 在 Gitlab 上新建 Project ![](https://i.imgur.com/hshdptO.png) * 新建 Project ![](https://i.imgur.com/NCBGqxB.png) * Project 名稱輸入 : `<Gitlab 帳號>.gitlab.io` * 建議用私人 ( Private ) ### 2. 建立 SSH 連線 * 跟 Github 一樣,如果想同時擁有 Github 與 Gitlab 的連線可以參考 : [同一部電腦管理 Github 與 Gitlab SSH keys](https://kennyliblog.nctu.me/2019/08/18/Have-SSH-keys-with-Github-and-Gitlab/) ### 3. 將本地端項目加到 Gitlab ```shell= $ git remote rename origin old-origin
     Like  Bookmark
  • # [實作] 同一部電腦管理 Github 與 Gitlab SSH keys * 我們如果在同一部電腦需要用到 Github 與 Gitlab 時,SSH key 當然不可能用同一個,那如何管理 SSH key 呢,步驟如下 : ### 1. 使用 `ssh-keygen` 產生兩個 SSH keys ```shell= $ ssh-keygen ``` ![](https://i.imgur.com/8mvEcXb.png) * 產生第一個 SSH key 時,可以不斷 `Enter`,但第二個就必須在此給檔案命名,否則會把第一個 SSH key 覆蓋掉 ### 2. 檢查檔案 ![](https://i.imgur.com/6hgSDmB.png) * 可以看到存在 `id_rsa.pub` 與 `id_rsa_gitlab.pub` ### 3. 新增並配置文件 ```shell= $ touch config ``` * 在 `.ssh` 底下新增文件 `config` ```= # github Host github.com Hos
     Like  Bookmark
  • # [筆記] 機器學習 支持向量機 ( Support Vector Machines ) * 簡稱 SVM * 屬於監督式學習算法 * 主要用於找到一個決策邊界 ( decision boundary ) 讓兩類的邊界 ( margins ) 最大化 * 大間距分類器 ( Large margin classifiers ) ### SVM 的代價函數 * ![](https://i.imgur.com/VKJLCuF.png) * 將 `邏輯回歸的代價函數` * $\dfrac{m}{λ}$ * 可以將 `C` 看成 $\dfrac{1}{λ}$,優化目標相同,SVM 的 `C` 與邏輯函數的 `λ` 只是透過不同方法來控制權重 * 這裡 h<sub>θ</sub>(x) 的定義 : * h<sub>θ</sub>(x) = 1,if θ<sup>T</sup>x ≥ 0 * h<sub>θ</sub>(x) = 0,otherwise * cost<sub>1</sub>(z) 與 cost<sub>0</sub>(z) 的圖 :
     Like  Bookmark
  • # [問題] 如何在 Hexo 上使用數學式 平常很習慣先用 HackMD 寫好筆記或文章後,再複製起來貼到 Hexo 上,但最近寫的筆記需要使用到數學式,一開始在 HackMD 撰寫渲染都很正常,但一貼到 Hexo 上,數學式就出錯了 ![](https://i.imgur.com/iPKFyM4.png) * 在 Hexo 上的顯示 ![](https://i.imgur.com/7eFcUWF.png) * 正常的顯示 ### 問題描述 : 因為 Hexo 本身沒有支援數學式的顯示,所以必須更換渲染引擎使用 mathJax 來渲染數學式 ### 解決問題 : 這邊是使用 `hexo-theme-melody` 的主題,所以是依照他們的文件解決 1. 更換渲染引擎 ```shell= $ npm uninstall hexo-renderer-marked --save ``` * 先將 Hexo 原本的渲染引擎 `marked` 刪除,在部落格的根目錄執行 ```shell= $ npm install h
     Like  Bookmark
  • # [問題] Hexo 部署上 Github 後頁面全空了 昨天晚上回到家想改個 Blog 的文章,於是就很正常的把在公司 `git push` 的程式碼 `git pull` 下來,沒想到改完 `hexo d -g` 部署上去後,頁面全空了 ### 問題描述 : 通常我們使用別人的主題時都是 `git clone -b master <主題地址> themes/<主題名稱>` 這樣直接 clone 到自己的專案內 這時因為**別人的專案 ( themes ) 也有它自己的 `.git` 檔**,所以在我們的專案 `git push` 時,是不會提交 themes 上去的,導致我們在別台電腦 `git pull` 下來時,根本沒有拉到主題文件夾 ![](https://i.imgur.com/exSD6jj.png) * 在我們的專案 `git push` 後,Github 只顯示主題名稱文件夾,但沒有內容 為了要提交 themes 上去,我們要**在 themes 文件夾中 `git push` 一次,然後在我們的專案 `git push` 一次** ### 解決問題
     Like  Bookmark
  • # [筆記] 機器學習 系統的設計 ### 提高機器準確性的方法 * 收集大量數據 * 開發複雜的特徵量 * 開發算法以不同方式處理輸入 P.S. 很難說哪個項目最有用 ### 誤差分析 ( Error analysis ) 1. 從簡單的算法開始,快速實作,並在交叉驗證集測試 2. 繪製出學習曲線,已確定算法該往哪個方向進行 3. 手動檢查交叉驗證集中錯誤的資料,查找這些資料大多數發生錯誤的特徵 * 例如 : 分類垃圾郵件時,釣魚郵件大多數分類錯誤,就針對釣魚郵件下去改善算法 5. 將錯誤結果數值化很重要,否則很難評估算法性能 P.S. 分析時**最好用交叉驗證集測試**,如果用測試集去做誤差分析,算法只會越來越偏向測試集,在最後完成算法時,測試結果就會變得沒什麼參考價值 ### 偏斜類 ( Skewed classes ) 問題 * 偏斜類是指大量的樣本傾向了某個類型,例如 : * 通過邏輯回歸來預測病人是否有罹患癌症 * `y = 1` 為罹癌,`y = 0` 為沒有罹癌 * 假設此錯誤率只有 1%,但我們的測試集
     Like  Bookmark
  • # [筆記] 機器學習 有效的改善模型 ### 改善方法 * 取得更多訓練資料 * 嘗試較少的特徵量 * 嘗試較多的特徵量 * 嘗試多項式的特徵量 * 嘗試增加 λ * 嘗試減少 λ ### 機器學習診斷法 ( Machine learning diagnostic ) #### 評估假設 ( Evaluating a Hypothesis ) * 我們的假設可能使訓練樣本的誤差較小,但仍然不準確 ( 因為過度擬合 ),這時就必須評估假設 * 為了評估假設,將訓練樣本分為兩組 : 1. 70% 的隨機數據當訓練集 2. 30% 的隨機數據當測試集 * 過程 : 1. 使用新的訓練集學習出 θ 和最小化的 J<sub>train</sub>(θ) 2. 使用新的測試集計算出測試集錯誤率 ( The test set error ) J<sub>test</sub>(θ) * 測試集錯誤率 ( The test set error ) 1. 線性回歸 : ![](https://i.imgur.com/RESZL8X.png)
     Like  Bookmark
  • # [筆記] 機器學習 過度擬合問題 ( overfitting ) ### 過度擬合 ( overfitting ) 與擬合不足 ( underfitting ) ![](https://i.imgur.com/L1q43Qf.png) * 過度擬合 ( 右圖 ) * 特徵量過多,資料量過少 * 解決方法 : 1. 降低特徵量 * 人工檢查,保留較重要的特徵量 * 也有演算法 ( model selection algorithm ) 可以選擇何為較重要的特徵值 2. 正規化 * 可以保留所有的特徵量,但減少 θⱼ 的大小 * 當擁有需多有用的特徵量時,正規化是很有效的使所有特徵量都會有貢獻 * 擬合不足 ( 左圖 ) * 特徵量過少 ### 正規化 ( Regularization ) #### 代價函數 原理 : 將 θⱼ 乘上較大的係數,可以使 θⱼ 大幅下降,降低一些特徵值的影響力 * 例如 : ![](https://i.im
     Like  Bookmark