import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
Num = 100
x_1 = np.random.normal(6,1,size=(Num))
x_2 = np.random.normal(3,1,size=(Num))
y = np.ones(Num)*-1
c_0 = np.array([x_1,x_2,y]) # -1分类
x_1 = np.random.normal(3,1,size=(Num))
x_2 = np.random.normal(6,1,size=(Num))
y = np.ones(Num)
c_1 = np.array([x_1,x_2,y]) # 1分类
c_0 = c_0.T
c_1 = c_1.T
plt.scatter(c_1[:,0],c_1[:,1])
plt.scatter(c_0[:,0],c_0[:,1],marker='+')
<matplotlib.collections.PathCollection at 0x24b24683988>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7G4pY4f-1588587740917)(output_5_1.png)]
# 建立数据集,分训练集和测试集
All_data = np.concatenate((c_1,c_0))
print(All_data.shape)
np.random.shuffle(All_data)
train_data_X = All_data[:150,:2] # [)
train_data_y = All_data[:150,-1].reshape(150,1)
test_data_X = All_data[150:,:2]
test_data_y = All_data[150:,-1].reshape(50,1)
print(train_data_X.shape,train_data_y.shape,test_data_X.shape,test_data_y.shape)
(200, 3)
(150, 2) (150, 1) (50, 2) (50, 1)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QXJiyX2O-1588587740921)(attachment:7e9b90ac-01e7-4694-a16b-9a7094372ac5.png)]
W = np.zeros((2,1))
T = 100#最大迭代次数
k = 0
train_data = np.concatenate((train_data_X,train_data_y),axis=1)
train_data.shape
#train_data[0][-1]
(150, 3)
# 训练模型
for t in range(T):
np.random.shuffle(train_data)
for i in range(len(train_data)):
# 选择第i个样本
pred = np.dot(W.T,(train_data[i][-1]*train_data[i][:2]).reshape(2,1))[0,0]
if pred <= 0:
W = W + (train_data[i][-1]*train_data[i][:2]).reshape(2,1)
W
array([[-43.38640304],
[ 47.145247 ]])
plt.scatter(c_1[:,0],c_1[:,1])
plt.scatter(c_0[:,0],c_0[:,1],marker='+')
x = np.arange(10)
y = -(W[0]*x)/W[1]
plt.plot(x,y)
[<matplotlib.lines.Line2D at 0x24b2474c208>]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rNxykPGB-1588587740925)(output_11_1.png)]