我們已經研究了有監督和無監督機器學習算法。這些算法需要格式化的數據來啓動訓練過程。我們必須以某種方式準備或格式化數據,以便它可以作爲ML算法的輸入。
本章主要討論機器學習算法的數據準備。
Preprocessing the Data
在我們的日常生活中,我們處理大量的數據,但這些數據是原始的。爲了提供數據作爲機器學習算法的輸入,我們需要將其轉換爲有意義的數據。這就是數據預處理進入畫面的地方。換句話說,我們可以說在向機器學習算法提供數據之前,我們需要對數據進行預處理。
Data preprocessing steps
按照以下步驟在Python−中預處理數據;
步驟1導入有用的包如果我們使用Python,那麼這將是將數據轉換爲特定格式(即預處理)的第一步。它可以按以下方式完成&負;
import numpy as np import sklearn.preprocessing
這裡我們使用了以下兩個包&負;
NumPy基本上是一個通用的數組處理包,旨在有效地操作任意記錄的大型多維數組,而不會犧牲小型多維數組的太多速度。
這個包提供了許多通用的實用函數和轉換類,可以將原始特徵向量轉換成更適合機器學習算法的表示形式。
步驟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應用預處理技術在本步驟中,我們需要應用任何預處理技術。
以下部分介紹數據預處理技術。
Techniques for Data Preprocessing
數據預處理技術如下所述;
Binarization
這是當我們需要將數值轉換爲布爾值時使用的預處理技術。我們可以使用一種內置的方法來對輸入數據進行二值化,例如使用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.]]
Mean Removal
這是機器學習中另一種非常常見的預處理技術。它基本上是用來消除特徵向量的均值,使每個特徵都集中在零上。我們還可以去除特徵向量中特徵的偏差。爲了在示例數據上應用mean-remove預處理技術,我們可以編寫如下所示的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.]
Scaling
這是另一種用於縮放特徵向量的數據預處理技術。由於每個特徵的值可以在許多隨機值之間變化,因此需要對特徵向量進行縮放。換言之,我們可以說縮放是重要的,因爲我們不希望任何特徵是綜合的大或小。藉助以下Python代碼,我們可以對輸入數據進行縮放,即feature vector−
-35;最小最大縮放
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. ]]
Normalization
這是另一種用於修改特徵向量的數據預處理技術。這種修改對於在公共尺度上測量特徵向量是必要的。以下是兩種可用於機器學習的標準化方法−
L1標準化
它也被稱爲最小絕對偏差。這種規格化會修改值,使每行的絕對值之和始終高達1。它可以通過以下Python代碼在輸入數據上實現−
# Normalize data data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1') print("\nL1 normalized data:\n", data_normalized_l1)
上述代碼行生成以下輸出&miuns;
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]]
二級規範化
它也被稱爲最小二乘法。這種規格化會修改值,使每行的平方和始終高達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 ]]
Labeling the Data
我們已經知道,某種格式的數據是機器學習算法所必需的。另一個重要的要求是,在將數據作爲機器學習算法的輸入發送之前,必須對其進行適當的標記。例如,如果我們討論分類,數據上有很多標籤。這些標籤以單詞、數字等形式存在。sklearn中與機器學習相關的功能預計數據必須有數字標籤。因此,如果數據是其他形式的,則必須將其轉換爲數字。將單詞標籤轉換爲數字形式的過程稱爲標籤編碼。
Label encoding steps
按照以下步驟在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']
Labeled v/s Unlabeled Data
未標記數據主要是指從世界上很容易獲得的自然或人爲物體的樣本。它們包括音頻、視頻、照片、新聞文章等。
另一方面,標記數據獲取一組未標記的數據,並用一些有意義的標記、標籤或類來擴充未標記數據的每一部分。例如,如果我們有一張照片,那麼標籤可以基於照片的內容放置,即,它是男孩或女孩或動物的照片或其他任何東西。標記數據需要人類的專業知識或對給定的未標記數據的判斷。
在許多情況下,未標記的數據非常豐富,而且很容易獲得,但標記的數據通常需要人工/專家進行注釋。半監督學習試圖結合有標籤和無標籤的數據來建立更好的模型。