生成两组线性均匀分布的数据(完全线性可分)。 生成两组线性均匀分布的数据(线性不可分)。 生成两组高斯分布的数据(完全线性可分)。 生成两组高斯分布的数据(线性不可分)。 使用 神经网络-感知器进行二分类,并画出每个分类界面。
时间: 2024-02-09 13:12:57 浏览: 23
好的,我会按照您的要求回答问题。
首先,生成两组线性均匀分布的数据(完全线性可分)可以使用如下代码:
```python
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
N = 100
x_1 = np.random.uniform(low=-1, high=1, size=(N, 2))
y_1 = np.ones(N)
x_2 = np.random.uniform(low=-1, high=1, size=(N, 2))
y_2 = np.zeros(N)
plt.scatter(x_1[:,0], x_1[:,1], label='Class 1')
plt.scatter(x_2[:,0], x_2[:,1], label='Class 2')
plt.legend()
plt.show()
```
这段代码会生成两组各包含100个样本点的二维数据,范围在-1到1之间,其中一组标签为1,另一组标签为0,两组数据完全线性可分。
接着,生成两组线性均匀分布的数据(线性不可分)可以使用如下代码:
```python
np.random.seed(1)
x_1 = np.random.uniform(low=-1, high=1, size=(N, 2))
y_1 = np.zeros(N)
x_2 = np.random.uniform(low=-1, high=1, size=(N, 2))
y_2 = np.zeros(N)
for i in range(N):
if x_1[i,0] > x_1[i,1]:
y_1[i] = 1
else:
y_1[i] = -1
for i in range(N):
if x_2[i,0] < x_2[i,1]:
y_2[i] = 1
else:
y_2[i] = -1
plt.scatter(x_1[:,0], x_1[:,1], c=y_1, cmap='bwr')
plt.scatter(x_2[:,0], x_2[:,1], c=y_2, cmap='bwr')
plt.colorbar()
plt.show()
```
这段代码会生成两组各包含100个样本点的二维数据,范围在-1到1之间,其中一组标签为1或-1,另一组标签为1或-1,两组数据线性不可分。
接下来,生成两组高斯分布的数据(完全线性可分)可以使用如下代码:
```python
np.random.seed(2)
N = 100
x_1 = np.random.normal(loc=[-2,-2], scale=[0.5,0.5], size=(N,2))
y_1 = np.ones(N)
x_2 = np.random.normal(loc=[2,2], scale=[0.5,0.5], size=(N,2))
y_2 = np.zeros(N)
plt.scatter(x_1[:,0], x_1[:,1], label='Class 1')
plt.scatter(x_2[:,0], x_2[:,1], label='Class 2')
plt.legend()
plt.show()
```
这段代码会生成两组各包含100个样本点的二维高斯分布数据,其中一组标签为1,另一组标签为0,两组数据完全线性可分。
最后,生成两组高斯分布的数据(线性不可分)可以使用如下代码:
```python
np.random.seed(3)
x_1 = np.random.normal(loc=[-2,-2], scale=[0.5,0.5], size=(N,2))
y_1 = np.zeros(N)
x_2 = np.random.normal(loc=[2,2], scale=[0.5,0.5], size=(N,2))
y_2 = np.zeros(N)
for i in range(N):
if x_1[i,0] > x_1[i,1]:
y_1[i] = 1
else:
y_1[i] = -1
for i in range(N):
if x_2[i,0] < x_2[i,1]:
y_2[i] = 1
else:
y_2[i] = -1
plt.scatter(x_1[:,0], x_1[:,1], c=y_1, cmap='bwr')
plt.scatter(x_2[:,0], x_2[:,1], c=y_2, cmap='bwr')
plt.colorbar()
plt.show()
```
这段代码会生成两组各包含100个样本点的二维高斯分布数据,其中一组标签为1或-1,另一组标签为1或-1,两组数据线性不可分。
对于使用神经网络-感知器进行二分类,并画出每个分类界面,可以使用如下代码:
```python
from sklearn.linear_model import Perceptron
x = np.concatenate([x_1, x_2], axis=0)
y = np.concatenate([y_1, y_2], axis=0)
clf = Perceptron(max_iter=1000, tol=1e-3)
clf.fit(x, y)
xx, yy = np.meshgrid(np.linspace(-3, 3, 500), np.linspace(-3, 3, 500))
grid = np.c_[xx.ravel(), yy.ravel()]
Z = clf.predict(grid)
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap='bwr', alpha=0.5)
plt.scatter(x_1[:,0], x_1[:,1], label='Class 1')
plt.scatter(x_2[:,0], x_2[:,1], label='Class 2')
plt.legend()
plt.show()
```
这段代码会先将四组数据合并成两个数组x和y,然后使用感知器模型进行训练和预测,并画出分类界面。其中,红色表示第一类,蓝色表示第二类。