---
# System prepended metadata

title: 林軒田機器學習筆記
tags: [Lecture2, 機器學習, 林軒田]

---

# Learning to Answer Yes/No 
## A Simple Hypothes is Set: the ‘Perceptron’
在這個模型中，使用者的特徵被抽象為一個 N 維的特徵向量，符號化表示為 x = [x₁, x₂, ..., xn]，其中每個 xᵢ 代表著特定特徵的數值表現。這些特徵在模型中透過與對應的權重 wᵢ 進行點積運算，從而導出線性組合總和 ∑(wᵢ * xᵢ)。

線性組合的總和再經過一個事先定義的閾值，得到一個量 h(x) = ∑(wᵢ * xᵢ) - 閾值，該值反映了使用者特徵的權重加權綜合評分。

當 h(x) 大於等於 0 時，該模型會將使用者的分數增加 1，表示使用者已經達到預定的分數閾值。一旦使用者的分數達到指定閾值，系統將觸發卡片發送機制，向使用者發送卡片作為成就或獎勵的象徵。

總結而言，該系統運用感知器的思想，通過特徵向量與相對應權重的線性組合，計算使用者特徵的綜合評分，並藉由特定的分數閾值來决定是否向使用者發送卡片，實現了一種以數值驅動的自動化決策機制。

![](https://hackmd.io/_uploads/B11r4NJh3.png)

## 門檻值轉換公式
在此模型中，我們運用內積的性質，將閾值轉換為向量相乘的形式，並將特徵向量與權重向量的加權總和視為兩個向量的內積，以精簡計算公式。

假設 x 代表顧客的資料向量，包含特徵數據，而 x₀ 則為一維常數項。同樣地，w 是特徵權重向量，w₀ 表示常數項的權重。

我們通過 x 與 w 的內積運算，即 x · w，獲得使用者特徵向量和特徵權重向量的加權總和。這個內積值將與 x₀ 和 w₀ 之間的內積，即 x₀ · w₀，相加。這種處理方式將向量相乘的概念與計算結合，以更簡明的內積運算表示整個計算過程。

![](https://hackmd.io/_uploads/SkD0rE133.png)

## 線性分類器
如果是分類問題的話，寫出來的式子會像回歸方程式。

![](https://hackmd.io/_uploads/BJltvN12n.png)

# 設計演算法算岀一個理想的線
## 如何設計一條適合的線
1. 先有一條線在手上，慢慢學習
2. 從gO出發

## 演算法設計方式
1. 一開始有一個w，某個點得出來後做修正
2. wt+1←wt+yn(t)xn(t)
    * 正確答案要的符號是正的，把x轉回來
    * 正確答案要的符號是負的，把x轉出去
3. 更新到不在犯錯的時候
4. 有幾種更新方式：
    * a full cycle of not encountering mistakes（常見的方法）
    * naïve cycle(1,···,N)
    * precomputed random cycle 
![](https://hackmd.io/_uploads/By0DtNknh.png)

## PLA會不會停下來？
1. yn=sign(WfXn)
2. 看說Wf跟wt接不接近（內積的值越大，代表越接近） 
![](https://hackmd.io/_uploads/SkU4ndyn3.png)

### PLA要處理向量長度的問題
向量內積的增大可能來自於向量的長度增加，但這樣的情況並未考慮在權重更新過程中的限制。

事實上，在更新過程中，只有在權重向量 w_t 與特徵向量 x_n 的內積小於 0 時，我們才會進行權重更新。因此，下面的推導公式中，第二項項目必然小於等於 0。這意味著，權重向量 w_t+1 只受到後方所標註的那個項目的更新所影響。

進一步考慮，我們將輸出 y_n 與最大特徵值 x_n 的平方進行比較。這就意味著我們在正規化過的兩個向量進行內積，如果其結果超過某個閾值，則表示這兩個向量越來越接近。

由於正規化後的向量內積的最大值為 1，當更新過程進行到最後，感知器學習算法將自然停止。這是因為向量內積長度的極限是 1，我們無法再進一步對權重進行有效的調整。

![](https://hackmd.io/_uploads/SJGZAdkh3.png)

## 好處和壞處
* Pros：simple to implement, fast, worksin any dimension d 
* Cons：
    * ‘assumes’ linear separable D to halt 
    * property unknown inadvance(no need for PLA if we knoww f)

## 如何找一條線
1. 找一條犯的錯誤最少
目前沒有辦法解決這個問題：
![](https://hackmd.io/_uploads/B1xOkt132.png)

2. 找一個差不多的線解決這個問題：
    * 口袋演算法：
        * 用隨機的更新方式
        * 每次找到PLA後，就跟口袋的比較，找到比較好的就丟掉原本的，留下比較好的

![](https://hackmd.io/_uploads/B1j1gFknn.png)









---

資料來源：https://www.csie.ntu.edu.tw/~htlin/mooc/







