逻辑回归不使用python库的代码
时间: 2024-04-21 22:05:44 浏览: 102
逻辑回归python代码
逻辑回归不使用Python库的代码可以使用纯Python实现。下面是一个简单的实现样例:
```python
import numpy as np
class LogisticRegression:
def __init__(self, lr=0.01, num_iter=100000, fit_intercept=True, verbose=False):
self.lr = lr
self.num_iter = num_iter
self.fit_intercept = fit_intercept
self.verbose = verbose
def __add_intercept(self, X):
intercept = np.ones((X.shape[0], 1))
return np.concatenate((intercept, X), axis=1)
def __sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def __loss(self, h, y):
return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()
def fit(self, X, y):
if self.fit_intercept:
X = self.__add_intercept(X)
self.theta = np.zeros(X.shape[1])
for i in range(self.num_iter):
z = np.dot(X, self.theta)
h = self.__sigmoid(z)
gradient = np.dot(X.T, (h - y)) / y.size
self.theta -= self.lr * gradient
if self.verbose and i % 10000 == 0:
z = np.dot(X, self.theta)
h = self.__sigmoid(z)
print(f'Loss: {self.__loss(h, y)} \t')
def predict_prob(self, X):
if self.fit_intercept:
X = self.__add_intercept(X)
return self.__sigmoid(np.dot(X, self.theta))
def predict(self, X, threshold=0.5):
return self.predict_prob(X) >= threshold
```
该代码实现了一个简单的逻辑回归类LogisticRegression,其中:
- `__add_intercept`方法负责给输入的样本点增加一列都为1的截距项,以方便计算;
- `__sigmoid`方法为sigmoid函数,用于给输入的数据点映射到(0,1)之间;
- `__loss`方法为损失函数,用于衡量模型预测误差;
- `fit`方法为模型训练函数,使用梯度下降算法更新模型参数;
- `predict_prob`方法为模型预测函数,返回概率值;
- `predict`方法为模型预测函数,返回二分类结果(一般来说以平均0.5为阈值划分)。
使用该代码可以很方便地构建并训练一个逻辑回归模型,但比起使用Python库代码会更加费时,并且可能会因为算法效率等问题存在一定的精度与速度限制。
阅读全文