Python 常用(聚類/分類)數據預處理方法

要對數據進行聚類/分類,往往需要經過以下幾個步驟:

處理缺失值(我比較少遇到)--》數據標準化 --》降維(白化) --》訓練 --》預測 --》評價模型效果

0. 缺失值的處理一般是填充缺省值或者平均值等方法,我一般直接補0

1. 對數據進行標準化。常用的方法有z-score和maxmin。其中,z-socre是(x-mean)/std,也就是去中心化。注意:標準化方法(以及降維)只能在訓練集上訓練,不能加入驗證集或是測試集(防止“偷看”),然後再將訓練好的模型用到驗證集和測試集上。

from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
# maxmin
min_max_scaler = MinMaxScaler()
train_data_scale = min_max_scaler.fit_transform(train_data)

# z-score
# 1. (x-mean)/std - the standard way
std_scaler = StandardScaler()
train_data_scale = std_scaler.fit_transform(train_data)
# 2. removes the median and scales the data according to the quantile range (25%-75%) - the robust way, suitable for data contain outliers.
rob_scaler = RobustScaler()
train_data_scale = rob_scaler.fit_transform(train_data)

有時候還會遇到nominal(標稱)類型的字段,這時候需要首先將這些字段拿出來,然後進行one-hot編碼。經過one-hot編碼,一個有n種取值的特徵變成n位二進制,比如:male,female --》(1,0),(0,1)。如果需要進行one-hot操作,則優先完成。

import random
from sklearn import preprocessing

enc = preprocessing.OneHotEncoder(handle_unknown='ignore')
# fit是找出每個字段有幾種取值的過程,因此並不一定需要全部
sample_list = random.sample(str_feature_list, 100000)
enc.fit(sample_list)
enc_str_feature_list = enc.transform(str_feature_list).toarray()

2. 降維的方法包括PCA和AutoEncoder。PCA對數據進行降維(降維後的數據相當於換了一套座標系,是無法被解釋的)進行的是線性變換,AE則可以學習到非線性關係,表達能力更強但是問題是訓練更慢。有些時候,預測器假設feature之間是互相獨立的,因此就要將PCA的whiten參數設置爲True對數據進行白化。該過程可能會使數據損失一些信息量,但在某些時候會提高預測的準確率。

from sklearn.decomposition import PCA

# 保存95%的信息
pca = PCA(n_components=0.95, svd_solver='full')
pca.fit(feature_list_scale)
pca_data = pca.transform(feature_list_scale)

3/4/5. sklearn已經幫我們實現了絕大多數功能的封裝

常用的聚類算法:http://scikit-learn.sourceforge.net/stable/modules/clustering.html#clustering

常用的分類算法:http://scikit-learn.sourceforge.net/stable/supervised_learning.html

常用的評價指標:https://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章