
- Python AI 教程
- 首頁
- Python AI – 基礎概念
- Python AI – 入門指南
- Python AI – 機器學習
- Python AI – 資料準備
- 監督學習:分類
- 監督學習:迴歸
- Python AI – 邏輯程式設計
- 無監督學習:聚類
- 自然語言處理
- Python AI – NLTK 包
- 分析時間序列資料
- Python AI – 語音識別
- Python AI – 啟發式搜尋
- Python AI – 遊戲
- Python AI – 神經網路
- 強化學習
- Python AI – 遺傳演算法
- Python AI – 計算機視覺
- Python AI – 深度學習
- Python AI 資源
- Python AI – 快速指南
- Python AI – 有用資源
- Python AI – 討論
Python AI – 資料準備
我們已經學習了監督和無監督機器學習演算法。這些演算法需要格式化的資料才能開始訓練過程。我們必須以某種方式準備或格式化資料,以便將其作為輸入提供給機器學習演算法。
本章重點介紹機器學習演算法的資料準備。
資料預處理
在日常生活中,我們處理大量資料,但這些資料都是原始形式。為了將資料作為機器學習演算法的輸入,我們需要將其轉換為有意義的資料。這就是資料預處理發揮作用的地方。換句話說,在將資料提供給機器學習演算法之前,我們需要對其進行預處理。
資料預處理步驟
按照以下步驟在 Python 中預處理資料:
步驟 1 - 匯入有用的包 - 如果我們使用 Python,那麼這將是將資料轉換為特定格式(即預處理)的第一步。它可以按如下方式完成:
import numpy as np import sklearn.preprocessing
在這裡,我們使用了以下兩個包:
NumPy - NumPy 本質上是一個通用的陣列處理包,旨在有效地操作任意記錄的大型多維陣列,而不會在處理小型多維陣列時犧牲太多速度。
Sklearn.preprocessing - 此包提供了許多常用的實用程式函式和轉換器類,用於將原始特徵向量更改為更適合機器學習演算法的表示形式。
步驟 2 - 定義樣本資料 - 匯入包後,我們需要定義一些樣本資料,以便我們可以在這些資料上應用預處理技術。我們現在將定義以下樣本資料:
input_data = np.array([2.1, -1.9, 5.5], [-1.5, 2.4, 3.5], [0.5, -7.9, 5.6], [5.9, 2.3, -5.8])
步驟 3 - 應用預處理技術 - 在此步驟中,我們需要應用任何預處理技術。
以下部分描述了資料預處理技術。
資料預處理技術
資料預處理技術如下所述:
二值化
當我們需要將數值轉換為布林值時,可以使用此預處理技術。我們可以使用內建方法對輸入資料進行二值化,例如,透過以下方式使用 0.5 作為閾值:
data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data) print("\nBinarized data:\n", data_binarized)
現在,在執行上述程式碼後,我們將獲得以下輸出,所有大於 0.5(閾值)的值將轉換為 1,所有小於 0.5 的值將轉換為 0。
二值化資料
[[ 1. 0. 1.] [ 0. 1. 1.] [ 0. 0. 1.] [ 1. 1. 0.]]
均值移除
這是機器學習中使用的另一種非常常見的預處理技術。它基本上用於消除特徵向量中的均值,以便每個特徵都以零為中心。我們還可以消除特徵向量中特徵的偏差。要對樣本資料應用均值移除預處理技術,我們可以編寫如下所示的 Python 程式碼。程式碼將顯示輸入資料的均值和標準差:
print("Mean = ", input_data.mean(axis = 0)) print("Std deviation = ", input_data.std(axis = 0))
執行上述程式碼行後,我們將獲得以下輸出:
Mean = [ 1.75 -1.275 2.2] Std deviation = [ 2.71431391 4.20022321 4.69414529]
現在,以下程式碼將移除輸入資料的均值和標準差:
data_scaled = preprocessing.scale(input_data) print("Mean =", data_scaled.mean(axis=0)) print("Std deviation =", data_scaled.std(axis = 0))
執行上述程式碼行後,我們將獲得以下輸出:
Mean = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00] Std deviation = [ 1. 1. 1.]
縮放
這是另一種用於縮放特徵向量的預處理技術。需要對特徵向量進行縮放,因為每個特徵的值可以在許多隨機值之間變化。換句話說,縮放很重要,因為我們不希望任何特徵人為地過大或過小。藉助以下 Python 程式碼,我們可以對輸入資料(即特徵向量)進行縮放:
# 最小-最大縮放
data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1)) data_scaled_minmax = data_scaler_minmax.fit_transform(input_data) print ("\nMin max scaled data:\n", data_scaled_minmax)
執行上述程式碼行後,我們將獲得以下輸出:
最小-最大縮放資料
[ [ 0.48648649 0.58252427 0.99122807] [ 0. 1. 0.81578947] [ 0.27027027 0. 1. ] [ 1. 0. 99029126 0. ]]
歸一化
這是另一種用於修改特徵向量的預處理技術。這種修改對於以共同的尺度測量特徵向量是必要的。以下是在機器學習中可以使用兩種型別的歸一化:
L1 歸一化
它也稱為最小絕對偏差。這種歸一化修改值,以便每行中絕對值的總和始終為 1。它可以透過以下 Python 程式碼在輸入資料上實現:
# Normalize data data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1') print("\nL1 normalized data:\n", data_normalized_l1)
以上程式碼行生成以下輸出:
L1 normalized data: [[ 0.22105263 -0.2 0.57894737] [ -0.2027027 0.32432432 0.47297297] [ 0.03571429 -0.56428571 0.4 ] [ 0.42142857 0.16428571 -0.41428571]]
L2 歸一化
它也稱為最小二乘法。這種歸一化修改值,以便每行中平方和始終為 1。它可以透過以下 Python 程式碼在輸入資料上實現:
# Normalize data data_normalized_l2 = preprocessing.normalize(input_data, norm = 'l2') print("\nL2 normalized data:\n", data_normalized_l2)
以上程式碼行將生成以下輸出:
L2 normalized data: [[ 0.33946114 -0.30713151 0.88906489] [ -0.33325106 0.53320169 0.7775858 ] [ 0.05156558 -0.81473612 0.57753446] [ 0.68706914 0.26784051 -0.6754239 ]]
資料標記
我們已經知道,機器學習演算法需要特定格式的資料。另一個重要的要求是,在將資料作為機器學習演算法的輸入傳送之前,必須對其進行正確標記。例如,如果我們談論分類,則資料上有很多標籤。這些標籤以單詞、數字等形式存在。sklearn 中與機器學習相關的函式期望資料必須具有數字標籤。因此,如果資料採用其他形式,則必須將其轉換為數字。將單詞標籤轉換為數字形式的過程稱為標籤編碼。
標籤編碼步驟
按照以下步驟在 Python 中對資料標籤進行編碼:
步驟 1 - 匯入有用的包
如果我們使用 Python,那麼這將是將資料轉換為特定格式(即預處理)的第一步。它可以按如下方式完成:
import numpy as np from sklearn import preprocessing
步驟 2 - 定義樣本標籤
匯入包後,我們需要定義一些樣本標籤,以便我們可以建立和訓練標籤編碼器。我們現在將定義以下樣本標籤:
# Sample input labels input_labels = ['red','black','red','green','black','yellow','white']
步驟 3 - 建立和訓練標籤編碼器物件
在此步驟中,我們需要建立標籤編碼器並對其進行訓練。以下 Python 程式碼將有助於執行此操作:
# Creating the label encoder encoder = preprocessing.LabelEncoder() encoder.fit(input_labels)
執行上述 Python 程式碼後,輸出如下:
LabelEncoder()
步驟 4 - 透過對隨機排序列表進行編碼來檢查效能
此步驟可用於透過對隨機排序列表進行編碼來檢查效能。可以編寫以下 Python 程式碼來執行相同的操作:
# encoding a set of labels test_labels = ['green','red','black'] encoded_values = encoder.transform(test_labels) print("\nLabels =", test_labels)
標籤將按如下方式列印:
Labels = ['green', 'red', 'black']
現在,我們可以獲取編碼值列表,即單詞標籤轉換為數字,如下所示:
print("Encoded values =", list(encoded_values))
編碼值將按如下方式列印:
Encoded values = [1, 2, 0]
步驟 5 - 透過解碼一組隨機數字來檢查效能
此步驟可用於透過解碼一組隨機數字來檢查效能。可以編寫以下 Python 程式碼來執行相同的操作:
# decoding a set of values encoded_values = [3,0,4,1] decoded_list = encoder.inverse_transform(encoded_values) print("\nEncoded values =", encoded_values)
現在,編碼值將按如下方式列印:
Encoded values = [3, 0, 4, 1] print("\nDecoded labels =", list(decoded_list))
現在,解碼值將按如下方式列印:
Decoded labels = ['white', 'black', 'yellow', 'green']
標記資料與未標記資料
未標記資料主要包含自然或人為建立的物件的樣本,這些樣本可以輕鬆地從世界中獲取。它們包括音訊、影片、照片、新聞文章等。
另一方面,標記資料獲取一組未標記資料,併為該未標記資料的每一部分新增一些有意義的標籤或類別。例如,如果我們有一張照片,則可以根據照片的內容新增標籤,即它是男孩或女孩或動物或其他任何東西的照片。標記資料需要人類專業知識或對給定未標記資料片段的判斷。
在許多情況下,未標記資料豐富且易於獲取,但標記資料通常需要人工/專家進行註釋。半監督學習試圖結合標記和未標記資料來構建更好的模型。