日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习手动撸代码系列3-感知机

發布時間:2024/1/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习手动撸代码系列3-感知机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面講了線性回歸和局部加權線性回歸。

今天講感知機,感知機是模仿人體大腦處理外界信息的一種算法,即輸入信號→處理→輸出信號

它是最簡單形式的前饋神經網絡,是一種二元線性分類器, 把矩陣上的輸入x(實數值向量)映射到輸出值f(x)上(一個二元的值)。

感知器的學習通過對所有訓練實例進行多次的迭代進行更新的方式來建模。這有點類似于前面的線性回歸學習方式。

Dm={(x1,y1),…,(xm,ym)}表示一個有m個訓練實例的訓練集。

每次迭代權重向量以如下方式更新: 對于每個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跑一波代碼。

選其中的兩類試一下感知機的分類效果。

看一下分類效果如何,

# 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()

第五次迭代后,正確率已經百分百了。

最后畫一波決策邊界可視化下,

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")

雖然 感知機在上面 Iris 例子里表現得很好,但在其他問題上卻不一定表現得好。

感知機比較適用于線性可分的數據里,但在線性不可分的情況下,就無法 converge了。

總結

以上是生活随笔為你收集整理的机器学习手动撸代码系列3-感知机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。