其他分享
首页 > 其他分享> > 机器学习笔记(十七)——非线性单层感知器

机器学习笔记(十七)——非线性单层感知器

作者:互联网

本博客仅用于个人学习,不用于传播教学,主要是记自己能够看得懂的笔记(

学习知识、资源和数据来自:机器学习算法基础-覃秉丰_哔哩哔哩_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