<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>入門教學 on KnightLi的博客</title>
        <link>https://www.knightli.com/zh-tw/tags/%E5%85%A5%E9%96%80%E6%95%99%E5%AD%B8/</link>
        <description>Recent content in 入門教學 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Fri, 24 Apr 2026 11:17:13 +0800</lastBuildDate><atom:link href="https://www.knightli.com/zh-tw/tags/%E5%85%A5%E9%96%80%E6%95%99%E5%AD%B8/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>K-近鄰演算法入門：用鄰居投票理解機器學習分類</title>
        <link>https://www.knightli.com/zh-tw/2026/04/24/knn-algorithm-beginner-guide/</link>
        <pubDate>Fri, 24 Apr 2026 11:17:13 +0800</pubDate>
        
        <guid>https://www.knightli.com/zh-tw/2026/04/24/knn-algorithm-beginner-guide/</guid>
        <description>&lt;p&gt;&lt;code&gt;K-近鄰演算法&lt;/code&gt;，也常寫作 &lt;code&gt;KNN&lt;/code&gt; 或 &lt;code&gt;k-NN&lt;/code&gt;，是機器學習裡非常適合入門的一類演算法。它的想法很樸素：要判斷一個新樣本屬於哪一類，就看看它周圍最像它的幾個樣本大多屬於哪一類。&lt;/p&gt;
