

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 演算法類型
<a name="algorithms-choose"></a>

機器學習可以幫助您完成需要某種歸納推論的實證任務。這項任務涉及到感應，因為它使用資料來訓練算法，使一般推論。這表示演算法可以在統計上做出可靠的預測或決策，或在套用至未用來訓練這些資料的新資料時完成其他任務。

為了幫助您選擇最適合您的任務的算法，我們將這些任務分類在各種抽象層級。在抽象的最高層級中，機器學習會嘗試尋找功能或較低結構化項目之間的模式或關係，例如資料集中的文字。模式識別技術可以分為不同的機器學習範式，每個範例都可以解決特定的問題類型。目前有三種用於解決各種問題類型的機器學習基本範例：
+ [監督式學習](#algorithms-choose-supervised-learning)
+ [非監督式學習](#algorithms-choose-unsupervised-learning)
+ [強化學習](#algorithms-choose-reinforcement-learning)

每種學習範式可以解決的問題類型是考慮您想要從您擁有或可能收集的資料類型中進行的推論 (或預測、決策或其他任務) 來識別出來。機器學習範例使用演算法方法來解決其各種問題類型。該算法提供了解決這些問題的配方。

但是，許多算法 (例如神經網路) 都可以用不同的學習模式和不同類型的問題進行部署。多種演算法也可以解決特定的問題類型。某些算法更普遍適用，其他算法對於某些類型的目標和資料非常具體。因此，機器學習算法和問題類型之間的映射是多對多的。此外，還有可用於演算法的各種實作選項。

以下各節提供有關實作選項、機器學習範例以及適用於不同問題類型的演算法的指引。

**Topics**
+ [選擇演算法實作](#algorithms-choose-implementation)
+ [基本機器學習範例的問題類型](#basic-machine-learning-paradigms)
+ [Amazon SageMaker 中的內建演算法和預先訓練模型](algos.md)
+ [搭配 Amazon SageMaker AI 使用強化學習](reinforcement-learning.md)

## 選擇演算法實作
<a name="algorithms-choose-implementation"></a>

選擇演算法之後，您必須決定要使用的演算法的實作方式。Amazon SageMaker AI 支援三種需要更多精力的實作選項。
+ **預先訓練的模型**需要最少的精力，而且模型已準備好使用 SageMaker JumpStart 進行部署或微調和部署。
+ 如果資料集龐大且需要大量資源來訓練和部署模型，**內建演算法**需要更多的精力和擴充能力。
+ 如果沒有可行的內建解決方案，請嘗試**針對支援的架構 (例如 Scikit Learn、TensorFlow、PyTorch、MXNet 或鏈接器) 開發使用預先製作映像的機器和深度學習架構**的解決方案。
+ 如果您需要執行自訂軟體套件或使用任何不是支援框架的一部分或通過 PyPi 提供的代碼，那麼您需要構建**自己的自訂 Docker 映像，該映像**配置為安裝必要的軟體套件或軟體。自訂映像檔也必須推送至線上儲存庫，例如 Amazon 彈性容器登錄。

**Topics**
+ [使用內建的演算法。](#built-in-algorithms-benefits)
+ [在支援的架構中使用指令碼模式](#supported-frameworks-benefits)
+ [使用自訂 Docker 映像檔](#custom-image-use-case)

演算法實作指南


| 實作 | 需要代碼 | 預先編碼演算法 | 支援第三方軟體套件 | Support 自訂程式碼 | 努力程度 | 
| --- | --- | --- | --- | --- | --- | 
| 內建 | 否 | 是 | 否 | 否 | 低 | 
| Scikit-learn | 是 | 是 | 僅適用於 PyPi | 是 | 中 | 
| Spark ML | 是 | 是 | 僅適用於 PyPi | 是 | 中 | 
| XGBoost (開放原始碼) | 是 | 是 | 僅適用於 PyPi | 是 | 中 | 
| TensorFlow | 是 | 否 | 僅適用於 PyPi | 是 | 中高 | 
| PyTorch | 是 | 否 | 僅適用於 PyPi | 是 | 中高 | 
| MXNet | 是 | 否 | 僅適用於 PyPi | 是 | 中高 | 
| Chainer | 是 | 否 | 僅適用於 PyPi | 是 | 中高 | 
| 自訂映像 | 是 | 否 | 是，來自任何來源 | 是 | 高 | 

### 使用內建的演算法。
<a name="built-in-algorithms-benefits"></a>

為您的問題和資料類型選擇演算法時，最簡單的選擇是使用 Amazon SageMaker AI 的其中一種內建演算法。這些內建演算法具有兩個主要優點。
+ 內建演算法不需要編碼即可開始執行實驗。您唯一需要提供的輸入是資料、超參數和運算資源。這可讓您更快速地執行實驗，減少追蹤結果和程式碼變更的額外負荷。
+ 內建演算法在多個運算執行個體之間提供平行化功能，而且所有適用演算法現成的 GPU 支援 (由於固有的限制，某些演算法可能不會包含在內)。如果您有大量可用來訓練模型的資料，則大部分的內建演算法都可以輕鬆擴充以滿足需求。即使您已經有預先訓練的模型，在支援的架構上使用指令碼模式，在 SageMaker AI 中使用其結果並輸入您已知道的超參數可能會比移植模型更容易。

有關 SageMaker AI 提供的內建演算法的詳細資訊，請參閱[Amazon SageMaker 中的內建演算法和預先訓練模型](algos.md)。

有關 Docker 註冊表路徑、資料格式、推薦的 EC2 執行個體類型和 SageMaker AI 提供的所有內建演算法共有的 CloudWatch 日誌的重要資訊，請參閱[內建演算法的參數](common-info-all-im-models.md)。

### 在支援的架構中使用指令碼模式
<a name="supported-frameworks-benefits"></a>

如果內建選項不支援您要用於模型的演算法，而且您可以自行編寫自己的解決方案，那麼您應該考慮使用 Amazon SageMaker AI 支援的架構。這被稱為 “指令碼模式”，因為您在具有 `.py` 擴展的文字檔案中編寫自訂程式碼 (指令碼)。如上表所示，SageMaker AI 支援大多數常用的機器學習架構。這些框架預先加載了相應的框架和一些額外的 Python 包，例如 Pandas 和 NumPy，因此您可以編寫自己的代碼來訓練算法。這些框架還允許您通過在訓練代碼中包含 requirements.txt 文件或包含您自己的代碼目錄來安裝在 PyPi 上託管的任何 Python 軟體套件。R 在 SageMaker 筆記本內核中也受到原生支援。一些框架，如 scikit-learn 和 Spark ML，有預編碼的演算法，你可以很容易地使用，而其他框架，如 TensorFlow 和 PyTorch 可能需要你自己實作算法。使用支援的架構映像檔時，唯一的限制是您無法匯入任何未在 PyPi 上託管或架構映像檔中尚未包含的軟體套件。

有關 SageMaker AI 支援的框架的詳細資訊，請參閱[Machine Learning 架構和語言](frameworks.md)。

### 使用自訂 Docker 映像檔
<a name="custom-image-use-case"></a>

Amazon SageMaker AI 的內建演算法和支援的架構應涵蓋大部分的使用案例，但有時您可能需要使用不包含在任何支援架構中的套件中的演算法。您可能還選擇了預先訓練的模型或保存在需要部署的某個地方。SageMaker AI 使用 Docker 映像檔來託管所有模型的訓練和服務，因此如果您需要的套件或軟體未包含在支援的架構中，您可以提供自己的自訂 Docker 映像檔。這可能是你自己的 Python 包或用 Stan 或朱莉婭等語言編碼的算法。對於這些圖像，您還必須在 Dockerfile 中正確配置算法的訓練和模型的服務。這需要對 Docker 的中級知識，除非您熟悉編寫自己的機器學習算法，否則不建議使用。您的 Docker 映像必須先上傳至線上儲存庫，例如 Amazon 彈性容器登錄 (ECR)，才能正確訓練和提供模型。

 有關 SageMaker AI 中自訂 Docker 映像檔的詳細資訊，請參閱[用於訓練和部署模型的 Docker 容器](docker-containers.md)。

## 基本機器學習範例的問題類型
<a name="basic-machine-learning-paradigms"></a>

以下三節說明機器學習的三個基本範例所解決的主要問題類型。有關 SageMaker AI 為解決這些問題類型提供的內建演算法的清單，請參閱[Amazon SageMaker 中的內建演算法和預先訓練模型](algos.md)。

**Topics**
+ [監督式學習](#algorithms-choose-supervised-learning)
+ [非監督式學習](#algorithms-choose-unsupervised-learning)
+ [強化學習](#algorithms-choose-reinforcement-learning)

### 監督式學習
<a name="algorithms-choose-supervised-learning"></a>

如果您的資料集包含包含目標值 (輸出) 的圖徵或屬性 (輸入)，則您有監督式學習問題。如果你的目標值是分類的 (數學上離散)，那麼你有一個**分類**問題。這是一個標準的做法，以區分二進制和多類分類。
+ **二進制分類**是一種監督式學習，它會根據個人屬性將個人指派給兩個預先定義項目的其中之一和互斥的類別。它是監督式，因為模型會使用範例進行訓練，而範例中為屬性提供正確標籤物件。醫療診斷是二進位分類的一個例子，根據診斷檢驗的結果判斷個人是否患有疾病。
+ **多類別分類**是一種監督式學習，會根據個人屬性將個人指派給多個類別的其中之一。它會受到監督，因為模型會使用範例進行訓練，而範例中為屬性提供正確標籤物件。與文字文件最相關的主題預測就是一個例子。一個文件可能會歸類為宗教、政治或金融相關，或作為與多個其他預先定義主題類別的其中之一相關。

如果您嘗試預測的目標值在數學上是連續的，那麼您有一個**回歸**問題。迴歸會根據相互關聯的一或多個其他變數或屬性，估計相依目標變數的值。房價預測就是一個例子，它會使用浴室和臥室數量、房子和花園的平方英尺等特徵來進行預測。迴歸分析可建立使用一或多個這類特徵做為輸入並預測房價的模型。

有關 SageMaker AI 提供的內建監督式學習演算法的詳細資訊，請參閱[監督式學習](algos.md#algorithms-built-in-supervised-learning)。

### 非監督式學習
<a name="algorithms-choose-unsupervised-learning"></a>

如果您的資料集由不包含標籤或目標值 (輸出) 的特徵或屬性 (輸入) 組成，那麼您就有一個無監督學習問題。在這種類型的問題，輸出必須根據在輸入資料中發現的模式進行預測。無監督學習問題的目標是發現模式，例如資料中的分組。有各種各樣的任務或問題類型，可以應用無監督學習。主要元件和叢集分析是通常部署用於預處理資料的兩種主要方法。以下是可以通過無監督學習解決的問題類型的簡短清單：
+ **尺寸縮減**通常是資料探索步驟的一部分，用於確定模型構建的最相關的特徵。這個想法是將資料從高維度、稀疏的空間轉換為保留原始資料最重要屬性的低維度空間。這可以緩解維度的詛咒，這種詛咒可能會產生稀疏的高維度資料，統計分析變得有問題。它還可以用來幫助理解資料，將高維資料減少到可視化的較低維度。
+ **叢集分析**是一類技術，用於將物件或案例分類為群組，稱為叢集。其會試圖找出資料內分散的群組，盡可能讓群組成員彼此相似，而進能可和其他群組內的成員有所差異。您可以定義要演算法用來決定相似性的特徵或屬性，選取距離函式來測量相似性，並指定要在分析中使用的叢集數目。
+ **異常檢測**是指資料集中罕見物品，事件或觀察的識別，這引起了懷疑，因為它們與其餘資料顯著不同。例如，可以使用異常物品的識別來檢測銀行欺詐或醫療錯誤。異常也稱為異常值、新奇、雜訊、偏差和例外狀況。
+ **密度估計**是根據觀察到的資料估計不可觀察的基礎概率密度函式的構建。密度估計的自然用途是用於資料探索。密度估計可以發現資料中的偏斜和多模式等功能。密度估計的最基本形式是重新縮放的直方圖。

SageMaker AI 提供數種內建的機器學習演算法，可用於這些無監督學習任務。有關 SageMaker AI 提供的內建無監督演算法的詳細資訊，請參閱[無監督學習](algos.md#algorithms-built-in-unsupervised-learning)。

### 強化學習
<a name="algorithms-choose-reinforcement-learning"></a>

強化學習是一種基於與環境互動的學習類型。這種類型的學習是由一個代理程式進行，該代理程式必須透過與動態環境中的試驗和錯誤互動來學習行為，其目標是最大限度地提高代理程式因其行為而獲得的長期獎勵。透過具有已知獎勵的行動來交換具有不確定獎勵的探索行動，從而獲得最大的獎勵。

有關 SageMaker AI 的框架、工具包和強化學習環境的詳細資訊，請參閱[搭配 Amazon SageMaker AI 使用強化學習](reinforcement-learning.md)。