机器学习手动撸代码系列3-感知机
前面講了線性回歸和局部加權(quán)線性回歸。
今天講感知機(jī),感知機(jī)是模仿人體大腦處理外界信息的一種算法,即輸入信號→處理→輸出信號。
它是最簡單形式的前饋神經(jīng)網(wǎng)絡(luò),是一種二元線性分類器, 把矩陣上的輸入x(實數(shù)值向量)映射到輸出值f(x)上(一個二元的值)。
感知器的學(xué)習(xí)通過對所有訓(xùn)練實例進(jìn)行多次的迭代進(jìn)行更新的方式來建模。這有點類似于前面的線性回歸學(xué)習(xí)方式。
令Dm={(x1,y1),…,(xm,ym)}表示一個有m個訓(xùn)練實例的訓(xùn)練集。
每次迭代權(quán)重向量以如下方式更新: 對于每個Dm={(x1,y1),…,(xm,ym)}中的每個(x,y)對,
w(j):=w(j)+α(y?f(x))x(j)(j=1,…,n)
這個形式是不是看著有點眼熟,其實就是梯度下降。
下面開始擼代碼走起:
import numpy as py def fit_perceptron(X,y,n_iter=50,eta=0.01):weight=np.zeros(1+X.shape[1])errors=[]for i in range(n_iter):error=0for xi,target in zip(X,y):output=np.dot(xi,weight[1:])+weight[0]class_result=np.where(output>= 0, 1,-1)update=eta*(target-class_result)weight[1:]+=update*xiweight[0]=updateerror+=(update!=0)errors.append(error)return weight,errors def predict_perceptron(X):output=np.dot(X,weight[1:])+weight[0]class_result=np.where(output>= 0, 1,-1)return class_result然后用Iris跑一波代碼。
選其中的兩類試一下感知機(jī)的分類效果。
看一下分類效果如何,
# error 畫圖, 檢查是否 error 趨近于0 在多次 loop 更新后 weight,errors = fit_perceptron(X,y) plt.plot(range(1, len(errors) + 1), errors, marker='o') plt.xlabel('Epochs') plt.ylabel('Number of misclassifications')plt.tight_layout()第五次迭代后,正確率已經(jīng)百分百了。
最后畫一波決策邊界可視化下,
markers = ('s', 'x', 'o', '^', 'v') colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan') cmap = ListedColormap(colors[:len(np.unique(y))]) x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1 x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),np.arange(x2_min, x2_max, resolution)) Z = predict_perceptron(np.array([xx1.ravel(), xx2.ravel()]).T) Z = Z.reshape(xx1.shape) xx1.shape plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap) plt.xlim(xx1.min(), xx1.max()) plt.ylim(xx2.min(), xx2.max()) for idx, cl in enumerate(np.unique(y)):plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],alpha=0.9, c=cmap(idx),marker=markers[idx], label=cl) plt.savefig("perceptron.jpg")雖然 感知機(jī)在上面 Iris 例子里表現(xiàn)得很好,但在其他問題上卻不一定表現(xiàn)得好。
感知機(jī)比較適用于線性可分的數(shù)據(jù)里,但在線性不可分的情況下,就無法 converge了。
總結(jié)
以上是生活随笔為你收集整理的机器学习手动撸代码系列3-感知机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习笔记:Tensorflow手写m
- 下一篇: 十大经典数据挖掘算法:SVM