首先載入庫
import numpy as np
import scipy.io as sio
import matplotlib.pyplot as plt
接著匯入資料
data=sio.loadmat(
"ex3data1.mat"
)type
(data)
dict
可知 data 是乙個 dict , 我們看下他有哪些東西
data.keys(
)
dict_keys(['__header__', '__version__', '__globals__', 'x', 'y'])
獲取原始資料 raw_x 和 raw_y
raw_x=data[
'x']
raw_y=data[
'y']
raw_x.shape,raw_y.shape
((5000, 400), (5000, 1))
raw_y 是乙個二維陣列, 我們將其變為一維陣列
y=raw_y.flatten(
)y.shape
(5000,)
現在得到了 raw_x 和 y,為了方便,我們將其變為 x,y
x=raw_x
y=y
x.shape,y.shape
((5000, 400), (5000,))
theta = sio.loadmat(
'ex3weights.mat'
)type
(theta)
dict
# 檢視其資料
theta.keys(
)
dict_keys(['__header__', '__version__', '__globals__', 'theta1', 'theta2'])
# 獲取資料
theta1=theta[
'theta1'
]theta2=theta[
'theta2'
]theta1.shape,theta2.shape
((25, 401), (10, 26))
# 定義 sigmod
defsigmoid
(z):
return1/
(1+np.exp(
-z))
神經網路是這樣:[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-b39haxog-1600692167001)(attachment:%e5%9b%be%e7%89%87.png)]
# 先計算輸入層. 輸入層比較簡單,就是原始資料
a1=x
維度:
x: (5000, 400)
theta1: (25, 401)
在 x 的首列插入全 1
x=np.insert(raw_x,
0,values=
1,axis=1)
x.shape,theta1.shape
((5000, 401), (25, 401))
# 計算 a2
a2=sigmoid([email protected])
a2.shape,theta2.shape
((5000, 25), (10, 26))
# 接著計算 a3 輸出
a2_t=np.insert(a2,
0,values=
0,axis=1)
a2_t.shape
(5000, 26)
a3=sigmoid([email protected])
a3.shape
(5000, 10)
pre_res=np.argmax(a3,axis=1)
+1pre_res.shape
(5000,)
# 看下準確率
acc=[1
if a==b else
0for
(a,b)
inzip
(y,pre_res)
]acc=np.
sum(acc)
/len
(y)acc
0.976
fig,ax=plt.subplots(ncols=
10,nrows=
10,figsize=(10
,10),sharex=
true
,sharey=
true
)image_indexs=np.random.choice(
len(raw_x)
,100
)images=raw_x[image_indexs,:]
# 配合 sharex=true,sharey=true 隱藏座標
plt.xticks(
)plt.yticks(
)# 注意,0 = 10
for i in
range(10
):for j in
range(10
):f_index=i*
10+j
ax[i,j]
.imshow(images[f_index]
.reshape((20
,20))
.t)# pre_num[image_indexs[f_index]] 為的**值
把 a2 繪製出來看看
fig,ax=plt.subplots(ncols=
10,nrows=
10,figsize=(10
,10),sharex=
true
,sharey=
true
)image_indexs=np.random.choice(
len(raw_x)
,100
)images=a2[image_indexs,:]
# 配合 sharex=true,sharey=true 隱藏座標
plt.xticks(
)plt.yticks(
)# 注意,0 = 10
for i in
range(10
):for j in
range(10
):f_index=i*
10+j
ax[i,j]
.imshow(images[f_index]
.reshape((5
,5))
.t)# pre_num[image_indexs[f_index]] 為的**值
a2 就是學到的特徵,其實我們看不出啥
機器學習之神經網路
機器學習是一門致力於研究如何通過計算的手段,利用經驗來改善系統自身的效能。經驗通常以資料的形式存在,因此機器學習所研究的主要內容是關於在計算機上從資料中產生 模型 的演算法,即 學習演算法 有了學習演算法,將經驗資料提供給它,它就能基於這些資料產生模型 當面對新情況時,模型會給我們提供相應的判斷。一...
機器學習之神經網路NN
神經網路 neural network 以人腦中的神經網路為啟發而產生的,最著名對的演算法是backpropagation bp 演算法。可用來解決分類問題,也可用來解決回歸問題 詳情見前言 多層向前神經網路中使用了bp演算法 多層向前神經網路的組成,每一層由單元組成 圖中小圈圈 輸入層 由訓練集的...
python機器學習之神經網路 三
來自 前面兩篇文章都是參考書本神經網路的原理,一步步寫的 這篇博文裡主要學習了如何使用neurolab庫中的函式來實現神經網路的演算法。首先介紹一下neurolab庫的配置 neurolab需要採用python安裝第三方軟體包的方式進行安裝,這裡介紹一種安裝方式 1 進入cmd視窗 2 進入解壓檔案...