-
class?AdalineGD(object): ????def?__init__(self,?eta,?n_iter): ????????self.eta?=?eta ????????self.n_iter?=?n_iter ????def?fit(self,?X,?y): ????????self.w_?=?np.zeros(1?+?X.shape[1]) ????????self.cost_?[] ????????for?i?in?range(self.n_iter): ????????????output?=?self.net_input(X) ????????????errors?=?y?-?output ????????????self.w_[1:]?+=?self.eta?*?X.T.dot(errors) ????????????self.w_[0]?+=?self.eta?*?errors.sum() ????????????cost?=?(errors?**?2).sum()?/?2.0 ????????????self.cost_.append(cost) ????????return?self ????def?net_input(self,?X): ????????return?np.dot(X,?self.w_[1:])?+?self.w_[0] ????def?activation(self,?X): ????????return?self.net_input(X) ????def?predict(self,?X): ????????return?np.where(self.activation(X)?>=?0,?1,?-1)
查看全部 -
η是前面提到的學習率,μ=-η。
查看全部 -
倒數第三行,求和符號下面的是j,不是i。
查看全部 -
對w求偏導,會得到一條切線的斜率k,當在U形圖左半部的時候,k<0,增大w的值,在在右半部的時候,k>0,減小w的值,就會找到J(w)的最小值。
查看全部 -
不斷調整w0-wm,使得J(w)的值最小,對神經元的訓練效果才最好。
查看全部 -
感知器的激活函數是步調函數,輸入值大于給定的閾值輸出1,小于輸出0。自適應線性神經元激活函數是1*w0+x1*w1+... 點積求和的計算結果與正確的結果比較
查看全部 -
from?matplotlib.colors?import?ListedColormap def?plot_decision_region(X,?y,?classifier,?resolution=0.02): ????marker?=?('s',?'x',?'o',?'v') ????colors?=?('red',?'blue',?'lightgreen',?'gray',?'cyan') ????cmap?=?ListColormap(colors[:len(np.unique(y))]) ???? ????x1_min,?x1_max?=?X[:,?0].min()?-?1,?X[:,?0].max() ????x2_min,?x2_max?=?X[:,?1].min()?-?1,?X[:,?1].max() ???? ????#?將np.arange()中的向量擴展成一個矩陣 ????''' ????xx1: ????a?=?np.arange(x1_min,?x1_max,?resolution)?向量元素為185個 ????xx1[255,?185],將a中的元素作為一行,重復255行 ????xx2: ????b?=?np.arange(x2_min,?x2_max,?resolution)?向量元素為255個 ????xx2[255,?185],將b中的元素作為一列,重復185列 ????''' ????xx1,?xx2?=?np.mesbgrid(np.arange(x1_min,?x1_max,?resolution), ???????????????????????????np.arrange(x2_min,?x2_max,?resolution))
查看全部 -
file?=?"iris.csv" import?pandas?as?pd?#?數據讀取類庫 #?header指定文件是否有表頭 df?=?pd.read_csv(file,?header?=?None) #?顯示文件前十行 df,head(10) import?matplotlib.pyplot?as?plt import?numpy?as?np #?得到數據前一百行的第五列 y?=?df.loc[0:100,?4].values print(y) #?將字符串轉化為數字 y?=?np.where(y?==?'Iris-setosa',?-1,?1) #?抽取數據第0列和第2列 x?=?df,iloc[0:100,?[0,?2]].values #?scatter散列點繪圖 plt.scatter(x[:50,?0],?x[:50,?1],?color='red',?marker='o',?label='setosa') plt.scatter(x[50:100,?0],?x[50:100,?1],?color='blue',?marker='x',?label='versicolor') plt.xlabel('花瓣長度') plt.ylabel('花莖長度') plt.legend(loc='upper?left') plt.show()
查看全部 -
import?numpy?as?np class?Perceptron(object): ????def?__init__(self,?eta?=?0.01,?n_iter?=?10): ????????self.eta?=?eta ????????self.n_iter?=?n_iter ????def?fit(self,?X,?y): ????????self.w_?=?np.zero(1?+?X.shape[1]) ????????self.error_?=?[] ????????for?_?in?range(self.n_iter): ????????????errors?=?0 ????????????''' ????????????X:[[1,?2,?3],?[4,?5,?6] ????????????y:[1,?-1] ????????????zip(X,?y):[[1,?2,?3,?1].?[4,?5,?6,?-1]] ????????????''' ????????????for?xi,?target?in?zip(X,?y): ????????????????''' ????????????????update?=?n?*?(y?-?y') ????????????????''' ????????????????update?=?self.eta?*?(target?-?self.predict(xi)) ????????????????''' ????????????????xi是一個向量 ????????????????update?*?xi等價于 ????????????????[w1?=?x1*update,?w2?=?x2*update,?......] ????????????????''' ????????????????self.w_[1:]?+=?update?*?xi ????????????????self.w_[0]?+=?update ????????????????errors?+=?int(update?!=?0.0) ????????????????self.errors_.append(errors) ????????def?net_input(self,?X): ????????????''' ????????????z?=?w0*1?+?w1*x1?+?w2*x2?+..... ????????????np.dot()是做點積 ????????????''' ????????????return?np.dot(X,?self.w_[1:])?+?self.w_[0] ????????def?predict(self,?X): ????????????return?np.where(self.net_input(X)?>=?0.0,?1,?-1)
查看全部 -
import?numpy?as?np class?Perceptron(object): ????''' ????eta:學習率 ????n_iter:權重向量的訓練次數 ????w_:神經分叉權重向量 ????errors_:用于記錄神經元判斷出錯次數 ????''' ????def?__init__(self,?eta?=?0.01,?n_iter?=?10); ????????self.eta?=?eta ????????self,n_iter?=?n_iter ????def?fit(self,?X,?y): ????????''' ????????輸入訓練數據,培訓神經元 ????????X是輸入樣本向量,y是對應的樣本分類 ????????X:shape[n_samples,?n_features] ????????X:[[1,?2,?3],?[4,?5,?6]] ????????n_samples:?2 ????????n_features:?3 ????????y:[1,?-1] ????????''' ????????#初始化權重向量為0,加1是因為提到的w0,即步調函數的閾值 ????????self.w_?=?np.zero(1?+?X.shape[1]) ????????self.errora_?=?[]
查看全部 -
適用范圍:預測的數據是可以進行線性分割的
感知器的隱含層是點積求和函數
查看全部 -
閾值也是需要更新的查看全部
-
權重更新算法
學習率是訓練者人為設置的
查看全部 -
右側的關于z的函數就是感知器
查看全部 -
感知器數據分類算法步驟
查看全部
舉報
0/150
提交
取消