Skip to main content

featureVectorization

將特徵組成向量(feature vectorization)是機器學習中的一個重要步驟,主要目的是將多個數據特徵(即數據集中的不同列或屬性)組合成為一個向量形式的特徵,以便機器學習模型能夠正確處理和分析這些特徵。這對於處理結構化數據特別重要。

什麼是特徵?

  • 特徵:是數據中的屬性或變量。例如,在房價預測的數據集中,特徵可以是房子的經緯度、房間數量、人口、家庭收入等。
  • 機器學習模型需要這些特徵作為輸入來進行學習和預測。

什麼是向量?

  • 向量是一組有序的數值集合,通常用於表示數據中的多個特徵。它可以被視為數學上多維空間中的一個點或箭頭。

為什麼要將特徵組成向量?

  1. 統一表示形式:將多個特徵組合成一個向量後,所有特徵會有統一的表示形式,這使得機器學習模型可以更輕鬆地處理數據。
  2. 方便數學運算:很多機器學習算法(如線性回歸、支持向量機等)是基於向量運算的。將特徵組成向量可以使模型在計算和優化的過程中更高效。
  3. 規範化數據輸入:在構建模型時,模型只接受一個整體的向量輸入,而不是多個單獨的數據列。因此,特徵向量化是將原始數據轉換為模型可讀取和處理的輸入格式的必要步驟。

舉例解釋:

假設你有一個數據集,包含如下幾個特徵:

  • longitude(經度)
  • latitude(緯度)
  • housing_median_age(房屋中位年齡)
  • total_rooms(總房間數)
  • median_income(中位收入)

每一個特徵對應一列。這些數據在初始狀態下是分散的。機器學習模型希望將這些特徵組合在一起,形成一個單一的數值向量。

如果我們有以下一行數據:

longitude = -122.23
latitude = 37.88
housing_median_age = 41.0
total_rooms = 880
median_income = 8.3252

特徵向量化會將這一行數據轉換為一個包含這些數值的向量:

features = [-122.23, 37.88, 41.0, 880, 8.3252]

這樣,模型就能夠將這個向量作為一個整體來處理,進行學習和預測。

PySpark 中的向量組合

在 PySpark 中,我們使用 VectorAssembler 這個工具來將多個特徵組合成一個向量,然後用於機器學習模型的輸入。VectorAssembler 將多個列(特徵)組合成為一列,該列是向量類型。

範例代碼

from pyspark.ml.feature import VectorAssembler

# 設定我們的特徵列(數據中的多個特徵)
feature_columns = ['longitude', 'latitude', 'housing_median_age', 'total_rooms', 'median_income']

# 使用 VectorAssembler 將多個特徵列組合成一個向量
assembler = VectorAssembler(inputCols=feature_columns, outputCol='features')

# 將數據集中的特徵組成向量
vectorized_data = assembler.transform(data)

# 顯示轉換後的數據
vectorized_data.select('features').show(5, truncate=False)

在這個範例中,VectorAssemblerlongitudelatitude 等五個特徵組合成為一個向量,並存儲在一個名為 features 的新列中。這個新列就是我們需要提供給機器學習模型的輸入。

總結

  • 特徵組成向量是指將多個分散的特徵組合成一個數值向量,以便機器學習模型能夠處理和學習。
  • 在 PySpark 中,VectorAssembler 是用來完成這個任務的工具,它將多個列轉換為一個向量,供機器學習算法使用。

這個步驟是機器學習過程中不可或缺的部分,因為大多數機器學習模型都需要數據以向量形式輸入,以便進行高效的數據運算和預測。