機器學習 有效的改善模型
[筆記] 機器學習 有效的改善模型改善方法 取得更多訓練資料 嘗試較少的特徵量 嘗試較多的特徵量 嘗試多項式的特徵量 嘗試增加 λ 嘗試減少 λ 機器學習診斷法 ( Machine learning diagnostic )評估假設 ( Evaluating a Hypothesis ) 我們的假設可能使訓練樣本的誤差較小,但仍然不準確 ( 因為過度擬合 ),這時就必須評估假設 為了評估假設,將訓練樣本分為兩組 : 70% 的隨機數據當訓練集 30% 的隨機數據當測試集 過程 : 使用新的訓練集學習出 θ 和最小化的 Jtrain(θ) 使用新的測試集計算出測試集錯誤率 ( The test set error ) Jtest(θ) 測試集錯誤率 ( The test set error ) 線性回歸 : 邏輯回歸 : 判斷是否錯誤 算出錯誤率 模型選擇 ( Model selection ) 鑑於具有需多不同的多項式模型,我們必須要有方法來做模型的選擇 將訓練樣本分為三組 : 60% 的隨機數據當訓練集 20% 的隨機數據當交叉驗證...
機器學習 神經網路 - 進階學習
[筆記] 機器學習 神經網路 - 進階學習代價函數與反向傳播算法 ( Backpropagation )符號定義 : L : 神經網路中擁有的層數 sₗ : 第 l 層中的單元個數 K : 輸出的單元 ( 分類 ) 個數 神經網路的代價函數 神經網路中的代價函數 過往的正規化就是計算輸出層中的每個單元 而在神經網路則是機算整個網路中的所有單元 此 i ( 後者 ) 並非訓練資料的 i ( 前者 ) 反向傳播算法 ( Backpropagation ) 是一種訓練神經網路的常見方法,與梯度下降結合使用,目的是找到一組能最大限度地減小誤差的權重 演算法 : 假設有訓練資料 {(x⁽¹⁾, y⁽¹⁾) ... (x⁽ᵐ⁾, y⁽ᵐ⁾)} 設定 Δᵢⱼ⁽ˡ⁾ := 0 ( for all l, i, j ) For i = 1 to m : 設定 a⁽¹⁾ := x⁽ⁱ⁾ 計算 a⁽ˡ⁾ ( for l = 2, 3, ..., L ) 使用 y⁽ⁱ⁾ 計算 δ⁽ᴸ⁾ = a⁽ᴸ⁾ - y⁽ⁱ⁾,L 代表 output layer 使用 δ⁽ˡ⁾ = ((Θ⁽ˡ⁾...
機器學習 神經網路 ( Neural Network ) - 表層結構
[筆記] 機器學習 神經網路 ( Neural Network ) - 表層結構為什麼使用神經網路 在特徵量多的情況下,在非線性回歸算法裡,會產生很多的特徵項,這並不是一個解決複雜非線性問題的好辦法 假設我們要分類 50 * 50 像素的灰階圖片 : 此特徵量 n = 2500 ( RBG 的話就是 n = 7500 ) 那麼 xᵢ * xⱼ 的所有條件就有 2500 * 2500 / 2 ≈ 300 萬 這樣的計算成本太高了 而神經網路是個能輕鬆解決非線性問題的算法 神經網路最初產生的目的是模擬人類的大腦,早期不盛行的原因是,當時硬體無法支撐如此龐大的運算 神經網路模型的運作神經網路的模型 在前面輸入特徵 x₀ ~ xₙ x₀ 是一個偏置單元 ( bias unit ),始終為 1 最後的輸出則是我們假設函數的結果 在神經網路中最基本我們使用跟分類中相同的邏輯函數 ,有時會稱為激勵函數 ( sigmoid activation function ),之後也會有其他種的函數,例如 : TanH、ReLU theta 有時也被稱為權重 ...
機器學習 過度擬合問題 ( overfitting )
[筆記] 機器學習 過度擬合問題 ( overfitting )過度擬合 ( overfitting ) 與擬合不足 ( underfitting ) 過度擬合 ( 右圖 ) 特徵量過多,資料量過少 解決方法 : 降低特徵量 人工檢查,保留較重要的特徵量 也有演算法 ( model selection algorithm ) 可以選擇何為較重要的特徵值 正規化 可以保留所有的特徵量,但減少 θⱼ 的大小 當擁有需多有用的特徵量時,正規化是很有效的使所有特徵量都會有貢獻 擬合不足 ( 左圖 ) 特徵量過少 正規化 ( Regularization )代價函數原理 : 將 θⱼ 乘上較大的係數,可以使 θⱼ 大幅下降,降低一些特徵值的影響力 例如 : θ₃、θ₄ 會大幅下降,甚至可以忽略 θ₀ + θ₁x + θ₂x² + θ₃x³ + θ₄x⁴ → θ₀ + θ₁x + θ₂x² 正規化後的代價函數 λ 為正規化參數,如果過大會因為 θⱼ ( j ≠ 0 ) 全都趨近於 0 導致 underfitting 正規化線性回歸 ( Reg...
Golang 基礎
[筆記] Golang 基礎基本特性 泛用的程式語言 強調效能 易學 垃圾回收 ( 內存管理 ) 編譯語言 ( Compiled language ) 安裝下載地址 : Golang 官方網址 流程 撰寫程式 1234567package main //可執行的城市必須使用 mainimport "fmt" //載入內建 fmt 封包,用來做基本輸出輸入func main() { fmt.Println("Hello")} 建置 ( build ) : go build <檔名>.go 建置完會出現 .exe 檔 執行程式 : 直接在終端機打上 ./ + .exe 檔的檔名 Workspaces src : 放置原始碼檔案 pkg : 放置使用到的函式庫 bin : 放置執行檔 資料、資料型態、變數資料型態 int : 整數 ( int8、int16、int32、int64、uint8、uint16… ) float64 : 浮點數 ( float32、complex128 ) 1v...
機器學習 邏輯回歸
[筆記] 機器學習 邏輯回歸用於分類 ( Classification ) 邏輯回歸算法 ( Logistic Regression )hθ(x) = g(θᵀx) : 邏輯回歸算式 邏輯函數 ( Logistic Function ) 又稱 S 函數( Sigmoid Function ) 此函數圖如下 : 此函數可以將任何實數映射到 (0, 1) 區間內 假如 hΘ(x) = 0.7,那預測為 1 的機率是 70%,為 0 的機率是 30% hθ(x) = P(y=1 | x;θ) = 1 − P(y=0 | x;θ) P(y=0 | x;θ) + P(y=1 | x;θ) = 1 123456function g = sigmoid(z)g = zeros(size(z));g = 1 ./ (1 + e .^ -z);end 在 Octave 上的邏輯函數函式 決策邊界 ( Decision Boundary ) 為了得到 0 與 1,按此轉換 : hθ(x) ≥ 0.5 → y = 1 hθ(x) < 0.5 → y = 0 套...
C# 如何使用全域變數
[問題] C# 如何使用全域變數在 C# 想宣告全域變數,在最外層直接宣告是不行的,C# 中並沒有宣告全域變數的方式,一般都是透過屬性 ( property ) 或靜態變數 ( static ) 來達成 靜態變數 ( static )1234public class Global{ public static int x = 0;} 屬性 ( property )123456789101112131415161718public class Global{ private string _x = "test"; public string X { get //用來回傳給用戶讀取 { return this._x; } set //開放給用戶修改 { this._x = value; } } p...
機器學習 基礎與線性回歸
[筆記] 機器學習 基礎與線性回歸定義 : A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E. 使用訓練資料產出一個函式 h,再用 h 去判斷 input x 產出 output y Octave for Microsoft Windows 主要用於數值分析的軟體,在初學機器學習很好用 下載地址 : Octave 官方網站 下載地址 下載 installer 後不斷 next 就能安裝完成了 P.S.下載任何版本都可以,但不要下載 Octave 4.0.0,此版本有重大的 bug Supervised learing ( 監督式學習 ) 定義 : 機器去學習事先標記過的訓練範例 ( 輸入和預期輸出 ) 後,去預測這個函...
Octave 基礎
[筆記] Octave 基礎運算語法 + : 加 - : 減 * : 乘 / : 除 ^ : 次方 邏輯語法 == ~= : 不等於 && || xor() 矩陣創建 A = [1 2; 3 4; 5 6] : 創建矩陣 v = n:i:m : 生成 n 到 m,間隔 i 的矩陣 v = n:m : 生成 n 到 m,間隔 1 的矩陣 ones(n, m) : 生成都是 1 的矩陣,n rows,m columns zeros(n, m) : 生成都是 0 的矩陣,n rows,m columns rand(n, m) : 生成 0 到 1 內隨機數字的矩陣,n rows,m columns randn(n, m) : 生成常態分配的矩陣,n rows,m columns hist(變數, n) : 生成 n 個數據的直方圖 eye(n) : 生成 n*n 的單位矩陣 magic(n) : 生成 nn 矩陣,內涵元素為 1 ~ n n,每行每列斜對角總和相同 矩陣操作查看 disp(A) : 將 A 矩陣打印出來 A(n, m) : 查看 n row,m ...
BeautifulSoup 解析後無法存入 MySQL
[問題] BeautifulSoup 解析後無法存入 MySQL在練習爬蟲,使用 BeautifulSoup 分析 HTML 後,準備將資料存進 MySQL 時,出現 Python 'navigablestring' cannot be converted to a MySQL type 的錯誤 問題描述 :navigablestring 是 BeautifulSoup 中的一種類型 <class 'bs4.element.NavigableString'>,不是 MySQL 所認識的類型,所以會導致存入失敗 解決問題 :只要將要存入的參數轉換類型就可以了,有兩種方法 : str(<要轉換的參數>) <要轉換的參數>.encode('utf-8') P.S. 當然你的資料庫要能接受 UTF-8 編碼 12345678testdb = MySQL.connect( host = "localhost", user = "root", p...




