1. 程式人生 > 其它 >機器學習筆記(十七)——非線性單層感知器

機器學習筆記(十七)——非線性單層感知器

本部落格僅用於個人學習,不用於傳播教學,主要是記自己能夠看得懂的筆記(

學習知識、資源和資料來自:機器學習演算法基礎-覃秉豐_嗶哩嗶哩_bilibili

對於非線性的問題,比如異或問題這種不能用直線解決的問題(如下圖),可以選擇用非線性的輸入來解決。

方法其實與之前的非線性邏輯迴歸有點像,所以就不用多說了。

Python程式碼:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures

x_data=np.array([[1,0,0,0,0,0],[1,1,0,1,0,0],[1,0,1,0,0,1],[1,1,1,1,1,1]]) #
座標,格式為[1,x1,x2,x1^2,x1*x2,x2^2] y_data=np.array([[1],[-1],[-1],[1]]) #標籤 x0=[0,1] y0=[0,1] x1=[1,0] y1=[0,1] plt.plot(x0,y0,'bo') plt.plot(x1,y1,'rx') plt.show() w=(np.random.random([6,1])-0.5)*2 #隨機的-1到1的數 print(w) lr=0.01 #learning rate for i in range(5000): y=np.dot(x_data,w) w_=lr*np.dot(x_data.T,y_data-y)#
/float(x_data.shape[0]) w+=w_ print(w) model=PolynomialFeatures(degree=2) xx=np.arange(-1,2,0.02) yy=np.arange(-1,2,0.02) xx,yy=np.meshgrid(xx,yy) z=model.fit_transform(np.c_[xx.ravel(),yy.ravel()])*np.mat(w) for i in range(len(z)): if z[i]<0: z[i]=0 else: z[i]=1 z=z.reshape(xx.shape) plt.contourf(xx,yy,z) plt.plot(x0,y0,
'bo') plt.plot(x1,y1,'rx') plt.show() w=np.mat(w) print(x_data*w) #與真實值比較

得到結果:

[[ 0.88654597]
[ 0.45097739]
[-0.37685373]
[ 0.54111887]
[-0.40834884]
[ 0.56432373]]
[[ 0.99983515]
[-1.04493328]
[-1.47045127]
[-0.95479179]
[ 3.99952981]
[-0.5292738 ]]

[[ 0.99983515]
[-0.99988992]
[-0.99988992]
[ 0.99991482]]