機器學習中的Find S演算法


機器學習演算法徹底改變了我們從海量資料中提取有價值的見解和做出明智決策的方式。在眾多演算法中,Find-S演算法作為該領域的基本工具而脫穎而出。該演算法由Tom Mitchell開發,在假設空間表示和概念學習中具有重要意義。

Find-S演算法以其簡潔性和效率而受到關注,因為它能夠從標記的訓練資料中發現和泛化模式。在本文中,我們將深入探討Find-S演算法的內部工作原理,探索其功能及其在現代機器學習正規化中的潛在應用。

什麼是機器學習中的Find-S演算法?

S演算法,也稱為Find-S演算法,是一種機器學習演算法,它試圖根據標記的訓練資料找到最大限度上具體的假設。它從最具體的假設開始,並透過合併正例來泛化它。在學習過程中,它忽略負例。

該演算法的目標是透過逐步擴充套件假設空間,直到覆蓋所有正例,從而發現準確表示目標概念的假設。

Find-S演算法中使用的符號

在Find-S演算法中,以下符號通常用於表示不同的概念和操作:

  • ∅ (空集)  此符號表示不存在任何特定值或屬性。它通常用於將假設初始化為最具體的概念。

  • ? (無關緊要)  問號符號表示屬性的“無關緊要”或“未知”值。當假設需要概括正例中存在的不同屬性值時,使用它。

  • 正例 (+)  加號符號表示正例,即標記為目標類別或正在學習的概念的例項。

  • 負例 (−)  減號符號表示負例,即標記為非目標類別或概念的例項,假設不應涵蓋這些例項。

  • 假設 (h)  變數h表示假設,它是根據訓練資料學習的概念或泛化。它在整個演算法中迭代地被細化。

這些符號有助於表示和操作假設空間,並在假設細化過程中區分正例和負例。它們有助於捕獲目標概念並將其準確地泛化到未見例項。

Find-S演算法的內部工作原理

Find-S演算法在一個假設空間上執行,以找到一個能夠根據標記的訓練資料準確表示目標概念的通用假設。讓我們深入瞭解該演算法的內部工作原理:

  • 初始化  該演算法從最具體的假設開始,表示為h。這個初始假設是最嚴格的概念,通常假設沒有正例。它可以表示為h = <∅, ∅, ..., ∅>,其中∅表示每個屬性的“無關緊要”或“未知”值。

  • 迭代過程  該演算法迭代處理每個訓練示例,並根據示例是正例還是負例來細化假設。

    • 對於每個正訓練示例(標記為目標類別的示例),演算法透過將其泛化以包含示例的屬性來更新假設。隨著它涵蓋更多正例,假設變得更通用。

    • 對於每個負訓練示例(標記為非目標類別的示例),演算法會忽略它,因為假設不應涵蓋負例。對於負例,假設保持不變。

  • 泛化  處理完所有訓練示例後,演算法會生成一個最終假設,該假設涵蓋所有正例,同時排除負例。這個最終假設代表演算法從訓練資料中學到的泛化概念。

在迭代過程中,演算法可能會在假設中引入“無關緊要”符號或佔位符(通常表示為“?”),用於正例中不同的屬性。這允許演算法透過容納不同的屬性值來泛化概念。演算法發現訓練資料中的模式,並提供對正在學習的概念的可靠表示。

讓我們使用一個實際示例來探索演算法的步驟:

假設我們有一個具有兩個屬性的動物資料集:“有毛皮”和“發出聲音”。每隻動物都被標記為狗或貓。這是一個示例訓練資料集:

動物

有毛皮

發出聲音

標籤

為了應用Find-S演算法,我們從最具體的假設開始,表示為h,它最初表示最嚴格的概念。在我們的示例中,初始假設將是h = <∅, ∅>,表示沒有特定動物與該概念匹配。

  • 對於每個正訓練示例(標記為目標類別的示例),我們更新假設h以包含該示例的屬性。在我們的例子中,正訓練示例是狗。因此,h將被更新為h = <是, 是>。

  • 對於每個負訓練示例(標記為非目標類別的示例),我們忽略它,因為假設h不應涵蓋這些示例。在我們的例子中,負訓練示例是貓,並且由於h已經涵蓋了狗,所以我們不需要更新假設。

  • 處理完所有訓練示例後,我們得到一個泛化假設,它涵蓋所有正訓練示例並排除負例。在我們的示例中,最終假設h = <是, 是>準確地表示狗的概念。

示例

這是一個說明Find-S演算法的Python程式:

# Training dataset
training_data = [
   (['Yes', 'Yes'], 'Dog'),
   (['Yes', 'No'], 'Cat'),
   (['No', 'Yes'], 'Dog'),
   (['No', 'No'], 'Cat'),
   (['Yes', 'Yes'], 'Dog')
]

# Initial hypothesis
h = ['∅', '∅']

# Find-S algorithm
for example, label in training_data:
   if label == 'Dog':
      for i in range(len(example)):
         if h[i] == '∅':
            h[i] = example[i]
         elif h[i] != example[i]:
            h[i] = '?'

print("Final hypothesis:", h)

輸出

Final hypothesis: ['?', 'Yes']

在這個程式中,訓練資料表示為元組列表。該演算法迭代處理每個示例,相應地更新假設。最終假設表示根據訓練資料得出的狗的概念。

Find-S演算法是更復雜的機器學習演算法的基礎,並在包括分類、模式識別和決策系統在內的各個領域都有實際應用。

結論

總之,Find-S演算法已被證明是機器學習中一個強大的工具,它使我們能夠從標記的訓練資料中學習概念和泛化模式。憑藉其迭代過程和尋找最大限度上具體假設的能力,該演算法為假設空間表示和概念學習的進步鋪平了道路,使其成為該領域的基本技術。其簡潔性和有效性使其成為各種機器學習應用中的寶貴資產。

更新於:2023年7月11日

12K+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.