1. 圖像數(shù)據(jù)轉(zhuǎn)結(jié)構(gòu)化數(shù)據(jù)
在機(jī)器學(xué)習(xí)中瘾杭,圖像的結(jié)構(gòu)一般是(RGB)三個(gè)通道的,每個(gè)通道包括了它的(nrows, ncols).對(duì)應(yīng)圖像的長(zhǎng)(行數(shù))和寬(列數(shù))。 我們把圖像每個(gè)像素點(diǎn)看作一個(gè)特征值點(diǎn)。那么根據(jù)我們研究的問(wèn)題抒抬,比如基本的MNIST數(shù)字分類問(wèn)題,由于它是一個(gè)圖像對(duì)應(yīng)一個(gè)標(biāo)簽晤柄, 如下圖所示:
我們發(fā)現(xiàn)這樣的一個(gè)圖像對(duì)應(yīng)一個(gè)標(biāo)簽的分類問(wèn)題擦剑,在結(jié)構(gòu)化數(shù)據(jù)的情況下, 往往將所有的像素點(diǎn)作為一個(gè)特征變量芥颈, 那么對(duì)于MNIST的圖像特征變量就是784個(gè)惠勒。
對(duì)于回歸問(wèn)題中,比如一般遙感領(lǐng)域爬坑,如下圖所示:
每個(gè)圖像通道可以理解為1個(gè)波段纠屋,那么我們使用就會(huì)是多個(gè)圖像對(duì)應(yīng)一個(gè)圖像,這個(gè)的圖像可以作為預(yù)測(cè)的圖像盾计。那么這里的特征選擇的時(shí)候就不再使用整個(gè)圖像像素作為不同的特征售担,而是將不同的波段作為特征,上圖的特征數(shù)目就是N個(gè)闯估, 那么對(duì)應(yīng)位置的像素提取之后就可以作為一組樣本灼舍。這樣實(shí)現(xiàn)圖像數(shù)據(jù)轉(zhuǎn)結(jié)構(gòu)化數(shù)據(jù)。
在數(shù)據(jù)轉(zhuǎn)化的過(guò)程中涨薪,我們一般使用numpy.reshape()進(jìn)行數(shù)據(jù)轉(zhuǎn)化。這里進(jìn)行相應(yīng)的演示炫乓。
1. MNIST分類圖像
我們發(fā)現(xiàn)numpy中是按行將數(shù)據(jù)展開刚夺,并且按照展開和
### 原始圖像
>>> a = np.random.randn(2,3,)
>>> a
array([[ 1.61849466, -1.34764714, -0.19880315],
[ 2.48284474, -0.05315652, -0.02863857]])
### 展開
>>> b = a.reshape(1,6)
>>> b
array([[ 1.61849466, -1.34764714, -0.19880315, 2.48284474, -0.05315652,
-0.02863857]])
### 恢復(fù)
>>> c = b.reshape(2,3)
>>> c
array([[ 1.61849466, -1.34764714, -0.19880315],
[ 2.48284474, -0.05315652, -0.02863857]])
2. 多波段遙感圖像
np.random.seed(0)
#### a 兩個(gè)通道 3*2 , 按照 行 優(yōu)先展開,第一個(gè)通道的圖像每個(gè)像素相當(dāng)于第一特征變量的所有值末捣,
#### 第二個(gè)通道相當(dāng)于第二個(gè)特征變量所有值侠姑,依次類推
nrows = 3
ncols = 2
a = np.random.randn(2,nrows,ncols)
print('a:')
print(a)
>>>
a:
[[[ 1.76405235 0.40015721]
[ 0.97873798 2.2408932 ]
[ 1.86755799 -0.97727788]]
[[ 0.95008842 -0.15135721]
[-0.10321885 0.4105985 ]
[ 0.14404357 1.45427351]]]
#### reshape 轉(zhuǎn)化為離散變量,相當(dāng)于每個(gè)通道的對(duì)應(yīng)位置的像素組合成一個(gè)樣本(也就是一個(gè)樣本 6個(gè)特征)
b = a.reshape(2, nrows * ncols)
print('\nb:')
print(b)
>>>
b:
[[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799 -0.97727788]
[ 0.95008842 -0.15135721 -0.10321885 0.4105985 0.14404357 1.45427351]]
### 轉(zhuǎn)置之后相當(dāng)于分離了樣本的(樣本數(shù)目箩做,特征數(shù))并且位置一一對(duì)應(yīng)
print('\nb transpose:')
print(b.T)
>>>
b transpose:
[[ 1.76405235 0.95008842]
[ 0.40015721 -0.15135721]
[ 0.97873798 -0.10321885]
[ 2.2408932 0.4105985 ]
[ 1.86755799 0.14404357]
[-0.97727788 1.45427351]]
#### 定義一個(gè)c與 b.T 做點(diǎn)積運(yùn)算 d = b.T * c莽红,這樣對(duì)應(yīng)樣本量的值, 類似樣本量個(gè)預(yù)測(cè)值
c = np.array([[1,2],
[2, 3]])
d = np.dot(b.T, c)
#### 輸出對(duì)應(yīng)的預(yù)測(cè)值
print('\nd:')
print(d)
>>>
d:
[[3.66422918 6.37836994]
[0.09744279 0.34624279]
[0.77230028 1.64781941]
[3.0620902 5.7135819 ]
[2.15564513 4.16724669]
[1.93126913 2.40826476]]
print('\n d reshape:')
#### 重新reshape 對(duì)應(yīng)位置的值不變
print(d.T.reshape(2,nrows,ncols))
>>>
d reshape:
[[[3.66422918 6.37836994]
[0.09744279 0.34624279]
[0.77230028 1.64781941]]
[[3.0620902 5.7135819 ]
[2.15564513 4.16724669]
[1.93126913 2.40826476]]]
3. 總結(jié)
- numpy中的數(shù)據(jù)處理是按行操作。
- 根據(jù)我們的需求將圖像數(shù)據(jù)轉(zhuǎn)化為結(jié)構(gòu)化數(shù)據(jù)安吁。