实现logistic
时间: 2023-11-22 07:53:14 浏览: 234
logistic回归的实现
Logistic回归是一种广泛使用的分类算法,可以用于二元分类或多元分类问题。下面是一个简单的实现示例:
首先,我们需要定义一个sigmoid函数,它将任何实数映射到0和1之间的值。sigmoid函数的数学表达式如下:
$sigmoid(z)=\frac{1}{1+e^{-z}}$
其中,z表示输入的实数。
接下来,我们可以定义一个损失函数,它可以度量模型预测与实际结果之间的差异。对于二元分类问题,常用的损失函数是交叉熵损失函数。其数学表达式如下:
$J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}log(h_{\theta}(x^{(i)}))+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]$
其中,$h_{\theta}(x)$表示我们的模型预测,$\theta$表示模型参数,$m$表示样本数量,$x^{(i)}$和$y^{(i)}$分别表示第$i$个样本的特征和标签。
最后,我们可以使用梯度下降算法来最小化损失函数,从而得到最优的模型参数。梯度下降算法的数学表达式如下:
$\theta_j:=\theta_j-\alpha\frac{\partial J(\theta)}{\partial\theta_j}$
其中,$\alpha$表示学习率,$\frac{\partial J(\theta)}{\partial\theta_j}$表示损失函数对参数$\theta_j$的偏导数。
下面是一个基于Python的简单实现示例:
```python
import numpy as np
class LogisticRegression:
def __init__(self, learning_rate=0.01, num_iterations=10000):
self.learning_rate = learning_rate
self.num_iterations = num_iterations
self.weights = None
self.bias = None
def sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def fit(self, X, y):
m, n = X.shape
self.weights = np.zeros(n)
self.bias = 0
for i in range(self.num_iterations):
# Forward propagation
z = np.dot(X, self.weights) + self.bias
a = self.sigmoid(z)
# Compute cost
cost = -1 / m * np.sum(y * np.log(a) + (1 - y) * np.log(1 - a))
# Backward propagation
dz = a - y
dw = 1 / m * np.dot(X.T, dz)
db = 1 / m * np.sum(dz)
# Update parameters
self.weights -= self.learning_rate * dw
self.bias -= self.learning_rate * db
def predict(self, X):
z = np.dot(X, self.weights) + self.bias
a = self.sigmoid(z)
y_pred = np.round(a)
return y_pred
```
在上述代码中,我们首先定义了一个LogisticRegression类,其中包含了sigmoid函数、损失函数和梯度下降算法。fit方法用于训练模型,predict方法用于预测新数据的标签。
下面是一个使用示例:
```python
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Load data
data = load_breast_cancer()
X = data.data
y = data.target
# Split data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Train model
model = LogisticRegression()
model.fit(X_train, y_train)
# Predict test data
y_pred = model.predict(X_test)
# Compute accuracy
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
```
在上述代码中,我们首先加载了一个用于二元分类的乳腺癌数据集,并将其拆分为训练集和测试集。然后,我们实例化了一个LogisticRegression对象,并使用训练集对其进行训练。最后,我们使用测试集进行预测,并计算了模型的准确率。
阅读全文