用python写一个逻辑回归
时间: 2023-05-24 20:01:09 浏览: 105
pytho手写机器学习-logistics regression,使用iris dataset实现二分类,附带英文report
的代码。
下面是Python语言实现的逻辑回归的代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义sigmoid函数
def sigmoid(z):
return 1 / (1 + np.exp(-z))
# 定义代价函数
def costFunction(theta, X, y):
m = X.shape[0] # 样本数
J = (-1 / m) * np.sum(y * np.log(sigmoid(X @ theta)) + (1 - y) * np.log(1 - sigmoid(X @ theta)))
grad = (1 / m) * (X.T @ (sigmoid(X @ theta) - y))
return J, grad
# 定义梯度下降函数
def gradientDescent(X, y, theta, alpha, num_iters):
m = X.shape[0] # 样本数
J_history = [] # 记录每次迭代的损失函数值
for i in range(num_iters):
J, grad = costFunction(theta, X, y)
theta -= alpha * grad # 参数更新
J_history.append(J)
return theta, J_history
# 加载数据
data = np.loadtxt('data.txt', delimiter=',')
X = data[:, :-1]
y = data[:, -1]
# 特征归一化
X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)
# 添加一列全为1的特征
X = np.hstack((np.ones((X.shape[0], 1)), X))
# 初始化参数
theta = np.zeros(X.shape[1])
# 设定学习率和迭代次数
alpha = 0.01
num_iters = 10000
# 梯度下降求解参数
theta, J_history = gradientDescent(X, y, theta, alpha, num_iters)
# 绘制代价函数值随迭代次数的变化曲线
plt.plot(np.arange(num_iters), J_history)
plt.xlabel('Iteration')
plt.ylabel('Cost')
plt.show()
# 预测
prob = sigmoid(np.array([1, 45, 85]) @ theta)
print('预测概率为:{:.2f}%'.format(prob * 100))
```
这个代码实现了逻辑回归,具体的实现步骤包括定义sigmoid函数、代价函数、梯度下降函数,以及加载数据、特征归一化、添加全为1的特征、初始化参数、设定学习率和迭代次数、调用梯度下降求解参数、绘制代价函数值随迭代次数的变化曲线和预测。
阅读全文