python写一段关于鸢尾花的代码,要求绘制散点图,sigmoid函数,损失函数绘制决策边界
时间: 2024-05-10 19:20:59 浏览: 90
5.0BP神经网络(含代码).rar_Python 鸢尾花_python 神经网络_python鸢尾花_神经网络 python_
5星 · 资源好评率100%
以下是一段Python代码,用于绘制鸢尾花数据集的散点图,并使用sigmoid函数和损失函数绘制决策边界:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
# 加载数据集
iris = load_iris()
X = iris.data[:, (2, 3)] # 萼片长度和宽度
y = (iris.target == 0).astype(np.int) # 目标变量为是否为山鸢尾花
# 绘制散点图
plt.scatter(X[:, 0][y==0], X[:, 1][y==0], c='r', marker='o', label='Not Iris Setosa')
plt.scatter(X[:, 0][y==1], X[:, 1][y==1], c='b', marker='x', label='Iris Setosa')
plt.xlabel('Petal Length')
plt.ylabel('Petal Width')
plt.legend()
# sigmoid函数
def sigmoid(z):
return 1 / (1 + np.exp(-z))
# 损失函数
def loss(y_true, y_pred):
return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
# 初始化参数
theta = np.random.randn(2, 1)
# 训练模型
epochs = 1000
lr = 0.01
for epoch in range(epochs):
z = X.dot(theta)
y_pred = sigmoid(z)
gradient = X.T.dot(y_pred - y) / len(y)
theta -= lr * gradient
if epoch % 100 == 0:
print(f'Epoch {epoch}, Loss {loss(y, y_pred)}')
# 绘制决策边界
x1 = np.linspace(0, 7, 100)
x2 = -(theta[0] + theta[1] * x1) / theta[1]
plt.plot(x1, x2, 'g-', label='Decision Boundary')
plt.legend()
plt.show()
```
该代码首先加载鸢尾花数据集,并绘制出散点图,其中红色点表示非山鸢尾花,蓝色点表示山鸢尾花。
接着,代码定义了sigmoid函数和损失函数,用于训练模型和绘制决策边界。
模型训练使用了梯度下降算法,通过不断调整模型参数theta来最小化损失函数。训练过程中,代码每100个epoch打印一次损失函数值。
最后,代码使用训练得到的模型参数theta绘制决策边界。决策边界是一个直线,它将萼片长度和宽度空间分成两个区域,分别对应山鸢尾花和非山鸢尾花。
阅读全文