

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

# 隨機分割森林 (RCF) 演算法
<a name="randomcutforest"></a>

Amazon SageMaker AI Random Cut Forest (RCF) 是一種無監督演算法，可用來偵測資料集中的異常資料點。這些觀測到的結果，和具有良好結構或規律的資料不一致。異常情況可能會表現為時間序列資料中的意外峰值、週期性的中斷，或是無法歸類的資料點。這些異常易於辨識，因為在圖中檢視時，經常能夠明顯地區分出異常項目和 “一般” 資料。在資料集中包含這些異常項目，將會大幅提高機器學習任務的複雜度，因為 “一般” 的資料通常可以透過簡單的模型描述。

RCF 會讓每個資料點具有對應的異常分數。低分代表資料點會被視為 “正常”。高分代表資料中出現了異常。“低” 和 “高” 的定義取決於應用程式，但根據常見的狀況來判斷，超出平均分數三個標準差以上的分數，應視為異常。

雖然異常偵測演算法經常應用於單一維度的時間序列資料，例如流量分析或音量峰值檢測，不過 RCF 是設計用於任意維度的輸入。在功能數目、資料集的大小和執行個體的數量方面，Amazon SageMaker AI RCF 可進行理想的擴展。

**Topics**
+ [RCF 演算法的輸入/輸出介面](#rcf-input_output)
+ [RCF 演算法的執行個體建議事項](#rcf-instance-recommend)
+ [RCF 範例筆記本](#rcf-sample-notebooks)
+ [RCF 的運作方式](rcf_how-it-works.md)
+ [RCF 超參數](rcf_hyperparameters.md)
+ [調校 RCF 模型](random-cut-forest-tuning.md)
+ [RCF 回應格式](rcf-in-formats.md)

## RCF 演算法的輸入/輸出介面
<a name="rcf-input_output"></a>

Amazon SageMaker AI Random Cut Forest 支援 `train` 與 `test` 資料通道。選用的測試通道是用來計算正確率、準確率、召回率和標籤資料上的 F1 分數指標。訓練與測試資料內容的類型，可以是 `application/x-recordio-protobuf` 或 `text/csv` 格式。針對測試資料，在使用文字/csv 格式時，必須將內容指定為 text/csv;label\_size=1，其中每行的第一欄代表異常標籤：“1” 代表異常的資料點，“0” 代表正常的資料點。您可使用檔案模式或管道模式訓練資料格式為 `recordIO-wrapped-protobuf` 或 `CSV` 的 RCF 模型。

訓練通道只支援 `S3DataDistributionType=ShardedByS3Key`，而測試通道只支援 `S3DataDistributionType=FullyReplicated`。下列範例使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html)，指定適用於訓練通道的 S3 分佈類型。

**注意**  
此 `sagemaker.inputs.s3_input` 方法已在 [SageMaker Python SDK v2](https://sagemaker.readthedocs.io/en/stable/v2.html#s3-input) 中重新命名為 `sagemaker.inputs.TrainingInput`。

```
  import sagemaker
    
  # specify Random Cut Forest training job information and hyperparameters
  rcf = sagemaker.estimator.Estimator(...)
    
  # explicitly specify "ShardedByS3Key" distribution type
  train_data = sagemaker.inputs.TrainingInput(
       s3_data=s3_training_data_location,
       content_type='text/csv;label_size=0',
       distribution='ShardedByS3Key')
    
  # run the training job on input data stored in S3
  rcf.fit({'train': train_data})
```

若要避免發生執行角色的常見錯誤，請確定您具備所需的執行角色 `AmazonSageMakerFullAccess` 和 `AmazonEC2ContainerRegistryFullAccess`。若要避免發生影像不存在或影像權限許可不正確的常見錯誤，請確定 ECR 映像大小沒有超過訓練執行個體上配置的磁碟空間大小。若要避免這種情況，請在磁碟空間足夠的執行個體上執行訓練任務。此外，如果您的 ECR 映像來自不同 AWS 帳戶的 Elastic Container Service (ECS) 儲存庫，而且您未設定儲存庫許可來授予存取權，這將導致錯誤。請參閱 [ECR 儲存庫權限](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html)，瞭解有關設置儲存庫策略聲明的詳細資訊。

如需有關自訂 S3 資料來源屬性的詳細資訊，請參閱 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html)。最後，若要善用多執行個體訓練的優勢，必須將訓練資料分割成多個檔案，數量至少和執行個體的數量相當。

關於推論，RCF 支援 `application/x-recordio-protobuf`、`text/csv` 和 `application/json` 輸入資料內容類型。請參閱[內建演算法的參數](common-info-all-im-models.md)文件以了解詳細資訊。RCF 推論會傳回 `application/x-recordio-protobuf` 或 `application/json` 格式的輸出。這些輸出資料中的每筆記錄，皆包含每個輸入資料點對應的異常分數。請參閱[常見的資料格式 - 推論](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)，以取得詳細資訊。

如需輸入和輸出檔案格式的詳細資訊，請參閱適用於推論的[RCF 回應格式](rcf-in-formats.md)以及[RCF 範例筆記本](#rcf-sample-notebooks)。

## RCF 演算法的執行個體建議事項
<a name="rcf-instance-recommend"></a>

關於訓練，我們建議使用 `ml.m4`、`ml.c4` 和 `ml.c5` 執行個體系列。關於推論，我們建議尤其使用 `ml.c5.xl` 執行個體類型，以實現最高的效能，並將每小時的使用成本減到最低。雖然就技術而言，演算法可以在 GPU 執行個體類型上執行，但會無法善用 GPU 硬體。

## RCF 範例筆記本
<a name="rcf-sample-notebooks"></a>

如需如何訓練 RCF 模型及使用它來執行推論的範例，請參閱 [SageMaker AI Random Cut Forests 簡介](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/random_cut_forest/random_cut_forest.html)筆記本。如需如何建立並存取 Jupyter 筆記本執行個體以用來執行 SageMaker AI 中範例的指示，請參閱[Amazon SageMaker 筆記本執行個體](nbi.md)。在建立並開啟筆記本執行個體後，請選取 **SageMaker AI 範例**索引標籤以查看所有 SageMaker AI 範例的清單。若要開啟筆記本，請按一下其**使用**標籤，然後選取**建立複本**。

如需使用 RCF 演算法的部落格文章，請參閱[使用內建 Amazon SageMaker AI Random Cut Forest 演算法進行異常偵測](https://aws.amazon.com/blogs/machine-learning/use-the-built-in-amazon-sagemaker-random-cut-forest-algorithm-for-anomaly-detection/)。