生成两组线性均匀分布的数据(完全线性可分)。 生成两组线性均匀分布的数据(线性不可分)。 生成两组高斯分布的数据(完全线性可分)。 生成两组高斯分布的数据(线性不可分),使用 神经网络-感知器进行二分类,并分别画出对应的分类界面
时间: 2024-02-12 20:06:07 浏览: 19
好的,我明白了。以下是对应的数据生成方法和神经网络分类界面绘制方法:
1. 生成两组线性均匀分布的数据(完全线性可分):
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成两组线性均匀分布的数据,完全线性可分
mean1 = [2, 2]
mean2 = [-2, -2]
cov = [[1, 0], [0, 1]]
data1 = np.random.multivariate_normal(mean1, cov, 100)
data2 = np.random.multivariate_normal(mean2, cov, 100)
# 绘制数据分布图
plt.scatter(data1[:, 0], data1[:, 1], c='b')
plt.scatter(data2[:, 0], data2[:, 1], c='r')
plt.show()
```
2. 生成两组线性均匀分布的数据(线性不可分):
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成两组线性均匀分布的数据,线性不可分
mean1 = [0, 0]
mean2 = [0, 0]
cov1 = [[1, 0], [0, 1]]
cov2 = [[2, 0], [0, 2]]
data1 = np.random.multivariate_normal(mean1, cov1, 100)
data2 = np.random.multivariate_normal(mean2, cov2, 100)
# 绘制数据分布图
plt.scatter(data1[:, 0], data1[:, 1], c='b')
plt.scatter(data2[:, 0], data2[:, 1], c='r')
plt.show()
```
3. 生成两组高斯分布的数据(完全线性可分):
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成两组高斯分布的数据,完全线性可分
mean1 = [2, 2]
mean2 = [-2, -2]
cov = [[1, 0], [0, 1]]
data1 = np.random.multivariate_normal(mean1, cov, 100)
data2 = np.random.multivariate_normal(mean2, cov, 100)
# 绘制数据分布图
plt.scatter(data1[:, 0], data1[:, 1], c='b')
plt.scatter(data2[:, 0], data2[:, 1], c='r')
plt.show()
```
4. 生成两组高斯分布的数据(线性不可分):
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成两组高斯分布的数据,线性不可分
mean1 = [0, 0]
mean2 = [0, 0]
cov1 = [[1, 0], [0, 1]]
cov2 = [[2, 1], [1, 2]]
data1 = np.random.multivariate_normal(mean1, cov1, 100)
data2 = np.random.multivariate_normal(mean2, cov2, 100)
# 绘制数据分布图
plt.scatter(data1[:, 0], data1[:, 1], c='b')
plt.scatter(data2[:, 0], data2[:, 1], c='r')
plt.show()
```
5. 使用神经网络-感知器进行二分类,并分别画出对应的分类界面:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义神经网络类
class Perceptron:
def __init__(self, input_size, lr=1, epochs=100):
self.W = np.zeros(input_size+1)
self.epochs = epochs
self.lr = lr
def activation_fn(self, x):
return 1 if x >= 0 else 0
def predict(self, x):
x = np.insert(x, 0, 1)
z = self.W.T.dot(x)
a = self.activation_fn(z)
return a
def fit(self, X, d):
for _ in range(self.epochs):
for i in range(d.shape[0]):
x = X[i]
y = self.predict(x)
e = d[i] - y
self.W = self.W + self.lr * e * np.insert(x, 0, 1)
def plot_boundary(self, X):
x1 = np.linspace(np.min(X[:, 0]), np.max(X[:, 0]), 100)
x2 = -(self.W[0] + self.W[1] * x1) / self.W[2]
plt.plot(x1, x2, 'k')
# 生成两组线性均匀分布的数据,完全线性可分
mean1 = [2, 2]
mean2 = [-2, -2]
cov = [[1, 0], [0, 1]]
data1 = np.random.multivariate_normal(mean1, cov, 100)
data2 = np.random.multivariate_normal(mean2, cov, 100)
# 将数据合并,并添加标签
X = np.vstack((data1, data2))
d = np.hstack((np.ones(100), np.zeros(100)))
# 创建感知器模型并训练
model = Perceptron(input_size=2)
model.fit(X, d)
# 绘制数据分布图和分类界面
plt.scatter(data1[:, 0], data1[:, 1], c='b')
plt.scatter(data2[:, 0], data2[:, 1], c='r')
model.plot_boundary(X)
plt.show()
```
```python
# 生成两组线性均匀分布的数据,线性不可分
mean1 = [0, 0]
mean2 = [0, 0]
cov1 = [[1, 0], [0, 1]]
cov2 = [[2, 0], [0, 2]]
data1 = np.random.multivariate_normal(mean1, cov1, 100)
data2 = np.random.multivariate_normal(mean2, cov2, 100)
# 将数据合并,并添加标签
X = np.vstack((data1, data2))
d = np.hstack((np.ones(100), np.zeros(100)))
# 创建感知器模型并训练
model = Perceptron(input_size=2)
model.fit(X, d)
# 绘制数据分布图和分类界面
plt.scatter(data1[:, 0], data1[:, 1], c='b')
plt.scatter(data2[:, 0], data2[:, 1], c='r')
model.plot_boundary(X)
plt.show()
```
```python
# 生成两组高斯分布的数据,完全线性可分
mean1 = [2, 2]
mean2 = [-2, -2]
cov = [[1, 0], [0, 1]]
data1 = np.random.multivariate_normal(mean1, cov, 100)
data2 = np.random.multivariate_normal(mean2, cov, 100)
# 将数据合并,并添加标签
X = np.vstack((data1, data2))
d = np.hstack((np.ones(100), np.zeros(100)))
# 创建感知器模型并训练
model = Perceptron(input_size=2)
model.fit(X, d)
# 绘制数据分布图和分类界面
plt.scatter(data1[:, 0], data1[:, 1], c='b')
plt.scatter(data2[:, 0], data2[:, 1], c='r')
model.plot_boundary(X)
plt.show()
```
```python
# 生成两组高斯分布的数据,线性不可分
mean1 = [0, 0]
mean2 = [0, 0]
cov1 = [[1, 0], [0, 1]]
cov2 = [[2, 1], [1, 2]]
data1 = np.random.multivariate_normal(mean1, cov1, 100)
data2 = np.random.multivariate_normal(mean2, cov2, 100)
# 将数据合并,并添加标签
X = np.vstack((data1, data2))
d = np.hstack((np.ones(100), np.zeros(100)))
# 创建感知器模型并训练
model = Perceptron(input_size=2)
model.fit(X, d)
# 绘制数据分布图和分类界面
plt.scatter(data1[:, 0], data1[:, 1], c='b')
plt.scatter(data2[:, 0], data2[:, 1], c='r')
model.plot_boundary(X)
plt.show()
```
以上代码中,我们定义了一个感知器类,包含激活函数、预测函数、训练函数和分类界面绘制函数。在生成数据后,我们将数据合并,并添加标签,然后使用感知器模型进行训练和预测,并绘制数据分布图和分类界面。在完全线性可分的情况下,分类界面为一条直线;在线性不可分的情况下,分类界面无法绘制出来。