python神经网络之实现双层感知器和神经网络感知器算法将鸢尾分类

数据集请点赞关注收藏后私信博主要

问题描述:实现一个简单的只有输入层和输出层的前馈神经网络,输入数据与输出数据有下面的对应关系

[0,0,1]->0

[0,1,1]->1

[1,0,1]->0

[1,1,1]->1

从数据可以看出 输入层只有三个神经元 输出层只有一个神经元 

由下图可以看出 随着训练次数的增加 误差在逐渐减小并收敛

代码如下 

import  numpy as np
def sigmoid(x):
    return (1/(1+np.exp(-x)))
def dsigmoid(y):
    return  y*(1-y)
x=np.array([[0,0,1],
           [0,1,1],
           [1,0,1],
           [1,1,1]])
y=np.array([0,1,0,1]).T
w0=np.random.random((3,4))
print(w0)
b0=0.5
lrate=0.3
for epochs in range(20):
    inx=x
    outy=sigmoid(np.dot(inx,w0)+b0)
    w0+=lrate*np.dot(inx.T,2*(y-outy)*dsigmoid(outy))
    b0+=lrate*2*(y-outy)*dsigmoid(outy)
    err=(y-outy)*(y-outy)
    print("epochs=",epochs+1,"error is",err.T)

 2:使用神经网络感知器算法进行鸢尾花分类

问题描述:定义一个神经网络算法 对鸢尾花进行分类,使用iris数据集中的花瓣长度和花萼长度两个特征

要求:构造神经网络类,学习率为0.2,初始权重和截距为0,利用误差反向传播算法,对权重和截距进行更新

可视化和结果如下

 

 输出结果显示 算法迭代四次以后,得到一个比较稳定的权重参数[1.4,-3.68]这个权重参数保持不变一直到第十次迭代  同样大家可以修改学习率和迭代次数来观察结果变化

代码如下

import  numpy as np
import  pandas as pd
import  matplotlib.pyplot as plt
class ANNnet(object):
    def __init__(self,lrate=0.2,epochs=10):
        self.lrate=lrate
        self.epochs=epochs
    def train(self,x,y):
        self.weight=np.zeros(x.shape[1])
        print('initial weight',self.weight)
        self.b=0
        for i in range(self.epochs):
            for x,y in zip(x,y):
                delta=self.lrate*(y-self.predict(x))
                self.weight[:]+=delta*x
                self.b+=delta
            print('weight after',i+1,'epochs',self.weight)
    def net_input(self,x):
        return x
    def predict(self,x):
        y=np.dot(x,self.weight[:])+self.b
        return  np.where(y>=0,1,-1)
print('step1 加载数据')
df=pd.read_csv(r'iris.csv',header=None)
print('step 2 可视化')
y=df.loc[0:,4].values
y=np.where(y=='setosa',1,-1)
x=df.iloc[0:,[0,2]].values
plt.scatter(x[:50,0],x[:50,1],color="red",marker='o',label='Setosa')
plt.scatter(x[50:,0],x[50:,1],color="blue",marker='o',label='Vresicolor or Virginica')
plt.xlabel("petal length")
plt.ylabel("sepal length")
plt.legend(loc='upper left')
plt.show()
print('step3 构建神经网络')
pr=ANNnet()
print('step4:fitting')
pr.train(x,y)
print('step5 predicting')
print('iris1 result',pr.predict([5.1,1.4]))
print('iris2 result',pr.predict([7,4.7]))
print('iris3 result',pr.predict([5.9,5.1]))












数据集请点赞关注收藏后私信博主要

猜你喜欢

转载自blog.csdn.net/jiebaoshayebuhui/article/details/126999308