一、编写程序以实现“感知器(感知准则)”算法:
(1)初始化a=0,将W1和W2中的数据用于程序训练。记录收敛所需的迭代次数(收敛步数);
(2)将w2和w3中的数据用于程序训练,同样记录收敛所需的迭代次
程序说明
"""批感知器算法"""
import matplotlib.pyplot as plt
import numpy as np
import math
data = np.loadtxt('data.txt')
trn_data1 = data[0:20, 0:2] # 问题一(1)
trn_lable1 = data[0:20, 2]
#trn_data1 = data[10:30, 0:2] # 问题一(1)
#trn_lable1 = data[10:30, 2]
plt.scatter(trn_data1[0:10, 0], trn_data1[0:10, 1], color='blue', marker='o', label=''r'$\omega_1$')
plt.scatter(trn_data1[10:20, 0], trn_data1[10:20, 1], color='red', marker='x', label=''r'$\omega_2$')
plt.xlabel(''r'$x_1$')
plt.ylabel(''r'$x_2$')
plt.legend(loc='upper left')
plt.title('Original Data')
plt.show()
X = np.hstack((np.ones((trn_data1.shape[0], 1)), trn_data1))
X1 = X[0:10, :]
X2 = -1 * X[10:20, :]
X = np.vstack((X1, X2)) # 规范化增广样本
w = np.zeros((3, 1), dtype='float32')
step = 0
for i in range(100):
if i == 0:
y_pred = np.where(np.dot(X, w) == 0)[0] # 统计分类错误的点数
else:
y_pred = np.where(np.dot(X, w) < 0)[0]
step += 1
print('第%2d次更新,分类错误的点个数:%2d' % (step, len(y_pred)))
if len(y_pred) > 0:
w += (np.sum(X[y_pred, :], axis=0)).reshape((3, 1))
else:
break
print('解向量为:', w)
x1 = np.array([-5, 8])
x2 = -1 * (w[1]*x1 + w[0])/w[2]
plt.scatter(trn_data1[0:10, 0], trn_data1[0:10, 1], color='blue', marker='o', label=''r'$\omega_1$')
plt.scatter(trn_data1[10:20, 0], trn_data1[10:20, 1], color='red', marker='x', label=''r'$\omega_2$')
plt.plot([x1[0], x1[1]], [x2[0], x2[1]], 'black')
plt.xlabel(''r'$x_1$')
plt.ylabel(''r'$x_2$')
plt.legend(loc='upper left')
plt.title('classified Data')
plt.show()
data.txt文件
0.1 1.1 1 6.8 7.1 1 -3.5 -4.1 1 2.0 2.7 1 4.1 2.8 1 3.1 5.0 1 -0.8 -1.3 1 0.9 1.2 1 5.0 6.4 1 3.9 4.0 1 -3.0 -2.9 3 0.5 8.7 3 2.9 2.1 3 -0.1 5.2 3 -4.0 2.2 3 -1.3 3.7 3 -3.4 6.2 3 -4.1 3.4 3 -5.1 1.6 3 1.9 5.1 3 -2.0 -8.4 4 -8.9 0.2 4 -4.2 -7.7 4 -8.5 -3.2 4 -6.7 -4.0 4 -0.5 -9.2 4 -5.3 -6.7 4 -8.7 -6.4 4 -7.1 -9.7 4 -8.0 -6.3 4 7.1 4.2 2 -1.4 -4.3 2 4.5 0.0 2 6.3 1.6 2 4.2 1.9 2 1.4 -3.2 2 2.4 -4.0 2 2.5 -6.1 2 8.4 3.7 2 4.1 -2.2 2 -3.0 -2.9 3 0.5 8.7 3 2.9 2.1 3 -0.1 5.2 3 -4.0 2.2 3 -1.3 3.7 3 -3.4 6.2 3 -4.1 3.4 3 -5.1 1.6 3 1.9 5.1 3 -2.0 -8.4 4 -8.9 0.2 4 -4.2 -7.7 4 -8.5 -3.2 4 -6.7 -4.0 4 -0.5 -9.2 4 -5.3 -6.7 4 -8.7 -6.4 4 -7.1 -9.7 4 -8.0 -6.3 4
结果图像