標準化/歸一化
阿新 • • 發佈:2021-03-09
資料標準化是一個常用的資料預處理操作,目的是處理不同規模和量綱的資料,使其縮放到相同的資料區間和範圍,以減少規模、特徵、分佈差異等對模型的影響。
標準化(Z-Score)
- Z-Score標準化是基於原始資料的均值和標準差進行的標準化,假設原轉換的資料為x,新資料為x′,那麼x'=(x-mean)/std,其中mean和std為x所在列的均值和標準差。
- 這種方法適合大多數型別的資料,也是很多工具的預設標準化方法。標準化之後的資料是以0為均值,方差為1的正態分佈。但是Z-Score方法是一種中心化方法,會改變原有資料的分佈結構,不適合對稀疏資料做處理。
歸一化(Max-Min)
-
Max-Min標準化方法是對原始資料進行線性變換,假設原轉換的資料為x,新資料為x′,那麼x'=(x-min)/(max-min),其中min和max為x所在列的最小值和最大值。
-
這種標準化方法的應用非常廣泛,得到的資料會完全落入[0,1]區間內(Z-Score則沒有類似區間)。這種方法能使資料歸一化而落到一定的區間內,同時還能較好地保持原有資料結構。
讀取資料
import numpy as np from sklearn import preprocessing import matplotlib.pyplot as plt data = np.loadtxt('data6.txt', delimiter='\t') # 讀取資料 data #列印結果 array([[ 8.9 , 10.4 ], [ 7.76, 4.68], [ 7.54, 3.84], ..., [ 2.26, 5.14], [ 2.17, 3.54], [ 1.95, 3.81]])
Z-Score標準化
# Z-Score標準化 zscore_scaler = preprocessing.StandardScaler() # 建立StandardScaler物件 data_scale_1 = zscore_scaler.fit_transform(data) # StandardScaler標準化處理 data_scale_1 #列印結果 array([[ 3.95979742, 6.25657217], [ 2.80473492, 0.49961714], [ 2.58182812, -0.34580982], ..., [-2.76793503, 0.96258905], [-2.85912418, -0.64774802], [-3.08203098, -0.37600364]])
歸一化Max-Min
minmax_scaler = preprocessing.MinMaxScaler() # 建立MinMaxScaler模型物件
data_scale_2 = minmax_scaler.fit_transform(data) # MinMaxScaler標準化處理
data_scale_2
#列印結果
array([[1. , 1. ],
[0.83597122, 0.37758433],
[0.80431655, 0.28618063],
...,
[0.04460432, 0.42763874],
[0.03165468, 0.25353645],
[0. , 0.28291621]])
展示多網格結果
# 展示多網格結果
data_list = [data, data_scale_1, data_scale_2] # 建立資料集列表
color_list = ['black', 'green', 'blue'] # 建立顏色列表
merker_list = ['o', ',', '+'] # 建立樣式列表
title_list = ['source data', 'zscore_scaler', 'minmax_scaler'] # 建立標題列表
plt.figure(figsize=(13, 3)) #指定繪圖區域的大小
for i, data_single in enumerate(data_list): # 迴圈得到索引和每個數值
plt.subplot(1, 3, i + 1) # 確定子網格,一行三列,i是從0開始
plt.scatter(data_single[:,:-1], data_single[:, -1], s=10, marker=merker_list[i],c=color_list[i]) # 自網格展示散點圖
# d=a[:-1] #從位置0到位置-1之前的數;s是點的大小,merker_list畫圖樣式列表,c顏色列表
plt.title(title_list[i]) # 設定自網格標題
plt.suptitle("raw data and standardized data") # 設定總標題
#Text(0.5, 0.98, 'raw data and standardized data')