事前數據處理
![](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/commons/thumb/f/f2/DVD_Rental_Query.png/300px-DVD_Rental_Query.png)
事前數據處理(粵拼:si6 cin4 sou3 geoi3 cyu5 lei5)喺機械學習同數據探勘等領域上係攞到數據之後要做嘅第一個步驟。喺搜集數據嘅過程之後,個研究者手上會有一個數據庫,個數據庫嘅數據包含咗每一個個案喺每個變數上嘅數值。喺現實世界當中,搜集數據過程都係唔完全受控嘅,所以搜集到嘅數據幾乎梗會出啲錯,例如係某幾個個案喺某個變數上嘅數值唔見咗(即係所謂嘅缺失數據)或者有啲擺明冇可能嘅數值(例:有個個案喺「年齡」呢個變數嘅數值係負數),等等。呢啲噉嘅數據直接攞去分析嘅話好多時會搞到個程式出錯,所以做機械學習嘅人喺開始俾個程式做學習之前往往會做啲事前處理先[1][2][3]。
舉個例說明,假想有個金融學方面嘅學者想用機械學習教個電腦程式預測股價,佢可以去一啲網上嘅金融數據庫嗰度攞某一柞股票喺某一段時間之間嘅價格(睇埋大數據),一隻股票為止一個個案,每隻股票都會喺「2019 年 7 月 1 號嘅價格」同「2019 年 8 月 1 號嘅價格」等嘅多個變數上有個值,但係呢啲數據都係由某啲人或者程式負責搜集嘅,兩者都可能會有失誤:例如可能有某隻股票「2019 年 7 月 1 號嘅價格」係一個唔知嘅數值(數據唔見咗);又或者搜集數據嘅單位搞錯嘢,有隻股票「2019 年 7 月 1 號嘅價格」係一個冇可能嘅數值(例:負數)。如果個研究者就噉將呢啲數據入俾個機械學習程式處理,個程式好可能會出錯。於是佢就有需要做一啲事前處理,確保佢手上嘅數據庫係可以由機械學習程式處理嘅。
作業
[編輯]事前數據處理大致上涉及以下嘅工作[1]:
- 清走啲好明顯係出咗錯嘅數據(例:負數嘅年齡);
- 睇吓個數據庫,諗吓使唔使做一啲整體性嘅編輯(例:將所有數據按比例縮放成 0 至 1 之間嘅數值);
- 將啲數據簡化(睇埋降維);
- 諗吓好唔好將啲數據嘅格式改變,等柞數據易睇啲。
... 等等。
例子碼
[編輯]以下係一段用 Python 程式語言寫嘅源碼,用途在於將啲數據重新縮放成 0 至 1 之間嘅數值(將每個變數,最大嘅數值設做 1,最細嘅數值設做 0,而喺中間嗰啲數值就按比例變成 0 至 1 之間嘅小數)。噉樣做係因為,有某啲機械學習演算法需要數據係 0 至 1 之間嘅數先至行得到[4]:
# Python code to Rescale data (between 0 and 1)
import pandas
import scipy
import numpy
from sklearn.preprocessing import MinMaxScaler
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data" # 指定一個網址
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] # 指定每個變數嘅名
dataframe = pandas.read_csv(url, names=names) # 由網址嗰度攞數據
array = dataframe.values # 將數據擺入去屬於個程式一個 array 嗰度
X = array[:,0:8] # X 呢個 array 包含咗用嚟做預測嘅變數
Y = array[:,8] # Y 呢個 array 包含咗要預測嘅變數
# 將 X 入面嘅數字重新縮放
scaler = MinMaxScaler(feature_range=(0, 1))
rescaledX = scaler.fit_transform(X)
# 將做完縮放嘅嗰柞數據 show 出嚟睇
numpy.set_printoptions(precision=3)
print(rescaledX[0:5,:])
睇埋
[編輯]攷
[編輯]- ↑ 1.0 1.1 Pyle, D., 1999. Data Preparation for Data Mining. Morgan Kaufmann Publishers, Los Altos, California.
- ↑ Chicco D (December 2017). "Ten quick tips for machine learning in computational biology". BioData Mining. 10 (35): 1–17.
- ↑ Oliveri, Paolo; Malegori, Cristina; Simonetti, Remo; Casale, Monica (2019). "The impact of signal pre-processing on the final interpretation of analytical outcomes – A tutorial". Analytica Chimica Acta. 1058: 9–17.
- ↑ Data Preprocessing for Machine learning in Python 互聯網檔案館嘅歸檔,歸檔日期2019年7月6號,..