博文配套视频课程:24小时实现从零到AI人工智能
随机生成一条直线
如果函数中只有一行代码,可以采用lambda表达式来实现
import numpy as np
import matplotlib.pyplot as plt
# 生成一条随机的直线
x = np.linspace(0, 1, 2)
print(x)
# 生成直线的方程: y = w * x + b
w = np.random.rand()
b = np.random.rand()
print(f'w={w},b={b}')
fn = lambda x: w * x + b
# 通过可视化来创建直线
plt.plot(x, fn(x), 'r')
plt.show()
直线效果图如下
通过直线对样本进行分类
默认约定样本在直线以下的对应的yn设置为-1,样本点在直线以上的对应的yn设置为1,下一章节会通过感知器来对样本点进行预测分类
N = 100
xn = np.random.rand(N, 2)
# 存储每个样本的类别 [1,-1]
yn = np.zeros([N, 1])
# 通过之前的直线把样本分成两类
for i in range(N):
if (fn(xn[i, 0]) >= xn[i, 1]):
# 当前的x[i]的点在直线的下方
yn[i] = -1
plt.plot(xn[i,0],xn[i,1],'rx',markersize=8)
else:
yn[i] = 1
plt.plot(xn[i, 0], xn[i, 1], 'go', markersize=8)
plt.show()
样本点的分类操作
完整代码如下
import numpy as np
import matplotlib.pyplot as plt
# 生成一条随机的直线
x = np.linspace(0, 1, 2)
print(x)
# 生成直线的方程: y = w * x + b
w = np.random.rand()
b = np.random.rand()
print(f'w={w},b={b}')
fn = lambda x: w * x + b
# 通过可视化来创建直线
plt.plot(x, fn(x), 'r')
# 通过直线把生成的100个点分成两个类别
N = 100
xn = np.random.rand(N, 2)
# 存储每个样本的类别 [1,-1]
yn = np.zeros([N, 1])
# 通过之前的直线把样本分成两类
for i in range(N):
if (fn(xn[i, 0]) >= xn[i, 1]):
# 当前的x[i]的点在直线的下方
yn[i] = -1
plt.plot(xn[i,0],xn[i,1],'rx',markersize=8)
else:
yn[i] = 1
plt.plot(xn[i, 0], xn[i, 1], 'go', markersize=8)
plt.show()