、题目四:使用 numpy 编写逻辑回归算法,对 iris 数据进行二分类。 具体内容: (1)任选两个特征和两个类别进行二分类。 (2)输出:决策函数的参数、预测值、分类准确率等。 (3)可视化:选取两个特征进行散点图可视化,并可视化决策边界。用pycharm写用IPython解释器
时间: 2024-02-22 16:56:08 浏览: 60
以下是使用numpy编写逻辑回归算法对iris数据进行二分类的代码,包括决策函数的参数、预测值、分类准确率等:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
# 选取两个特征和两个类别进行二分类
X = X[(y == 0) | (y == 1), :2]
y = y[(y == 0) | (y == 1)]
# 添加一列全为1的偏置项
X = np.hstack([np.ones((X.shape[0], 1)), X])
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义损失函数
def loss(theta, X, y):
h = sigmoid(X @ theta)
J = -np.mean(y * np.log(h) + (1 - y) * np.log(1 - h))
return J
# 定义梯度下降函数
def gradient_descent(theta, X, y, alpha, n_iters):
m = len(X)
J_history = []
for i in range(n_iters):
h = sigmoid(X @ theta)
theta = theta - alpha * (1 / m) * (X.T @ (h - y))
J_history.append(loss(theta, X, y))
return theta, J_history
# 初始化参数并进行梯度下降
theta = np.zeros(3)
alpha = 0.1
n_iters = 1000
theta, J_history = gradient_descent(theta, X_train, y_train, alpha, n_iters)
# 输出决策函数的参数和预测值
print('决策函数的参数:', theta)
y_pred = np.round(sigmoid(X_test @ theta))
print('预测值:', y_pred)
# 计算分类准确率
accuracy = np.mean(y_pred == y_test)
print('分类准确率:', accuracy)
# 可视化散点图和决策边界
plt.scatter(X_train[y_train == 0][:, 1], X_train[y_train == 0][:, 2], color='red')
plt.scatter(X_train[y_train == 1][:, 1], X_train[y_train == 1][:, 2], color='blue')
plt.xlabel('sepal length (cm)')
plt.ylabel('sepal width (cm)')
x1_min, x1_max = X_train[:, 1].min(), X_train[:, 1].max()
x2_min, x2_max = X_train[:, 2].min(), X_train[:, 2].max()
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))
h = sigmoid(np.c_[np.ones((xx1.ravel().shape[0], 1)), xx1.ravel(), xx2.ravel()] @ theta)
h = h.reshape(xx1.shape)
plt.contour(xx1, xx2, h, [0.5], colors='black')
plt.show()
```
在上述代码中,我们选取了第一列和第二列特征,以及类别0和1进行二分类。我们首先对数据进行预处理,添加一个全为1的偏置项,并将数据集划分为训练集和测试集。然后我们定义了sigmoid函数和损失函数,并使用梯度下降法来优化损失函数,得到决策函数的参数。使用决策函数和测试集数据来进行预测,并计算分类准确率。最后,我们使用散点图进行数据可视化,并绘制决策边界。
阅读全文