去除均值和方差進行縮放。(均值爲0,標準差爲1)機器學習
代碼展現:工具
import numpy as np
from sklearn import preprocessing
data=np.array([[3, -1.5, 2, -5.4],
[0, 4,-0.3,2.1],
[1, 3.3, -1.9, -4.3]]) # 原始數據矩陣 shape=(3,4)
data_standardized=preprocessing.scale(data) #0均值處理
print(data_standardized.shape)
print('Mean={}'.format(data_standardized.mean(axis=0))) #對列求均值(浮點計算有偏差,接近0)
print('Mean2={}'.format(np.mean(data_standardized,axis=0))) #對列求均值(浮點計算有偏差,接近0)
# axis:int類型,初始值爲0,axis用來計算均值 means 和標準方差 standard deviations.
# 若是是0,則單獨的標準化每一個特徵(列),若是是1,則標準化每一個觀測樣本(行)。
print('標準化後: ')
print(data_standardized)
print('標準差={}'.format(np.std(data_standardized,axis=0)))學習
1, 值移除以後的矩陣每一列的均值約爲0,而std爲1。這樣作的目的是確保每個特徵列的數值都在相似的數據範
圍之間,防止某一個特徵列數據自然的數值太大而一家獨大。
2, 能夠直接調用preprocessing模塊中成熟的 方法來對一個numpy 矩陣進行均值移除。
3, 求一個numpy矩陣的平均值(或std,min,max等)至少有兩種方法,如代碼中第9行和第10行所示。編碼
必要性:數據點中每一個特徵列的數值範圍可能變化很大,所以,有時須要將特徵列的數值範圍縮放到合理的大小。spa
代碼展現:code
import numpy as np
from sklearn import preprocessing
data=np.array([[3, -1.5, 2, -5.4],
[0, 4,-0.3,2.1],
[1, 3.3, -1.9, -4.3]]) # 原始數據矩陣 shape=(3,4)
data_scaler=preprocessing.MinMaxScaler(feature_range=(0,1)) # 縮放到(0,1)之間
data_scaled=data_scaler.fit_transform(data)
print('scaled matrix: *********************************')
print(data_scaled)orm
用於須要對特徵向量的值進行調整時,以保證每一個特徵向量的值都縮放到相同的數值範圍。機器學習中最經常使用的歸
一化形式就是將特徵向量調整爲L1範數,歸一化就是L1/L2爲1rem
給定向量x=(x1,x2,...xn)
L1範數:向量各個元素(向量份量)絕對值之和
L2範數:向量各個元素(向量份量)的平方求和而後求平方根it
代碼展現:io
import numpy as np
from sklearn import preprocessing
data=np.array([[3, -1.5, 2, -5.4],
[0, 4,-0.3,2.1],
[1, 3.3, -1.9, -4.3]]) # 原始數據矩陣 shape=(3,4)
data_L1_normalized=preprocessing.normalize(data,norm='l1')
print('L1 normalized matrix: *********************************')
print(data_L1_normalized)
print('sum of matrix: {}'.format(np.sum(data_L1_normalized)))
data_L2_normalized=preprocessing.normalize(data,norm='l2') # 默認:l2
print('L2 normalized matrix: *********************************')
print(data_L2_normalized)
print('sum of matrix: {}'.format(np.sum(data_L2_normalized)))
1,Normaliztion以後全部的特徵向量的值都縮放到同一個數值範圍,能夠確保數據點沒有由於特徵的基本性質而
產生的較大差別,即確保全部數據點都處於同一個數據量,提升不一樣特徵數據的可比性。
2,注意和均值移除的區別:均值移除是對每個特徵列都縮放到相似的數值範圍,每個特徵列的均值爲0,而
Normalization是將全局全部數值都縮放到同一個數值範圍。
二值化用於將數值特徵向量轉換爲布爾類型向量。
代碼展現:
import numpy as np
from sklearn import preprocessing
data=np.array([[3, -1.5, 2, -5.4],
[0, 4,-0.3,2.1],
[1, 3.3, -1.9, -4.3]]) # 原始數據矩陣 shape=(3,4)
data_binarized=preprocessing.Binarizer(threshold=1.4).fit_transform(data) #小於等於 threshold 爲
0
print('binarized matrix: *********************************')
print(data_binarized)
1,二值化以後的數據點都是0或者1,因此叫作二值化。
2,計算方法是,將全部大於threshold的數據都改成1,小於等於threshold的都設爲0。
3,常常用於出現某種特徵(好比設爲1),或者沒有出現某種特徵(設爲0)的應用場合
一般,須要處理的數值都是稀疏地,散亂地分佈在空間中,但咱們並不須要存儲這些大數值,這時就須要使用獨熱
編碼,獨熱編碼其實是一種收緊特徵向量的工具
代碼展現:
import numpy as np
from sklearn import preprocessing
data=np.array([[0,2,1,12],
[1,3,5,3],
[2,3,2,12],
[1,2,4,3]]) # 原始數據矩陣 shape=(4,4)
encoder=preprocessing.OneHotEncoder()
encoder.fit(data)
encoded_vector=encoder.transform([[2,3,5,3]]).toarray()
print('one-hot encoded matrix: *********************************')
print(encoded_vector.shape)
print(encoded_vector)
1,獨熱編碼能夠縮小特徵向量的維度,將稀疏的,散亂的數據集(好比代碼塊中的data,shape=(4,4))收縮爲
11維緻密矩陣(如輸出結果,shape=(1,11))。
2,編碼方式爲:根據原始數據集data構建編碼器encoder,用編碼器來對新數據進行編碼。好比,第0列有三個
不一樣值(0,1,2),故而有三個維度,即0=100,1=010,2=001;同理,第1列有兩個不一樣值(2,3),故而只有兩
個維度,即2=10,3=01;同理,第2列有四個不一樣值(1,5,2,4),故而有四個維度,即1=1000,
2=0100,4=0010,5=0001同理,第3列有兩個不一樣值(3,12),故而只有兩個維度,即3=10,12=01。因此在面對
新數據[[2,3,5,3]]時,第0列的2就對應於001,第二列的3對應於01,第三列的5對應於0001,第四列的3對應於
10,鏈接起來後就是輸出的這個(1,11)矩陣,即爲讀了編碼後的緻密矩陣。
3,若是面對的新數據不存在上面的編碼器中,好比[[2,3,5,4]]時,4不存在於第3列(只有兩個離散值3和12),則
輸出爲00,鏈接起來後是[[0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 0.]],注意倒數第二個數字變成了0
6.數據離散化
做用:將連續型數據離散化
代碼展現:
ages = [20,33,54,23,66,77,88,99,26,63]
bins = [18,25,35,60,100]
labels = ['少年','青年','中年','老年']
new_ages = pd.cut(x=ages,bins=bins,labels=labels,retbins=True)#retbins:返回bins
print(new_ages)
有不懂的地方能夠聯繫做者