編譯環境使用的是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神經元。在生物的神經網路中,假設一些神經元處於興奮狀態,那麼這些神經元就會向與之相連線的神經元傳送化學物質,...