資料轉換參考 - Amazon Machine Learning

我們不再更新 Amazon Machine Learning 服務或接受新使用者。本文件適用於現有使用者,但我們不再對其進行更新。如需詳細資訊,請參閱什麼是 Amazon Machine Learning

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

資料轉換參考

N 元語法轉換

N 元語法轉換採用文字變數做為輸入,並產生當滑動 n 個單詞 (使用者可設定的) 視窗時的對應字串,以便在過程中產生輸出。例如,假設有一個文字字串:"I really enjoyed reading this book" (我真的很喜歡閱讀這本書)。

指定 n 元語法轉換並使用視窗大小 = 1,只會提供該字串中的所有個別單詞:

{"I", "really", "enjoyed", "reading", "this", "book"}

將 n 元語法轉換指定為視窗大小 = 2,則會提供所有兩個字組合以及一個字組合:

{"I really", "really enjoyed", "enjoyed reading", "reading this", "this book", "I", "really", "enjoyed", "reading", "this", "book"}

將 n 元語法轉換指定為視窗大小 = 3 則會增加三個字組合,產生下列項目:

{"I really enjoyed", "really enjoyed reading", "enjoyed reading this", "reading this book", "I really", "really enjoyed", "enjoyed reading", "reading this", "this book", "I", "really", "enjoyed", "reading", "this", "book"}

您可以請求 2-10 個單詞大小範圍的 n 元語法。所有在資料結構描述中標示為文字類型的輸入,都會隱含產生大小為 1 的 n 元語法,因此您不需要特定要求。最後,請記住,n 元語法是根據空白字元來中斷輸入資料而產生。這表示,舉例來說,標點符號字元會被視為單詞符記的一部分:為字串 "red, green, blue" (「紅色、綠色、藍色」) 產生視窗為 2 的 n 元語法會得到: {"red,", "green,", "blue,", "red, green", "green, blue"}。如果這不是您要的結果,您可以使用標點符號移除處理器 (本文稍後說明) 來移除標點符號。

若要對變數 var1 計算視窗大小為 3 的 n 元語法:

"ngram(var1, 3)"

正交稀疏二元 (OSB) 轉換

OSB 轉換旨在協助文字字串分析,且是二元語法 (視窗大小為 2 的 n 元語法) 的替代方法。OSB 透過在文字上滑動視窗大小 n 來產生,然後輸出每對字詞,其中包含視窗中的第一個字。

若要建置每個 OSB,其構成單字使用「_」(底線) 字元連結,並在 OSB 中新增其他底線來指出每個略過的符記。因此,OSB 不只編碼視窗中看到的符記,也會指出相同視窗中略過的符記數。

舉例來說,假設有個字串 "The quick brown fox jumps over the lazy dog" (敏捷的棕色狐狸跳過了一隻懶狗),且 OSB 的大小為 4。以下範例中顯示六個四字視窗,以及從字串尾端產生的最後兩個較短視窗,以及為每個視窗產生的 OSB:

視窗, {產生的 OSB}

"The quick brown fox", {The_quick, The__brown, The___fox} "quick brown fox jumps", {quick_brown, quick__fox, quick___jumps} "brown fox jumps over", {brown_fox, brown__jumps, brown___over} "fox jumps over the", {fox_jumps, fox__over, fox___the} "jumps over the lazy", {jumps_over, jumps__the, jumps___lazy} "over the lazy dog", {over_the, over__lazy, over___dog} "the lazy dog", {the_lazy, the__dog} "lazy dog", {lazy_dog}

正交稀疏二元語法在某些情況下,可能是比 n 元語法運作更良好的替代選擇。如果您的資料擁有大型文字欄位 (10 個或更多單詞),請實驗看看哪個的運作方式更佳。請注意,大型文字欄位的內容可能因情況而異。不過,對於較大的文字欄位,會憑經驗顯示 OSB,因為特殊「略過」符號 (底線) 而唯一代表該文字。

您可以在輸入文字變數上,要求視窗大小為 2 到 10 個單字的 OSB 轉換。

若要針對變數 var1 計算 OSB,並使用視窗大小 5:

"osb(var1, 5)"

小寫轉換

小寫轉換處理器會將輸入文字轉換為小寫。例如,提供輸入 "The Quick Brown Fox Jumps Over the Lazy Dog",處理器將輸出 "the quick brown fox jumps over the lazy dog"。

若要套用小寫轉換到變數 var1:

"lowercase(var1)"

移除標點符號轉換

Amazon ML 會在資料結構描述中根據空格隱含分割標記為文字的輸入。因此,字串中的標點符號會變成鄰接文字符記,或變成單獨的福記,這取決其周圍的空格。如果您不想要這種結果,可使用標點符號移除器轉換來從產生的特徵中移除標點符號。例如,提供字串 "Welcome to AML - please fasten your seat-belts!" (歡迎來到 AML - 請繫好安全帶!),會隱含產生下列符記組:

{"Welcome", "to", "Amazon", "ML", "-", "please", "fasten", "your", "seat-belts!"}

套用標點符號移除處理器到這個字串,會產生此組結果:

