特征縮放

1.Chris 的 T 恤尺寸(直覺)

在某些類型的機器學習算法中,特征縮放是特征預處理的一項重要步驟

特征縮放的作用
進行特征縮放的必要性

image.png

2. 由我們的度量確定的 Chris T恤尺寸

我們新建一個度量值“身高+體重”,根據(jù)這一度量更接近誰的數(shù)據(jù)來決定chris的衣服尺碼

6. 利用不同的尺度來比較特征

“身高+體重”這一度量的兩個特征“身高”和“體重”非常不平衡
身高范圍:5~7
體重范圍:115~175
因此如果計算兩種特征的合計,那么就是體重幾乎完全主導了答案,而身高成了舍入誤差

我們可能希望在進行合計時,兩個特征能夠得到同等的重視,這時我們就需要特征縮放,這是一種重新縮放此類特征的一種方法,從而使特征跨越的范圍有可比性,通常介于0~1
即體重和身高都用介于0~1的值進行表達,但不遺漏信息,這樣再合計兩個特征時,體重不再起著主導作用

7.特征縮放公式練習 1

特征縮放的一個優(yōu)點是簡單易懂


image.png

x`是要構建的新特征 要通過原始特征來決定新特征取什么值
x-min 是原始特征在被縮放前所取的最小值
x-max 是原始特征在被縮放前所取的最大值
x 需要縮放的特征的原始值

特征縮放公式的一個特點是:
縮放后的特征值在[0,1]之間,這是優(yōu)點也是缺點
優(yōu)點:
預估輸出相對穩(wěn)定

缺點:
如果輸入特征中有異常數(shù)值,那么特征縮放會比較棘手,因為x-min和x-max可能是極端值

10. 最小值/最大值重縮放器編碼練習

def featureScaling(arr):
    new_features = []
    max_value = max(arr)
    min_value = min(arr)
    
    for i in arr:
        if max_value > min_value:
            new_features.append(float(i-min_value)/float(max_value-min_value))
    return new_features
data = [115, 140, 175]
print featureScaling(data)

11. sklearn 中的最小值/最大值縮放器

from sklearn.preprocessing import MinMaxScaler
import numpy as np 
weights = np.array([[115.],[140.],[175.]])
scaler = MinMaxScaler()
rescaled_weights = scaler.fit_transform(weights)  #fit 查找max min //transform 根據(jù)數(shù)據(jù)集中的所有元素應用公式
print rescaled_weights

MinMaxScaler
numpy array中的每個元素都會成為不同的訓練點,訓練點中的每個元素都會成為特征
列表中最小值經(jīng)過重新縮放后的值為0
列表中最大值經(jīng)過重新縮放后的值為1

12. 需要重縮放的算法練習

哪些機器學習算法會受到特征縮放的影響?
□× 決策樹
□ √使用 RBF 核函數(shù)的 SVM
□ ×線性回歸
□ √K-均值聚類
在支持向量機和k-mean cluster中,計算距離時,其實是在利用一個維度和另一個維度進行交換

以支持向量機為例,它有一條將距離最大化的線,而計算距離就是用一個維度和另一個維度進行交換

以k-mean cluster為例,我們有一個集群中心,要計算每個點到集群中心的距離

決策樹不會呈現(xiàn)對角線,它會呈現(xiàn)出一系列水平線和垂直線,所以不存在交換,它只是在不同的方向上進行切割,在處理某一維度時,無需考慮另一維度

在線性回歸中,每個特征都有一個系數(shù),這個系數(shù)總是與相應的特征同時出現(xiàn),特征a的變化不會影響特征b的系數(shù)

13. 特征縮放迷你項目簡介

特征縮放改變聚類算法的輸出

14. 特征縮放迷你項目

在上一個迷你項目中,你將安然人物的財務數(shù)據(jù)作為輸入,對這些人物執(zhí)行了 k-均值聚類。我們將更新那部分工作,以包含被縮放的特征,看看會有怎樣的變化。

15縮放類型

回顧 [K-均值聚類迷你項目最后一部分]我們當時沒有詳細探討縮放算法而部署了縮放,但是你現(xiàn)在更加了解具體的縮放算法了,并且可以分析出我們使用的是哪類縮放。

哪類縮放被部署了?
MinMaxScaler

16. 計算重縮放特征

對你在上一節(jié)課中的 k 均值聚類代碼的“salary”和“exercised_stock_options”特征(僅這兩項特征)運用特征縮放。 原始值為 20 萬美元的“salary”特征和原始值為 1 百萬美元的“exercised_stock_options”特征的重縮放值會是多少? (確保呈現(xiàn)浮點型而非整數(shù)型數(shù)字?。?/p>

開始練習

原值為 200,000 的“salary”特征在尺度變換后的值會是什么,以及原值為 100 萬美元的“exercised_stock_options”特征在尺度變換后的值會是什么?

from sklearn.preprocessing import MinMaxScaler
import numpy as np
salary_array = np.array(salary_list)
scaler = MinMaxScaler()
rescaled_salary = scaler.fit_transform(salary_array)  
print scaler.transform(200000)             #0.18

salary_list = []
for i in data_dict:
    salary = data_dict[i]['salary']
    if salary !='NaN':
        salary_list.append([salary])  



stock_list = []
for i in data_dict:
    stock = data_dict[i]['exercised_stock_options'] 
    if stock !='NaN':
        stock_list.append([stock])
stock_array = np.array(stock_list)
rescaled_stock = scaler.fit_transform(stock_array)
print scaler.transform(1000000)            #0.03

17.何時部署特征縮放

有人可能會質(zhì)疑是否必須重縮放財務數(shù)據(jù),也許我們希望 10 萬美元的工資和 4 千萬美元的股票期權之間存在巨大差異。如果我們想基于“from_messages”(從一個特定的郵箱帳號發(fā)出的電子郵件數(shù))和“salary”來進行集群化會怎樣? 在這種情形下,特征縮放是不必要的,還是重要的?

如果你使用“from_messages”和“salary”作為聚類的特征,尺度將是不必要的還是重要的?
重要
Emails typically number in the hundreds or low thousands, salaries are usually at least 1000x higher.

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容