在數據預先處理時,特徵值的比例調整是很重要的課題。
R 語言中也可以利用內建的函數來達成比例調整。
1. 外界的輸入值
外界的輸入值是我們由外界抓取到的數值,其中,各式各樣的數字都有可能。可能有出現很高的數字,也可能出現很小的。
一般來說,輸入值的大或小並不重要,但如果需要用這些來作分析和預測,那我們就需要將輸入的數字限制在一個合理的範圍內。這種工作稱為 比例調整(scaling)。
2. 比例調整(scaling)的方式
其實,比例調整的方式很多,目前市面上最熟悉的方式有以下兩種:
2.1 直觀方式
第一種是我們一般人想到的方式:我們將一筆資料裡面最大值減去最小值作為分母,分子是每一個數字減去整體的最小值。分子除以分母就可以得到調整後的比例值。
這種方式在一般的用途來說還可以用,但是在統計學上這種方式能夠應用的資料要符合標準常態分布。也就是說:這筆數據的平均值是0,且標準差是1!
結論:直觀方式易於聯想,但是條件有限制,因此我們要再尋找其他的方式!
2.2 統計學上的比例調整(scaling)
統計學是發展很久的一門學問,它可針對輸入的資料取出特徵。每一筆資料都具有平均數(mean)和標準差(standard deviation),因此這種方法是利用這筆資料本身的平均數和標準差來作計算。現在,分子改成資料減去平均數,分母改成這筆資料的標準差。如這裡的表示:
3. R 語言的支援:scale()
3.1 在 R 語言裡面,利用 scale() 就可以達到比例調整(scaling) 的效果
寫這樣的程式
執行卻出錯了!
它告訴我們 scale() 裡面必須是數值!看到這裡有些奇怪。如果去看一下前面寫過的程式
這裡我們已經把 Country 和 Purchased 兩欄位作轉換。轉換後成為文字,而不是數字。
解決方法是:在轉換時不包含這兩個欄位
我們再看一下 training_set
第一個行(column) 是最左邊這個 1 到 9 的索引,沒有名稱(label),確是一組存在的索引值,因此稱為隱式索引。
這裡由 column 0 開始計算。所以 Country 和 Purchased 兩欄位是 2 和 3。
程式要改為只對兩個欄位 2 和 3 作 比例調整(scaling)
要改成:
原來的內容是
改過的內容是
有人可能會問:這樣做只是將數值縮小,沒有太大的改變!目前來說是這樣。可是未來這些改過資料用作模型訓練及預測的時候,會使得模型可以快速收斂到一個穩定的狀態。這才是我們訓練模型的目的及價值!