&lt;p&gt;如果一句話解釋 KNN，可以這樣說：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;近朱者赤，近墨者黑。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;比如你剛搬到一個社區，不知道附近哪家早餐店更適合學生。你問了離你最近的 5 個鄰居，裡面 4 個人都推薦同一家店，那你大概率也會先相信這家店。KNN 做分類時，也是在做類似的事情：找鄰居，看多數。&lt;/p&gt;
&lt;h2 id=&#34;1-先從一個小例子理解&#34;&gt;1. 先從一個小例子理解
&lt;/h2&gt;&lt;p&gt;假設我們要判斷一個水果是蘋果還是橘子。已知一些水果的特徵，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;重量&lt;/li&gt;
&lt;li&gt;顏色&lt;/li&gt;
&lt;li&gt;甜度&lt;/li&gt;
&lt;li&gt;表皮是否粗糙&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;現在來了一個新水果，我們還不知道它是什麼。KNN 不會先總結一套複雜規則，而是直接去已知水果裡找「最像它」的幾個。&lt;/p&gt;
&lt;p&gt;如果最像它的 5 個水果中，有 4 個是蘋果，1 個是橘子，那麼 KNN 就會判斷：這個新水果更可能是蘋果。&lt;/p&gt;
&lt;p&gt;這裡的 &lt;code&gt;K&lt;/code&gt;，就是「要看幾個鄰居」。如果 &lt;code&gt;K=5&lt;/code&gt;，就是看最近的 5 個樣本。&lt;/p&gt;
&lt;h2 id=&#34;2-一個簡單示意圖&#34;&gt;2. 一個簡單示意圖
&lt;/h2&gt;&lt;p&gt;下面用一個二維小圖來直觀理解。假設 &lt;code&gt;A&lt;/code&gt; 表示蘋果，&lt;code&gt;O&lt;/code&gt; 表示橘子，&lt;code&gt;?&lt;/code&gt; 是我們想判斷的新水果。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;甜度 ↑
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  高 |        A       A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     |           ?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     |       A       O
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  低 |   O       O
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     +--------------------→ 重量
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        輕              重
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果我們設 &lt;code&gt;K=3&lt;/code&gt;，就看離 &lt;code&gt;?&lt;/code&gt; 最近的 3 個點。假設最近的 3 個鄰居裡有 2 個 &lt;code&gt;A&lt;/code&gt;、1 個 &lt;code&gt;O&lt;/code&gt;，那 KNN 就會把 &lt;code&gt;?&lt;/code&gt; 判斷為 &lt;code&gt;A&lt;/code&gt;，也就是蘋果。&lt;/p&gt;
&lt;p&gt;這就是 KNN 最核心的過程：&lt;strong&gt;找最近的 K 個鄰居，然後投票。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-knn-的基本步驟&#34;&gt;3. KNN 的基本步驟
&lt;/h2&gt;&lt;p&gt;用不帶公式的方式看，KNN 的分類流程大概是這樣：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;準備一批已經標好類別的資料&lt;/li&gt;
&lt;li&gt;新來一個未知類別的樣本&lt;/li&gt;
&lt;li&gt;計算它和所有已知樣本的相似程度&lt;/li&gt;
&lt;li&gt;找出最相似的 K 個樣本&lt;/li&gt;
&lt;li&gt;看這 K 個樣本裡哪個類別最多&lt;/li&gt;
&lt;li&gt;把新樣本歸到這個類別&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這也是為什麼 KNN 很容易理解。它不像一些模型那樣需要先訓練出一堆參數，KNN 更像是把訓練資料先存起來，真正需要判斷時再去查鄰居。&lt;/p&gt;
&lt;p&gt;這種特點也讓 KNN 常被稱為一種「惰性學習」方法。這裡的「惰性」不是貶義，而是說它不會在訓練階段做太多計算，主要工作被推遲到了預測階段。&lt;/p&gt;
&lt;h2 id=&#34;4-什麼叫最近&#34;&gt;4. 什麼叫「最近」
&lt;/h2&gt;&lt;p&gt;KNN 裡的「最近」，不一定只是地圖上的距離。它通常表示「特徵上更相似」。&lt;/p&gt;
&lt;p&gt;比如判斷水果時，兩個水果如果重量接近、顏色接近、甜度接近，就可以認為距離更近。判斷使用者興趣時，如果兩個人看過的內容、點擊習慣、購買記錄很像，也可以認為他們更接近。&lt;/p&gt;
&lt;p&gt;所以 KNN 的關鍵不是「空間位置」，而是你怎麼描述一個樣本。&lt;/p&gt;
&lt;p&gt;常見特徵可以是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;商品價格、重量、銷量&lt;/li&gt;
&lt;li&gt;使用者年齡、瀏覽次數、購買頻率&lt;/li&gt;
&lt;li&gt;圖片的顏色、紋理、形狀&lt;/li&gt;
&lt;li&gt;文字中某些詞出現的情況&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;特徵選得好不好，會直接影響 KNN 的效果。&lt;/p&gt;
&lt;h2 id=&#34;5-k-值怎麼選&#34;&gt;5. K 值怎麼選
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;K&lt;/code&gt; 不是固定答案，而是需要根據資料來選。&lt;/p&gt;
&lt;p&gt;如果 &lt;code&gt;K&lt;/code&gt; 太小，比如 &lt;code&gt;K=1&lt;/code&gt;，模型會非常相信最近的那個樣本。這有時很敏感：如果最近的樣本剛好是噪聲資料，判斷就容易錯。&lt;/p&gt;
&lt;p&gt;如果 &lt;code&gt;K&lt;/code&gt; 太大，模型又會看太多鄰居，結果可能被遠處不太相關的樣本影響，分類邊界會變得模糊。&lt;/p&gt;
&lt;p&gt;可以把它理解成問人意見：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只問 1 個人：容易被個別意見帶偏&lt;/li&gt;
&lt;li&gt;問太多人：可能把不熟悉情況的人也算進來了&lt;/li&gt;
&lt;li&gt;問附近幾位最相關的人：通常更穩&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在二分類問題裡，很多時候會選奇數 K，比如 &lt;code&gt;3&lt;/code&gt;、&lt;code&gt;5&lt;/code&gt;、&lt;code&gt;7&lt;/code&gt;，這樣可以減少投票平局的情況。&lt;/p&gt;
&lt;h2 id=&#34;6-knn-不只可以做分類&#34;&gt;6. KNN 不只可以做分類
&lt;/h2&gt;&lt;p&gt;KNN 最常見的用途是分類，比如判斷：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;郵件是不是垃圾郵件&lt;/li&gt;
&lt;li&gt;圖片裡是貓還是狗&lt;/li&gt;
&lt;li&gt;使用者是否可能流失&lt;/li&gt;
&lt;li&gt;一條評論是正面還是負面&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但它也可以做迴歸。迴歸可以理解為預測一個數值。&lt;/p&gt;
&lt;p&gt;比如我們想估計一套房子的價格，可以找出和它最相似的幾套房子，然後參考這些房子的價格。不是投票選類別，而是把鄰居的數值做一個綜合估計。&lt;/p&gt;
&lt;p&gt;簡單說：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分類：鄰居投票，選類別&lt;/li&gt;
&lt;li&gt;迴歸：參考鄰居數值，估結果&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;7-加權-knn近一點的鄰居更重要&#34;&gt;7. 加權 KNN：近一點的鄰居更重要
&lt;/h2&gt;&lt;p&gt;普通 KNN 會讓每個鄰居的投票權差不多。但現實中，離得更近的鄰居通常更可信。&lt;/p&gt;
&lt;p&gt;比如有 5 個鄰居，其中 1 個和新樣本幾乎一模一樣，另外 4 個只是稍微有點像。完全平均投票可能不太合理。&lt;/p&gt;
&lt;p&gt;所以有一種改進思路叫「加權 KNN」：越近的鄰居，影響越大；越遠的鄰居，影響越小。&lt;/p&gt;
&lt;p&gt;這很好理解。你買手機時，和你預算、用途、品牌偏好都很接近的人，他的建議往往比泛泛而談的建議更有參考價值。&lt;/p&gt;
&lt;h2 id=&#34;8-knn-的優點&#34;&gt;8. KNN 的優點
&lt;/h2&gt;&lt;p&gt;KNN 的優點非常適合初學者理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路直觀，容易解釋&lt;/li&gt;
&lt;li&gt;不需要複雜訓練過程&lt;/li&gt;
&lt;li&gt;可以用於分類，也可以用於迴歸&lt;/li&gt;
&lt;li&gt;對一些邊界不規則的問題比較靈活&lt;/li&gt;
&lt;li&gt;新增資料時通常比較方便&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你剛開始學機器學習，KNN 是一個很好的起點。它能幫助你理解「樣本」「特徵」「距離」「分類」「訓練資料」這些基本概念。&lt;/p&gt;
&lt;h2 id=&#34;9-knn-的限制&#34;&gt;9. KNN 的限制
&lt;/h2&gt;&lt;p&gt;KNN 也有明顯短板。&lt;/p&gt;
&lt;p&gt;第一，預測時可能比較慢。因為每來一個新樣本，都要和很多已有樣本比較。如果資料量很大，計算成本會升高。&lt;/p&gt;
&lt;p&gt;第二，它很依賴特徵尺度。比如一個特徵是「收入」，動不動幾千幾萬；另一個特徵是「年齡」，通常幾十。如果不做處理，收入這個特徵可能會過度影響距離判斷。&lt;/p&gt;
&lt;p&gt;所以在使用 KNN 前，經常需要做資料標準化，讓不同特徵在比較時更公平。&lt;/p&gt;
&lt;p&gt;第三，它容易受無關特徵影響。如果你判斷水果類別，卻把「購買日期」這種無關資訊也放進去，模型可能會被干擾。&lt;/p&gt;
&lt;p&gt;第四，它對局部資料分布敏感。如果某一類樣本特別多，投票時可能更容易壓過其他類別。&lt;/p&gt;
&lt;h2 id=&#34;10-容易和-k-平均演算法混淆&#34;&gt;10. 容易和 K-平均演算法混淆
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;KNN&lt;/code&gt; 和 &lt;code&gt;K-平均演算法&lt;/code&gt; 名字裡都有 &lt;code&gt;K&lt;/code&gt;，但它們不是一回事。&lt;/p&gt;
&lt;p&gt;KNN 是監督學習，通常使用已經標好類別的資料來判斷新樣本。&lt;/p&gt;
&lt;p&gt;K-平均演算法更常用於聚類，也就是在沒有明確標籤時，把資料自動分成幾組。&lt;/p&gt;
&lt;p&gt;可以簡單記：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KNN：看鄰居，做分類或迴歸&lt;/li&gt;
&lt;li&gt;K-平均：找中心，把資料分組&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;11-什麼時候適合用-knn&#34;&gt;11. 什麼時候適合用 KNN
&lt;/h2&gt;&lt;p&gt;KNN 適合這些場景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;資料量不太大&lt;/li&gt;
&lt;li&gt;特徵比較容易表示成數值&lt;/li&gt;
&lt;li&gt;樣本之間的「相似程度」比較有意義&lt;/li&gt;
&lt;li&gt;需要一個容易解釋的基線方法&lt;/li&gt;
&lt;li&gt;想快速驗證一個分類思路是否可行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果資料量巨大、特徵非常多、預測速度要求很高，KNN 可能就不是最合適的選擇，或者需要配合更高效的近鄰搜尋方法。&lt;/p&gt;
&lt;h2 id=&#34;12-初學者應該記住什麼&#34;&gt;12. 初學者應該記住什麼
&lt;/h2&gt;&lt;p&gt;學 KNN 時，不需要一開始就鑽進複雜公式。先記住這幾個直覺就夠了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;KNN 用「鄰居」來判斷新樣本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;K&lt;/code&gt; 表示看幾個最近鄰居&lt;/li&gt;
&lt;li&gt;分類時靠投票，迴歸時參考鄰居數值&lt;/li&gt;
&lt;li&gt;特徵選擇和資料標準化很重要&lt;/li&gt;
&lt;li&gt;&lt;code&gt;K&lt;/code&gt; 太小容易受噪聲影響，太大又可能變得遲鈍&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;KNN 的價值不只是它本身能解決一些問題，更在於它把機器學習裡幾個基礎觀念講得很清楚：資料如何表示、相似度如何衡量、預測如何從已有樣本中產生。&lt;/p&gt;
&lt;p&gt;只要理解了「找相似樣本，再根據鄰居做判斷」這件事，就已經抓住了 KNN 的核心。&lt;/p&gt;
&lt;h2 id=&#34;相關連結&#34;&gt;相關連結
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://zh.wikipedia.org/wiki/K-%E8%BF%91%E9%82%BB%E7%AE%97%E6%B3%95&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;K-近鄰演算法 - 維基百科&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
