機器學習筆記 實現簡單的神經網路

2021-07-29 23:36:39 字數 3696 閱讀 5936

編譯環境使用的是anaconda,應用的是python語言

安裝後進入:

environment-->root-->open with jupyter notebook-->彈出網頁-->new-->python

import numpy as np

class perceptron(object):

"""實現感知器的類

eta:學習率

n_iter:權重向量的訓練次數

w_:神經分叉權重向量

errors_:用於記錄神經元判斷出錯次數

def _int:為初始化函式

"""def _int_(self, eta = 0.01, n_iter=10):

self.eta=eta;

self.n_iter=n_iter

pass

def fit(self,x,y):

"""1.fit方法是為輸入訓練資料,培訓神經元

2.其中x是電訊號向量,即輸入樣本向量

3.y:每乙個樣本所屬於的分類

4.每乙個x都有乙個shape屬性,是對x向量的描述

x:shape(n_samples,n_features)

其中n_samples是指x中有多少個輸入的樣本量

n_features這個分叉輸入的電訊號有多少個,比如神經元有三個分叉,則這個神經元

可以接受三個輸入電訊號

eg:x:[[1,2,3],[4,5,6]]

n_samples:2

n_features:3

y:[1,-1]表示[1,2,3]屬於分類1,[4,5,6]屬於分類-1

1.初始化權重向量為0

2.np.zero:數學庫,初始化分量全是0的乙個向量

3.其中x.shape[1]為x.shape中的n_samples的值即為2

4.為什麼np.zero中要+1,是對應閾值中的對應的w0,(步調函式的閾值)

5.self.errors_表示記錄錯誤的次數

"""self.w_=np.zero(1+x.shape[1]);

self.errors_=

"""進入訓練的過程,訓練n_iter,如果嘗試了n_iter次都是錯誤的,則終止訓練

"""for _ in range(self.n_iter):

errors=0

"""1. x:[[1,2,3],[4,5,6]] y:[1,-1]

2.zip(x,y) = [[1,2,3,1],[4,5,6,-1]]

3.for中運用權值更新演算法

update=η*(y-y'),η是學習率,y是電訊號的向量分類,y'是計算出來的分類

y'是對應predict所呼叫出來的結果

"""for xi,target in zip(x,y):

update = self.eta * (target - self.predict(xi))

"""1.xi是向量,update是常量

update * xi等價於:

▽w(1)=x[1]*update,▽w(2)=x[2]*update,▽w(3)=x[3]*update

self.w[1:] +=等價於:

把原來的權重分量全部加上增加的分量▽w(1),▽w(2),▽w(3)

self.w[1:]等價於

是從1開始,忽略0元素,即忽略掉0

這樣就可以更新每乙個神經分叉進行更新

"""self.w[1:] += update * xi

"""更新閾值w0,然後統計判斷錯誤的次數,如果錯誤次數越來越少,學習效果

越來越好,對新資料的判斷越來越準確

如果判斷正確,則y-y'=0,則target - self.predict(xi)=0

"""self.w_[0] += update;

errors += int(update !=0.0)

pass

pass

"""1.當神經元接受訊號的時候會將接受的資料弱化,通過向量的點積運算來進行弱化

2.np.dot做點積,其中權重向量就是進行弱化的那個向量

3.z=w0*1+w1*x1+w2*x2+...+xn*wn

如果z<0則輸入的x屬於電訊號-1

"""def net_input(self,x):

return np.dot(x,self.w_[1:])+self.w_[0]

pass

def predict(self,x):

return np.where(self.net_input(x) >= 0.0 , 1,-1)

pass

pass

附上不帶注釋的:

import numpy as np

class perceptron(object):

def _int_(self, eta = 0.01, n_iter=10):

self.eta=eta;

self.n_iter=n_iter

pass

def fit(self,x,y):

self.w_=np.zero(1+x.shape[1]);

self.errors_=

for _ in range(self.n_iter):

errors=0

for xi,target in zip(x,y):

update = self.eta * (target - self.predict(xi))

self.w_[1:] += update * xi

self.w_[0] += update;

errors += int(update !=0.0)

pass

pass

def net_input(self,x):

return np.dot(x,self.w_[1:])+self.w_[0]

pass

def predict(self,x):

return np.where(self.net_input(x) >= 0.0 , 1,-1)

pass

pass

以上**是構建神經元的學習基本模型

通過將大量資料給學習模型,讓學習模型通過對大量資料進行觀察總結出相應規律

根據資料的特點不斷的調節神經元的權重數值,當神經元的權重數值調節到合適範圍之後,就可以利用訓練後的模型

去對新的資料進行運算,通過運算結果就能準確對新的資料進行分類和**

pandas是python中的提供的非常強大的資料讀取類庫

header=none是因為csv資料中第一行往往不是乙個資料,往往是用來說明下面一些資料的資訊的,但**中file中第一行就是資料,所以設定檔案頭為none

file = ''

import pandas as pd

df = pd.read_csv(file,header=none)

df.head(10)

執行結果:

關於csv檔案問題:(該段摘自某網友的回答)

file = ''

import pandas as pd

df = pd.read_csv(file,header=none)

df.head(10)

1.**是檔案的原位址,資料是可以直接從**上拔下來的。

以上執行結果一致。

《機器學習》筆記 神經網路

輸入 乙個實數值向量 x1,xn 輸出 o x sgn w x 其中 向量w w0,w1,wn 是要求的引數,向量x x0,x1,xn x0 1 是輸入 函式o x1,xn 實際上是求 x1,xn 的線性組合是否大於閾值 w0,從幾何上看即是在決策面的哪一側 假設空間 h 學習乙個感知器意味著從空間...

機器學習筆記22 神經網路 卷積神經網路

參考資料 面向機器智慧型的tensorflow實踐 keras example mnist cnn.py keras中文文件 常用層卷積層 卷積理解就是之前影象處理裡用作檢測邊緣 檢測角點的運算元,例如 輸入 12 34 begin 1 2 3 4 end 13 24 核 2 begin 2 end...

機器學習筆記(二) 神經網路

神將網路在解決多分類問題時效果比logistics回歸的效果要好,作為現在最流行的機器學習演算法,我們首先來簡單了解一下 和我們人的神經組成一樣,神將網路也是由神經元組成,先來介紹最普遍的mp神經元。在生物的神經網路中,假設一些神經元處於興奮狀態,那麼這些神經元就會向與之相連線的神經元傳送化學物質,...