機器學習第三週

2021-09-29 22:11:52 字數 2547 閱讀 2755

在進行特徵選擇之前,一般會先進行資料無量綱化處理,這樣,表徵不同屬性(單位不同)的各特徵之間才有可比性,如1cm 與 0.1kg 你怎麼比?無量綱處理方法很多,使用不同的方法,對最終的機器學習模型會產生不同的影響。本文將對常用的無量綱化技術進行總結,試圖指出他們的適用場景,並給出在python中的相應呼叫方式。正文中每列代表乙個 屬性/特徵,每行表示乙個/條 樣本。

min-max歸一化

該方法是對原始資料進行線性變換,將其對映到[0,1]之間,該方法也被稱為離差標準化(但是請注意,網上更多人喜歡把z-score稱為標準化方法,把min-max稱為歸一化方法,然後在此基礎上,強行給標準化(z-score)與歸一化(min-max)劃條界線,以顯示二者之間的相異性。該方法還有兩點好處:

如果某屬性/特徵的方差很小,如身高:np.array([[1.70],[1.71],[1.72],[1.70],[1.73]]),實際5條資料在身高這個特徵上是有差異的,但是卻很微弱,這樣不利於模型的學習,進行min-max歸一化後為:array([[ 0. ], [ 0.33333333], [ 0.66666667], [ 0. ], [ 1. ]]),相當於放大了差異;

維持稀疏矩陣中為0的條目。

使用方法如下:

from sklearn.preprocessing import minmaxscaler

x = np.array([[1,-1,2],[2,0,0],[0,1,-1]])

x1 = minmaxscaler().fit_transform(x)

不難發現,x1每列的值都在[0,1]之間,也就是說,該模組是按列計算的。並且minmaxscaler在構造類物件的時候也可以直接指定最大最小值的範圍:scaler = minmaxscaler(feature_range=(min, max)).

z-score標準化

z-score標準化方法試圖將原始資料集標準化成均值為0,方差為1且接近於標準正態分佈的資料集。然而,一旦原始資料的分布 不 接近於一般正態分佈,則標準化的效果會不好。該方法比較適合資料量大的場景(即樣本足夠多,現在都流行大資料,因此可以比較放心地用)。此外,相對於min-max歸一化方法,該方法不僅能夠去除量綱,還能夠把所有維度的變數一視同仁(因為每個維度都服從均值為0、方差1的正態分佈),在最後計算距離時各個維度資料發揮了相同的作用,避免了不同量綱的選取對距離計算產生的巨大影響。所以,涉及到計算點與點之間的距離,如利用距離度量來計算相似度、pca、lda,聚類分析等,並且資料量大(近似正態分佈),可考慮該方法。相反地,如果想保留原始資料中由標準差所反映的潛在權重關係應該選擇min-max歸一化,基於數學角度的解釋可參閱這兩篇博文[1,2],鏈結在最下方reference內。

from sklearn.preprocessing import standardscaler

x = np.array([[1,2,3],[4,5,6],[1,2,1]])

x1 = standardscaler().fit_transform(x)

可以發現,x1的每一列加起來都是0,方差是1左右。注意該方法同樣按列(即每個屬性/特徵)進行計算。並且standardscaler類還有乙個好處,就是可以直接呼叫其物件的.mean_與.std_方法檢視原始資料的均值與標準差。

x = np.array([[ 1., -1., 2.], … [ 2., 0., 0.], … [ 0., 1., -1.]])

scaler = standardscaler().fit(x)

scaler.mean_

array([ 1. …, 0. …, 0.33…])

3. normalization

在一些地方,有人把這種方法翻譯為正則化,但是機器學習中的正則化更多是與模型相關(比如邏輯回歸在損失函式後增加l2正則項),所以這種翻譯我不喜歡;也有人稱之為歸一化,但是吧,有時這種方法並沒體現「歸一」特性,如處理後的資料該是負號的還是負號;直譯表示標準化吧,我怕你們又把這種方法與z-score標準化聯絡起來,因此,就不翻譯了吧。
其實這個方法是根據範數來進行 normalization的,何為範數?聽著感覺高大上,其實非常常見。

from sklearn import preprocessing

normalizer = preprocessing.normalizer().fit(x)

normalizer.transform(x)

在訓練乙個模型之前需要做資料的預處理,因為模型的最終效果決定於資料的質量和資料中蘊含的有用資訊的數量。在實際的模型的訓練樣本資料中,樣本可能會由於某些原因,造成乙個或多個值的缺失。可能由於樣本採集過程中的失誤,或者度量方法對於某些特徵不適用,或者資料未被填寫等。在**中缺失值通常是以空值的形式或者是na(not a number)存在的。如果我們直接忽視這些缺失值可能有些演算法無法處理這些缺失值,將會觸發異常。如果,我們之間將包含缺失值的資料刪除就會造成資料的浪費,而且有時候可能資料本來就不多,刪除包含缺失值的資料之後資料就更少了,這將會影響我們訓練出來模型的泛化能力。對於資料較多的情況,可以做一些刪除處理。除此之外,我們還可以對缺失值進行填充,下面就介紹一些缺失資料的處理方式。

在使用python進行資料分析處理的時候,我們可以通過第三方庫pandas來進行,可以極大的簡化處理步驟。

機器學習第三週

應用機器學習的時候,會遇到很多問題。比如模型的選擇,資料的擬合程度,新樣本的泛化程度。這裡記錄 一些相關概念和應對方法。1.將 資料集分成 訓練集,驗證集,測試集。最好是採用隨機方法來取,一般是 60 20 20 要考慮假設函式的擬合程度 也就是模型選擇 以及 新情況的泛化程度,驗證集作用是挑出擬合...

第三週學習總結

這周關於深度學習的內容比較簡單,是對線性代數的簡單回顧,所以我在這裡做乙個簡單的總結。向量與矩陣 矩陣是由m n個數組成的乙個m行n列的矩形 特別地,乙個m 1矩陣也稱為乙個m維列向量 而乙個1 n矩陣 也稱為乙個n維行向量.向量可以用矩陣表示,且有時特殊矩陣就是向量.簡言之就是矩陣包含向量.矩陣加...

第三週學習總結

複習了一周唄 就感覺鞏固了一下,學習方法還是理解著背,死記硬背是不可能的,除了英語和文科這輩子都不可能死記硬背的。今天還複習了剩下的搜尋。比如拓撲排序,根據深度進行的排序?雖然又看了一遍但是還是不知道這個到底與按深度排序有什麼區別的說,總之就是先算出深度,然後從入度為0的乙個個廣搜,放進陣列就好。剩...