在分類的時候需要進行資料歸一化
那麼為什麼要進行資料歸一化?
像是腫瘤情況,當時間單位是天,大小單位是厘公尺,由於時間的跨度比大小的跨度差值大的太多,會導致樣本間的距離被時間所主導,同理,將時間變成以年為單位一樣會因為差值太大而導致模型不行
所謂的資料歸一化就是將所有的資料對映到同一尺度中
這說到了最簡單的方式
最值歸一化 normalization
其就是將把所有的資料對映到0到1之間
方式很簡單,對於我們的每乙個特徵值設為x,用x這個特徵點再減去xmin,再除以xmax減去xmin即可
適用於分布明顯有邊界的情況,但是其受outlier的影響比較大,如果沒有明顯邊界的話,比如有個100個樣本,99個年收入10萬,乙個年收入1000萬,如果把這個資料對映到0到1之間的話,很明顯,這個模型是不夠好的
相應的改進的方式:均值方差歸一化 standardization
均值方差歸一化:我們的資料並不能保證在0和1之間,但是能保證所有資料歸一到均值為0方差為1的分布中
這種方式適用於資料分布沒有明顯的邊界,整體資料集中存在極端的資料值,即使有明顯的邊界,使用這種方式也是可以的,一般情況使用這種就可以
這種歸一化的方式計算的方法就是用每乙個特徵值減去特徵值對應的均值,再除以特徵值對應的方差就可以了
首先我們先確定乙個隨機數組
然後使x中的每乙個都減去其最小值再除以最大值減最小值
(x - np.min(x)) / (np.max(x) - np.min(x))
這樣,最終的結果就是乙個向量,其中每乙個數值都是在0到1中了
然後我們設定乙個矩陣
x = np.random.randint(0,100,(50,2))
取前十個元素
這就有乙個問題了,很明顯,向量中的資料都是浮點型的資料,而我們設定的陣列只能存放整形,因此我們需要將其強制轉換成浮點型
x = np.array(x, dtype=float)
再取前十個元素,可以發現已經變成浮點數了
最值歸一化
注意:每乙個維度都是對應的列的方向上
對每乙個維度進行最值歸一化
先對第零這個維度,對應的列方向上,讓它去等於這一列的所有的數值減去這一數列中所對應的最小值,得到的這個結果去除以這列數值對應的最大值減去這一列數值中對應的最小值,即完成了第乙個特徵值的最值歸一化
x[:,0] = (x[:,0]- np.min(x[:,0])) / (np.max(x[:,0]) -np.min(x[:,0]))
對第一維度也最值歸一化以後,再取前十個元素可得
散點圖如下
其維度的均值並不會正好等於0.5,會上下的偏差
均值方差歸一化
同樣的設定乙個矩陣
x2 = np.random.randint(0,100,(50,2))
x2 = np.array(x2, dtype=float)
計算過程,使這一列的值減去對應的平均值,然後再除以相應的方差即可
x2[:,0] = (x2[:,0] - np.mean(x2[:,0])) / np.std(x2[:,0])
通過視覺化我們可以發現我們並不能保證這些資料全部在0到1之間
其均值和方差分別趨向於0和1
這樣即使出現極端數值,我們的均值和方差也不會出現過大的偏移
機器學習之資料歸一化
機器學習中,資料歸一化是非常重要,如果不進行資料歸一化,可能會導致模型壞掉或者訓練出乙個奇怪的模型。現在有乙個訓練資料集,包含兩個樣本,內容如下 腫瘤大小 cm 發現時間 day 樣本11 200樣本2 5100 以 k 近鄰演算法為例,發現時間 的數值比 腫瘤大小 的數值大很多,樣本間的距離被 發...
機器學習之 歸一化
之前我們討論了幾個機器學習的模型,線性回歸模型 linear regression 和邏輯回歸模型 logistic regression 這一次我們討論一下關於模型資料擬合的問題以及歸一化方法 regularization 過擬合問題 the problem of overfitting 如果我們...
機器學習 資料歸一化
機器學習中,在資料預處理過程中,通過將資料歸一化可以加快梯度下降求最優解的速度,也有可能提高模型計算的精度。常用的歸一化方法主要有兩種 最值歸一化。比如把最大值歸一化成1,最小值歸一化成 1 或把最大值歸一化成1,最小值歸一化成0。適用於本來就分布在有限範圍內的資料。其中常用的方法有 線性比例變換法...