机器学习笔记(十七)——非线性单层感知器
作者:互联网
本博客仅用于个人学习,不用于传播教学,主要是记自己能够看得懂的笔记(
学习知识、资源和数据来自:机器学习算法基础-覃秉丰_哔哩哔哩_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(515): 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()
得到结果:
[[ 0.18578243]
[-0.20130599]
[ 0.94699427]
[ 0.54850834]
[-0.97957014]
[ 0.39916755]]
[[ 0.34959893]
[-0.83171143]
[-0.18287577]
[-0.0818971 ]
[ 2.1395937 ]
[-0.73070249]]
标签:感知器,非线性,yy,xx,plt,np,x1,data,单层 来源: https://www.cnblogs.com/lunnyliu/p/15090072.html