二元逻辑回归手写实现和调库实现包含准确率
时间: 2023-07-11 14:47:03 浏览: 86
好的,我来回答你的问题。
对于二元逻辑回归的手写实现,我们需要先定义损失函数和优化方法,然后使用梯度下降算法来更新模型参数。具体步骤如下:
1. 定义sigmoid函数,用于将预测值转化为概率值。
```python
def sigmoid(x):
return 1 / (1 + np.exp(-x))
```
2. 定义损失函数,使用交叉熵损失函数。
```python
def cross_entropy_loss(y_pred, y_true):
n_samples = len(y_true)
loss = -1/n_samples * (np.dot(y_true, np.log(y_pred)) + np.dot((1-y_true), np.log(1-y_pred)))
return loss
```
3. 定义优化方法,使用梯度下降算法。
```python
def gradient_descent(X, y_true, y_pred, learning_rate):
n_samples, n_features = X.shape
dw = 1/n_samples * np.dot(X.T, (y_pred - y_true))
db = 1/n_samples * np.sum(y_pred - y_true)
w = w - learning_rate * dw
b = b - learning_rate * db
return w, b
```
4. 定义模型训练函数,迭代更新模型参数。
```python
def train(X, y_true, n_iters, learning_rate):
n_samples, n_features = X.shape
w = np.zeros(n_features)
b = 0
for i in range(n_iters):
y_pred = sigmoid(np.dot(X, w) + b)
loss = cross_entropy_loss(y_pred, y_true)
if i % 100 == 0:
print(f'Iter: {i}, Loss: {loss}')
w, b = gradient_descent(X, y_true, y_pred, learning_rate)
return w, b
```
5. 使用训练好的模型进行预测,并计算准确率。
```python
def predict(X, w, b):
y_pred = sigmoid(np.dot(X, w) + b)
y_pred_cls = [1 if i > 0.5 else 0 for i in y_pred]
return y_pred_cls
def accuracy(y_pred, y_true):
accuracy = np.sum(y_pred == y_true) / len(y_true)
return accuracy
```
对于使用库函数实现的二元逻辑回归,我们可以使用sklearn库中的LogisticRegression模型。具体步骤如下:
1. 导入模型库,调用LogisticRegression类。
```python
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
```
2. 使用fit函数对模型进行训练。
```python
model.fit(X_train, y_train)
```
3. 使用predict函数对模型进行预测,并计算准确率。
```python
y_pred = model.predict(X_test)
accuracy = model.score(X_test, y_test)
```
这样,我们就可以通过手写实现和调用库函数来实现二元逻辑回归,并计算准确率。
阅读全文