機器學習之神經網路及python實現

2021-08-29 01:15:33 字數 3212 閱讀 4831

神經網路在機器學習中有很大的應用,甚至涉及到方方面面。本文主要是簡單介紹一下神經網路的基本理論概念和推算。同時也會介紹一下神經網路在資料分類方面的應用。

首先,當我們建立乙個回歸和分類模型的時候,無論是用最小二乘法(ols)還是最大似然值(mle)都用來使得殘差達到最小。因此我們在建立模型的時候,都會有乙個loss function。

而在神經網路裡也不例外,也有個類似的loss function。

對回歸而言:

對分類而言:

然後同樣方法,對於w開始求導,求導為零就可以求出極值來。

關於式子中的w。我們在這裡以三層的神經網路為例。先介紹一下神經網路的相關引數。

第一層是輸入層,第二層是隱藏層,第三層是輸出層。

在x1,x2經過w1的加權後,達到隱藏層,然後經過w2的加權,到達輸出層

其中,我們有:

至此,我們建立了乙個初級的三層神經網路。

當我們要求其的loss function最小時,我們需要逆向來求,也就是所謂的backpropagation。

我們要分別對w1和w2進行求導,然後求出其極值。

從右手邊開始逆推,首先對w2進行求導。

代入損失函式公式:

然後,我們進行化簡:

化簡到這裡,我們同理再對w1進行求導。

我們可以發現當我們在做bp網路時候,有乙個逆推回去的誤差項,其決定了loss function 的最終大小。

在實際的運算當中,我們會用到梯度求解,來求出極值點。

總結一下來說,我們使用向前推進來理順神經網路做到回歸分類等模型。而向後推進來計算他的損失函式,使得引數w有乙個最優解。

當然,和線性回歸等模型相類似的是,我們也可以加上正則化的項來對w引數進行約束,以免使得模型的偏差太小,而導致在測試集的表現不佳。

python 的實現:

使用了keras的庫

解決線性回歸:

複製**

model.add(dense(1, input_dim=n_features, activation='linear', use_bias=true))

# use mean squared error for the loss www.thd540.com  metric and use the adam backprop algorithm

model.compile(loss='mean_squared_error', optimizer='adam')

# train the network (learn the weights)

# we need to convert from dataframe to numpyarray

history = model.fit(x_train.values, y_train.values,  epochs=100, 

batch_size=1, verbose=2, validation_split=0)

複製**

解決多重分類問題:

複製**

複製**

當我們選取最優引數時候,有很多種解決的途徑。這裡就介紹一種是gridsearchcv的方法,這是一種暴力檢索的方法,遍歷所有的設定引數來求得最優引數。

複製**

from sklearn.model_selection import gridsearchcv

def create_model(optimizer='rmsprop'):

model = sequential()

model.add(dense(64, activation='relu', input_dim=n_features))

model.add(dropout(0.5))

model.add(dense(64, activation='relu'))

model.add(dropout(0.5))

model.add(dense(7, activation='softmax'))

model.compile(loss='categorical_www.micheng178.com crossentropy', optimizer=optimizer, metrics=['accuracy'])

return model

model = kerasclassifier(build_fn=create_model, verbose=0)

optimizers = ['rmsprop']

epochs = [5, 10, 15]

batches = [128]

param_grid = dict(optimizer=optimizers, epochs=epochs, batch_size=batches, verbose=['2'])

grid = gridsearchcv(estimator=model, param_grid=param_grid)

grid.fit(x_train.values, y_train.values)

機器學習之神經網路

機器學習是一門致力於研究如何通過計算的手段,利用經驗來改善系統自身的效能。經驗通常以資料的形式存在,因此機器學習所研究的主要內容是關於在計算機上從資料中產生 模型 的演算法,即 學習演算法 有了學習演算法,將經驗資料提供給它,它就能基於這些資料產生模型 當面對新情況時,模型會給我們提供相應的判斷。一...

機器學習之神經網路NN

神經網路 neural network 以人腦中的神經網路為啟發而產生的,最著名對的演算法是backpropagation bp 演算法。可用來解決分類問題,也可用來解決回歸問題 詳情見前言 多層向前神經網路中使用了bp演算法 多層向前神經網路的組成,每一層由單元組成 圖中小圈圈 輸入層 由訓練集的...

python機器學習之神經網路 三

來自 前面兩篇文章都是參考書本神經網路的原理,一步步寫的 這篇博文裡主要學習了如何使用neurolab庫中的函式來實現神經網路的演算法。首先介紹一下neurolab庫的配置 neurolab需要採用python安裝第三方軟體包的方式進行安裝,這裡介紹一種安裝方式 1 進入cmd視窗 2 進入解壓檔案...