{"Welcome", "to", "Amazon", "ML", "please", "fasten", "your", "seat-belts"}

請注意,只會移除字首和尾碼標點符號。出現在符記中間的標點符號,例如 "seat-belts" 中的連字號,並不會移除。

若要套用標點符號移除到變數 var1:

"no_punct(var1)"

四分位數分箱轉換

四分位數分箱處理器採用兩個輸入:一個數值變數和一個稱為「分箱數」的參數,然後輸出類別變數。其目的是將觀察值分組在一起,來探索變數分佈中的非線性狀況。

在許多情況下,數值變數與目標之間的關係並非線性 (數值變數值不會隨著目標單純地增加或減少)。在這種情況下,將數值特徵分箱至可代表不同數值特徵範圍的類別特徵,可能會很有用。接著可以為每個類別特徵值 (分箱) 建立模型,分別擁有自己與目標的線性關係。例如,假設您知道連續數值特徵 account_age 與購買書籍的可能性沒有線性相關。您可將年齡分箱至不同的類別特徵,然後可以更精確擷取與目標的關係。

四分位數分箱處理器可用來指示 Amazon ML 根據年齡變數的所有可用輸入值分佈來建立 n 個相等大小的分箱,然後將每個數字替換成包含分箱的文字符記。數值變數的最佳分箱數取決於變數特徵以及其與目標的關係,而這最好透過實驗確定。Amazon ML 會根據建議的配方中的統計資料,對數值特徵建議最佳的分箱數。

您可以請求 5 到 1000 個四分位數分箱,用來計算任何數值輸入變數。

以下範例說明如何運算和使用 50 個分箱來代替數值變數 var1:

"quantile_bin(var1, 50)"

標準化轉型

標準化轉型會將數值變數標準化,使其平均值為零、而方差為一。如果數值變數之間有非常大的差異範圍,由於無論特徵對於目標是否資訊量足夠,具有最高量值的變數都會主導 ML 模型,因此將數值變數標準化有助於學習過程。

若要將此轉換套用到數值變數 var1,請新增此行至配方:

normalize(var1)

這個轉換器也可以採用使用者定義的數值變數群組或預先定義的所有數值變數群組 (ALL_NUMERIC) 做為輸入:

normalize(ALL_NUMERIC)

注意

「不一定」要使用標準化處理器來處理數值變數。

笛卡兒乘積轉換

笛卡兒轉換會產生兩個或多個文字或類別輸入變數的置換。此轉換是用於猜測變數之間應有相互影響時。例如,假設在「教學課程」中使用銀行行銷資料集:使用 Amazon ML 預測對行銷優惠的回應。使用此資料集,我們想要根據經濟和人口統計資訊,預測人們是否會主動回應銀行促銷。我們猜想人們的工作類型應該有點重要 (例如在特定領域受雇,和有餘錢可使用之間應有關聯),另外最高教育程度也很重要。我們也可能直覺這兩個變數的相互影響中具備強烈信號,例如,促銷特別針對大學畢業的企業家客戶而打造。

笛卡兒乘積轉換採用類別變數或文字做為輸入,並產生新特徵,以擷取這些輸入變數之間的相互影響。值得注意的是,它將為每個訓練範例建立特徵組合,並將其新增做為獨立的特徵。例如,假設我們的簡化輸入資料列如下所示:

目標, 教育程度, 工作

0, 大學學位, 技術人員

0, 高中, 服務業

1, 大學學位, 行政管理

如果我們指定將笛卡兒轉換套用至類別變數 [教育程度] 和 [工作] 欄位,產生的特徵 [教育程度_工作_相互影響] 看起來會像這樣:

目標, 教育程度_工作_相互影響

0, 大學學位_技術人員

0, 高中_服務業

1, 大學學位_行政管理

如果將笛卡兒轉換運作在符記序列甚至會更加強大,因為其中一個引數是會隱含或明確分割成符記的文字變數。例如,假設有一項任務是將書籍分類為是教科書和不是教科書。直覺上,我們可能認為書本的標題可以說明是否為教科書 (教科書標題中會更頻繁出現特定單詞),另外我們也可能認為書本的裝訂版能用來進行預測 (教科書更可能是精裝書),但標題中某些單詞和裝訂版的組合才是最具預測性的。對於真實世界的範例,下表顯示將笛卡兒處理器套用至輸入變數 [裝訂版] 和 [標題] 的結果:

教科書 標題 裝訂版 no_punct(Title) 和裝訂版的笛卡兒乘積
1 經濟學:原則、問題、政策 精裝 {"Economics_Hardcover", "Principles_Hardcover", "Problems_Hardcover", "Policies_Hardcover"}
0 隱形之心:羅曼經濟學 平裝 {"The_Softcover", "Invisible_Softcover", "Heart_Softcover", "An_Softcover", "Economics_Softcover", "Romance_Softcover"}
0 Fun With Problems (問題的樂趣) 平裝 {"Fun_Softcover", "With_Softcover", "Problems_Softcover"}

以下範例說明如何套用笛卡兒轉換器至 var1 和 var2:

cartesian(var1, var2)