用Python实现Logistic模型,并绘图
时间: 2024-05-06 10:17:54 浏览: 15
好的,以下是用Python实现Logistic模型并绘图的代码:
```
import numpy as np
import matplotlib.pyplot as plt
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义损失函数
def loss(h, y):
return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()
# 定义训练函数
def train(X, y, lr, epochs):
# 初始化参数
theta = np.zeros(X.shape[1])
# 记录损失值
losses = []
for i in range(epochs):
# 计算预测值
z = np.dot(X, theta)
h = sigmoid(z)
# 计算梯度
gradient = np.dot(X.T, (h - y)) / y.size
# 更新参数
theta -= lr * gradient
# 记录损失值
losses.append(loss(h, y))
return theta, losses
# 生成数据
np.random.seed(0)
X = np.random.randn(100, 2)
y = np.array([int(x1 + x2 > 0) for x1, x2 in X])
# 绘制数据散点图
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()
# 在X中添加一列1,方便计算theta0
X = np.hstack((np.ones((X.shape[0], 1)), X))
# 训练模型
theta, losses = train(X, y, lr=0.1, epochs=1000)
print('theta:', theta)
# 绘制损失函数值随迭代次数的变化图
plt.plot(losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()
# 绘制决策边界
x1_min, x1_max = X[:, 1].min() - 1, X[:, 1].max() + 1
x2_min, x2_max = X[:, 2].min() - 1, X[:, 2].max() + 1
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max, 100), np.linspace(x2_min, x2_max, 100))
Z = sigmoid(np.c_[np.ones((xx1.ravel().shape[0], 1)), xx1.ravel(), xx2.ravel()].dot(theta))
Z = Z.reshape(xx1.shape)
plt.contourf(xx1, xx2, Z, alpha=0.4)
plt.scatter(X[:, 1], X[:, 2], c=y, alpha=0.8)
plt.show()
```
这段代码首先生成了一个二维的随机数据集,然后使用Logistic模型进行训练,并绘制了数据散点图、损失函数值随迭代次数的变化图和决策边界图。其中,sigmoid函数用于将预测值映射到[0,1]之间,损失函数使用交叉熵损失函数,训练函数使用批量梯度下降法更新参数,lr为学习率,epochs为迭代次数。训练完成后,通过计算得到的参数theta可以绘制决策边界。
相关推荐
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)