

我們不再更新 Amazon Machine Learning 服務或接受新使用者。本文件可供現有使用者使用，但我們不再更新。如需詳細資訊，請參閱[什麼是 Amazon Machine Learning](https://docs.aws.amazon.com/machine-learning/latest/dg/what-is-amazon-machine-learning.html)。

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

# 建立 Amazon ML 的資料結構描述
<a name="creating-a-data-schema-for-amazon-ml"></a>

 *「結構描述」*包含輸入資料中的所有屬性和其對應資料類型。它可讓 Amazon ML 了解資料來源中的資料。Amazon ML 會使用結構描述中的資訊來讀取和解譯輸入資料、運算統計資料、套用正確的屬性轉換，以及微調其學習演算法。如果您不提供結構描述，Amazon ML 會從資料推斷一個結構描述。

## 範例結構描述
<a name="schema-example"></a>

若要讓 Amazon ML 正確讀取輸入資料並產生準確的預測，必須為每個屬性指派正確的資料類型。讓我們演練範例以查看如何將資料類型指派給屬性，以及如何在結構描述中包含屬性和資料類型。我們將範例稱為 "Customer Campaign" (客戶行銷活動)，因為我們想要預測哪些客戶將會回應我們的電子郵件行銷活動。我們的輸入檔是一個含 9 個資料行的 .csv 檔案：

```
1,3,web developer,basic.4y,no,no,1,261,0

2,1,car repair,high.school,no,no,22,149,0

3,1,car mechanic,high.school,yes,no,65,226,1

4,2,software developer,basic.6y,no,no,1,151,0
```

此資料的這個結構描述：

```
{
    "version": "1.0",
    "rowId": "customerId",
    "targetAttributeName": "willRespondToCampaign",
    "dataFormat": "CSV",
    "dataFileContainsHeader": false,
    "attributes": [
        {
            "attributeName": "customerId",
            "attributeType": "CATEGORICAL"
        },
        {
            "attributeName": "jobId",
            "attributeType": "CATEGORICAL"
        },
        {
            "attributeName": "jobDescription",
            "attributeType": "TEXT"
        },
        {
            "attributeName": "education",
            "attributeType": "CATEGORICAL"
        },
        {
            "attributeName": "housing",
            "attributeType": "CATEGORICAL"

        },
        {
            "attributeName": "loan",
            "attributeType": "CATEGORICAL"

        },
        {
            "attributeName": "campaign",
            "attributeType": "NUMERIC"
        },
        {
            "attributeName": "duration",
            "attributeType": "NUMERIC"
        },

        {
            "attributeName": "willRespondToCampaign",
            "attributeType": "BINARY"
        }
        
    ]
}
```

在這個範例的結構描述檔案中，`rowId` 的值為 `customerId`：

```
"rowId": "customerId",
```

`willRespondToCampaign` 屬性會定義為目標屬性：

```
"targetAttributeName": "willRespondToCampaign ",
```

 `customerId` 屬性和 `CATEGORICAL` 資料類型是與第一個資料行建立關聯、`jobId` 屬性和 `CATEGORICAL` 資料類型是與第二個資料行建立關聯、`jobDescription` 屬性和 `TEXT` 資料類型是與第三個資料行建立關聯、`education` 屬性和 `CATEGORICAL` 資料類型是與第四個資料行建立關聯，以此類推。第 9 個資料行是與具有 `willRespondToCampaign` 資料類型的 `BINARY` 屬性建立關聯，而且此屬性也定義為目標屬性。

## 使用 targetAttributeName 欄位
<a name="using-the-targetattributename-field"></a>

`targetAttributeName` 值是您想要預測的屬性名稱。建立或評估模型時，您必須指派 `targetAttributeName`。

當您訓練或評估 ML 模型時， 會`targetAttributeName`識別輸入資料中的屬性名稱，其中包含目標屬性的「正確」答案。Amazon ML 使用目標，其中包含正確答案，以探索模式並產生 ML 模型。

當您評估模型時，Amazon ML 會使用目標來檢查預測的準確性。建立和評估 ML 模型之後，即可搭配使用資料與未指派的 `targetAttributeName`，以使用 ML 模型來產生預測。

您可以在建立資料來源或在結構描述檔案中定義 Amazon ML 主控台中的目標屬性。如果您建立自己的結構描述檔案，請使用下列語法來定義目標屬性：

```
"targetAttributeName": "exampleAttributeTarget",
```

 在這個範例中，`exampleAttributeTarget` 是輸入檔中為目標屬性的屬性名稱。

## 使用 rowID 欄位
<a name="using-the-rowid-field"></a>

 `row ID` 是與輸入資料中屬性建立關聯的選用旗標。如果指定，標示為 `row ID` 的屬性會包含在預測輸出中。此屬性可讓您更輕鬆地將哪個預測與哪個觀察建立關聯。不錯的 `row ID` 範例是客戶識別符或類似的唯一屬性。

**注意**  
資料列 ID 僅供您參考。Amazon ML 在訓練 ML 模型時不會使用它。選取屬性作為資料列識別符，不要將它用於培訓 ML 模型。

您可以在建立資料來源或在結構描述檔案中定義 `row ID`Amazon ML 主控台中的 。如果您要建立自己的結構描述檔案，請使用下列語法來定義 `row ID`：

```
"rowId": "exampleRow",
```

 在前述範例中，`exampleRow` 是輸入檔中定義為資料列識別符的屬性名稱。

產生批次預測時，您可能會收到下列輸出：

```
tag,bestAnswer,score
55,0,0.46317
102,1,0.89625
```

 在這個範例中，`RowID` 代表 `customerId` 屬性。例如，customerId `55` 預期會回應低可信度 (0.46317) 的電子郵件行銷活動，而 `customerId` `102` 預期會回應高可信度 (0.89625) 的電子郵件行銷活動。

## 使用 AttributeType 欄位
<a name="assigning-data-types"></a>

在 Amazon ML 中，屬性有四種資料類型：

**：二進位**  
針對只有兩種可能狀態 (例如 `BINARY` 或 `yes`) 的屬性，選擇 `no`。  
例如，追蹤人員是否為新客戶的 `isNew` 屬性會有 `true` 值指出個人是新客戶，而 `false` 值指出其非新客戶。  
有效負值是 `0`、`n`、`no`、`f` 和 `false`。  
有效正值是 `1`、`y`、`yes`、`t` 和 `true`。  
Amazon ML 會忽略二進位輸入的情況，並去除周圍的空格。例如，`" FaLSe "` 是有效的二元值。您可以混合在相同資料來源中使用的二進位值，例如使用 `true`、 `no`和 `1`。Amazon ML 只會`1`針對二進位屬性輸出 `0`和 。

**分類**  
針對採用有限數目之唯一字串值的屬性，選擇 `CATEGORICAL`。例如，使用者識別符、月分和郵遞區號是分類值。分類屬性視為單一字串，而且不再進一步進行字符化。  


**數值**  
針對採用數量作為值的屬性，選擇 `NUMERIC`。  
例如，溫度、重量和點擊速率是數值。  
並非所有保留數字的屬性都是數值。分類屬性 (例如該月天數和識別符) 通常呈現為數字。若要視為數值，某個數字必須相當於另一個數字。例如，客戶識別符 `664727` 不會告訴您有關客戶識別符 `124552` 的任何資訊，但重量 `10` 告訴您該屬性比重量 `5` 的屬性還要重。該月天數不是數值，因為某個月的第一天可能發生在另一個月的第二天之前或之後。  
當您使用 Amazon ML 建立結構描述時，它會將`Numeric`資料類型指派給使用數字的所有屬性。如果 Amazon ML 建立您的結構描述，請檢查指派是否不正確，並將這些屬性設定為 `CATEGORICAL`。

**Text (文字)**  
針對為文字字串的屬性，選擇 `TEXT`。在文字屬性中讀取時，Amazon ML 會將它們轉換為字符，以空格分隔。  
例如，`email subject` 會成為 `email` 和 `subject`，而 `email-subject here` 會成為 `email-subject` 和 `here`。

如果訓練結構描述中變數的資料類型不符合評估結構描述中該變數的資料類型，Amazon ML 會變更評估資料類型以符合訓練資料類型。例如，如果訓練資料結構描述將 的資料類型指派給`TEXT`變數 `age`，但評估結構描述將 的資料類型指派給 `NUMERIC` `age`，則 Amazon ML 會將評估資料中的存留期視為`TEXT`變數，而不是 `NUMERIC`。

如需與每種資料類型建立關聯之統計資料的資訊，請參閱[描述性統計資料](data-insights.md#descriptive-statistics)。

## 提供結構描述給 Amazon ML
<a name="methods-for-creating-a-data-schema"></a>

每個資料來源都需要結構描述。您可以選擇兩種方式為 Amazon ML 提供結構描述：
+  允許 Amazon ML 推斷輸入資料檔案中每個屬性的資料類型，並自動為您建立結構描述。
+  當您上傳 Amazon Simple Storage Service (Amazon S3) 資料時，請提供結構描述檔案。

### 允許 Amazon ML 建立您的結構描述
<a name="allowing-amazon-create-your-schema"></a>

當您使用 Amazon ML 主控台建立資料來源時，Amazon ML 會根據變數的值使用簡單的規則來建立結構描述。強烈建議您檢閱 Amazon ML 建立的結構描述，並在資料類型不正確時加以更正。

### 提供結構描述
<a name="providing-schema-to-amazon-ml"></a>

 建立結構描述檔案後，您需要將其提供給 Amazon ML。您有兩種選擇：

1.  使用 Amazon ML 主控台提供結構描述。

    使用主控台建立資料來源，以及將 .schema 副檔名附加到輸入資料檔案的檔案名稱後面，來包含結構描述檔案。例如，如果輸入資料的 Amazon Simple Storage Service (Amazon S3) URI 為 s3：//my-bucket-name/data/input.csv，結構描述的 URI 將為 s3：//my-bucket-name/data/input.csv.schema。Amazon ML 會自動尋找您提供的結構描述檔案，而不是嘗試從資料推斷結構描述。

    若要使用檔案目錄做為 Amazon ML 的資料輸入，請將 .schema 延伸模組附加到您的目錄路徑。例如，如果您的資料檔案位於位置 s3://examplebucket/path/to/data/，則結構描述的 URI 會是 s3://examplebucket/path/to/data/.schema。

1.  使用 Amazon ML API 提供結構描述。

    如果您打算呼叫 Amazon ML API 來建立資料來源，您可以將結構描述檔案上傳至 Amazon S3，然後在 `CreateDataSourceFromS3` API `DataSchemaLocationS3` 的 屬性中提供該檔案的 URI。如需詳細資訊，請參閱 [CreateDataSourceFromS3](https://docs.aws.amazon.com/machine-learning/latest/APIReference/API_CreateDataSourceFromS3.html)。

    您可以直接在 `CreateDataSource`\$1 承載中提供結構描述，`APIs`而不是先將其儲存至 Amazon S3。做法是將完整結構描述字串放在 `DataSchema`、`CreateDataSourceFromS3` 或 `CreateDataSourceFromRDS` API 的 `CreateDataSourceFromRedshift` 屬性中。如需詳細資訊，請參閱《[Amazon Machine Learning API 參考](https://docs.aws.amazon.com/machine-learning/latest/APIReference/)》。