數據標准化處理
import numpy as np raw_samples = np.array([ [3,-1.5,2,-5.4], [0,4,-0.3,2.1], [1,3.3,-1.9,-4.3]]) print(raw_samples) print(raw_samples.mean(axis=0)) # 求各個列的均值 print(raw_samples.std(axis=0)) # 求各個列的標准差 print("=============方法1:對raw_samples矩陣做標准差標准化處理====================") # 標准化處理(標准正態分布):是讓矩陣中的每列的均值為0,標准差為1 from sklearn.preprocessing import scale s=scale(raw_samples) # 對raw_samples矩陣做標准差標准化處理 print(s) print(s.mean(axis=0)) print(s.std(axis=0)) print("==========方法2:對raw_samples矩陣做(0,1)縮放標准化處理====================") # (0,1)縮放:是讓矩陣中的每列中每行的各個特征值縮放成為0到1之間值 from sklearn.preprocessing import MinMaxScaler mms = MinMaxScaler(feature_range=(0,1)).fit_transform(raw_samples) print(mms) print(mms.min(axis=0)) print(mms.max(axis=0)) print("=========方法3:對raw_samples矩陣做歸一化標准化處理====================") # 歸一化:用矩陣中每行的各個特征值除以該行所有特征值之和,再對每行所得的值做絕對值之和,此時每行中 # 各個列相加得出的值都是1 from sklearn.preprocessing import normalize nor_samples = normalize(raw_samples,norm="l1") print(nor_samples) print(np.abs(nor_samples).sum(axis=1)) print("=========方法4:對raw_samples做二值化標准化處理======================") # 二值化:根據一個事先設定的閥值,將樣本矩陣中不大於閥值的元素設定為0,大於閥值的元素設定為1 # 二值化信息有所損失,二值化后無法知道原始數據具體是多少 from sklearn.preprocessing import Binarizer bin = Binarizer(threshold=1.4) # 1.4的閥值是自己設定的 bin_samples = bin.transform(raw_samples) print(bin_samples) print("=========方法5:對raw_samples做獨熱編碼標准化處理======================") raw_samples =np.array([ [1,3,2], [7,5,4], [1,8,6], [7,3,9]]) print(raw_samples) # 創建獨熱編碼器 from sklearn.preprocessing import OneHotEncoder print("==============緊湊格式===================") ohe = OneHotEncoder(dtype=int) # sparse 表示是否采用緊縮格式(即只記錄非0格式),默認為真1 ohe_samples = ohe.fit_transform(raw_samples) print(ohe_samples) # 最后出來的結果是只記錄1 的結果 # (0, 5) 1 表示第0行第5列是1 # (0, 2) 1 表示第0行第2列是1 # (0, 0) 1 表示第0行第0列是1 print("==============非緊湊格式===================") ohe1 = OneHotEncoder(sparse=False,dtype=int) # sparse 表示是否采用緊縮格式,默認為真1 ohe_samples = ohe1.fit_transform(raw_samples) print(ohe_samples) print("=============方法6:將分類變量轉為數值型:用標簽編碼============") # 標簽編碼:將一列字符串形式的特征值,按照字典排序,用每個字符在排序序列中的索引號表示該字符 raw_samples = np.array(["audi","ford","audi", "toyota","ford","bmw", "toyota","audi"]) from sklearn.preprocessing import LabelEncoder lbe = LabelEncoder() lbe_samples = lbe.fit_transform(raw_samples) print(lbe_samples) # 返回:[0 2 0 3 2 1 3 0] print("====用inverse_transform()將標簽編碼轉回原始數據======") raw_samples = lbe.inverse_transform(lbe_samples) print(raw_samples) # 返回:['audi' 'ford' 'audi' 'toyota' 'ford' 'bmw' 'toyota' 'audi']