機器學習筆記——特徵標準化
機器學習筆記——特徵標準化
資料標準化是在特徵處理環節必不可少的重要步驟。
資料標準化是為了消除不同指標量綱的影響,方便指標之間的可比性,量綱差異會影響某些模型中距離計算的結果。
常見標準化方法主要有歸一化、正態化。
資料歸一化也即0-1標準化,又稱最大值-最小值標準化,核心要義是將原始指標縮放到0~1之間的區間內。相當於對原變數做了一次線性變化。
其公式為
EX = (x- min)/(max - min)
另一種常用的標準化方法是z-score標準化,將原始指標標準化為均值為0,標準化為1的正態分佈。
EX = (x - mean)/σ
R 語言中的特徵標準化:
library
(
"caTools"
)
library
(
"scales"
)
data(iris)
split = sample.split(iris$Species,SplitRatio =
.8
)
train_data = subset(iris,split == TRUE)
test_data = subset(iris,split == FALSE)
train_data[,- 5 ] = apply(train_data[,- 5 ], 2 ,rescale,to = c( , 1 ))
test_data[,- 5 ] = apply(test_data[,- 5 ], 2 ,rescale,to = c( , 1 ))
以上scales包中的rescale函式可以自動完成指標中0-1標準化的任務,事實上,它可以將原始指標線性變化到任何一個數字區間內。
我們可以來驗證結果是否是可信的。
range(train_data[, 1 ])
range(apply(train_data[,- 5 ], 2 ,rescale,to = c( , 1 ))[, 1 ])
[
1
]
4.3
7.7
[
1
]
1
當然你也可以自己寫一個叫簡單的0-1標準化函式
scale1 = function (x){
(x - min(x))/(max(x) - min(x))
}
range(apply(train_data[,- 5 ], 2 ,scale1)[, 1 ])
[ 1 ] 1
z-score 標準化
z-score 標準化可以透過scale函式快速實現。
train_data[,- 5 ] = scale(train_data[,- 5 ])
mean(train_data[, 1 ]);sd(train_data[, 1 ])
[
1
]
5.869167
[
1
]
0.8259241
mean(scale(train_data[,-
5
])[,
1
]);sd(scale(train_data[,-
5
])[,
1
])
[
1
]
[
1
]
1
#
自定義一個z-score標準化函式
z_norm = function (x){
(x - mean(x))/sd(x)
}
mean(apply(train_data[,- 5 ], 2 ,z_norm)[, 1 ]);sd(apply(train_data[,- 5 ], 2 ,z_norm)[, 1 ])
[
1
]
[
1
]
1
Python 中sk-learn庫中有專門用於處理以上兩種標準化的函式。
from
sklearn
import
preprocessing
from
sklearn.model_selection
import
train_test_split
from
sklearn.datasets
import
load_iris
import
pandas
as
pd
import
numpy
as
np
iris = load_iris()
data = iris[ 'data' ]
iris_data = pd.DataFrame(
data = data,
columns = [ 'sepal_length' , 'sepal_width' , 'petal_length' , 'petal_width' ]
)
iris_data[ "Species" ] = iris[ 'target' ]
iris_data[ "Species" ] = iris_data[ "Species" ].map({ : "setosa" , 1 : "versicolor" , 2 : "virginica" })
x,y = iris_data.iloc[:, :- 1 ],iris_data.iloc[:,- 1 ]
train_data,_data,train_target,test_target = train_test_split(x,y,test_size = 0.2 ,stratify = y)
Python 中的0-1標準化
min_max_scaler = preprocessing.MinMaxScaler()
#
例項化0-1標準化方法
X_train_minmax = min_max_scaler.fit_transform(test_data.iloc[:,
:
4
].values)
X_test_minmax = min_max_scaler.transform(test_data.iloc[:, : 4 ].values)
X_train_minmax[:, ].max() - X_train_minmax[:, ].min() 1.0
Python 中的z-score標準化
訓練集第一列的均值和方差如下
train_data.iloc[:,
].mean();train_data.iloc[:,
].std()
5.86166666666666
40.8416853174847874
sc_X = preprocessing.StandardScaler()
#
例項化z-score標準化方法
X_train = sc_X.fit_transform(train_data.iloc[:,
:
4
].values)
X_test = sc_X.transform(test_data.iloc[:, : 4 ].values)
標準化後第一列的均值和方差
X_train[:, ].mean();X_train[:, ].std()
- 2.2907601741432396e-151.0
以上僅介紹了最常用的兩種標準化特徵的方法及其實現,標準化的方法還有很多,對於什麼的模型需要使用標準化以及適用什麼方法的標準化,需要視具體場景和資料量級差異而定,小編也在摸索中。
標準化一方面可以防止原始特徵中量綱差異影響距離運算(比如歐氏距離的運算)。
另一方面標準化也可以在一定程度上提升演算法求解的效率。
https://mp.weixin.qq.com/s/z97Wtes-tfXQYDl-xx_cBg
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2217302/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 機器學習框架ML.NET學習筆記【3】文字特徵分析機器學習框架筆記特徵
- 機器學習學習筆記機器學習筆記
- 機器學習筆記機器學習筆記
- 機器學習筆記之效能評估指標機器學習筆記指標
- 機器學習-特徵提取機器學習特徵
- 機器學習 | 特徵工程機器學習特徵工程
- 機器學習——特徵工程機器學習特徵工程
- 機器學習特徵工程機器學習特徵工程
- C++學習筆記 — STL標準模板庫C++筆記
- 什麼是特徵標準化特徵
- HexMap學習筆記(九)——地形特徵筆記特徵
- 《機器學習初步》筆記機器學習筆記
- 《C++ Primer》學習筆記(八):標準 IO 庫C++筆記
- freeRTOS核心學習筆記(1)-程式設計標準筆記程式設計
- 「學習筆記」線段樹標記永久化筆記
- 機器學習之特徵工程機器學習特徵工程
- Auto Machine Learning 自動化機器學習筆記Mac機器學習筆記
- 什麼是機器學習的特徵工程?【資料集特徵抽取(字典,文字TF-Idf)、特徵預處理(標準化,歸一化)、特徵降維(低方差,相關係數,PCA)】機器學習特徵工程PCA
- Linux程式設計學習筆記 | Linux IO學習[2] – 標準IOLinux程式設計筆記
- 為什麼要特徵標準化特徵
- 機器學習課程筆記機器學習筆記
- 學習筆記-虛擬機器筆記虛擬機
- Machine Learning 機器學習筆記Mac機器學習筆記
- 李巨集毅機器學習-學習筆記機器學習筆記
- 機器學習學習筆記——基本知識機器學習筆記
- 機器學習演算法學習筆記機器學習演算法筆記
- 機器學習整合學習—Apple的學習筆記機器學習APP筆記
- 吳恩達機器學習筆記 —— 8 正則化吳恩達機器學習筆記
- 機器學習筆記——模型選擇與正則化機器學習筆記模型
- 機器學習 | 吳恩達機器學習第九周學習筆記機器學習吳恩達筆記
- 機器學習2-特徵工程機器學習特徵工程
- 指標學習筆記指標筆記
- Python機器學習筆記:sklearn庫的學習Python機器學習筆記
- 機器學習的靜態特徵和動態特徵機器學習特徵
- 新標準日語全套學習筆記免費領取筆記
- 【筆記】《Python大戰機器學習》筆記Python機器學習
- JAVA虛擬機器學習筆記Java虛擬機機器學習筆記
- 特徵預處理之歸一化&標準化特徵