1.Logistic回归概述
我们都知道使用线性模型可以进行回归学习,但若要做的是分类任务改如何处理?只需要找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值联系起来。
考虑二分类任务,其输出标记y的取值为0和1,而线性回归模型产生的预测值是实值,于是需将实值z转换为0/1值。通过Sigmoid函数引入非线性因素,可以实现实值z转换为0/1值,处理二分类问题。
1.1 Sigmoid函数
首先我们介绍一下Sigmoid函数,也称为逻辑函数:
其函数曲线如下:
逻辑回归的假设函数形式如下:
逻辑回归(Logistic Regression)详解
逻辑回归是一种用于解决二分类问题的机器学习算法。它通过拟合一个逻辑函数来预测输入数据属于某个类别的概率。在这篇文章中,我们将详细介绍逻辑回归的原理、优缺点以及如何用Python实现一个简单的逻辑回归模型。
一、逻辑回归原理
逻辑回归的基本原理是通过一个逻辑函数将线性回归的输出映射到[0,1]区间,从而表示某个事件发生的概率。逻辑函数的表达式如下:
$$ p(y=1|x) = \frac{1}{1 + e^{-z}} $$
其中,$z$是输入特征与权重的线性组合,即$z = w^T x + b$。逻辑回归的目标是通过最大化似然函数来求解最优的权重参数$w$和偏置项$b$。
## 二、逻辑回归优缺点
优点:
1. 输出值在[0,1]之间,可以表示为概率;
2. 模型简单,易于理解和实现;
3. 对于非线性可分问题,可以通过引入核函数进行扩展。
缺点:
1. 对异常值敏感;
2. 当特征间存在多重共线性时,模型性能会下降;
3. 不能很好地处理类别不平衡的数据。
三、Python实现逻辑回归
下面我们用Python实现一个简单的逻辑回归模型。首先,我们需要导入一些必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
```
接下来,我们生成一个二分类数据集:
```python
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2, random_state=42, n_clusters_per_class=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
```
然后,我们创建一个逻辑回归模型并拟合训练数据:
```python
lr = LogisticRegression()
lr.fit(X_train, y_train)
```
最后,我们用测试集评估模型的性能:
```python
y_pred = lr.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}".format(accuracy))
```
为了更直观地展示逻辑回归的分类效果,我们可以绘制一个二维平面图:
```python
def plot_decision_regions(X, y, classifier):
h = .02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = classifier.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o', s=50)
plt.xlim(X[:, 0].min() - 0.5, X[:, 0].max() + 0.5)
plt.ylim(X[:, 1].min() - 0.5, X[:, 1].max() + 0.5)
plt.show()
plot_decision_regions(X, y, lr)
```
运行上述代码,你将看到一个类似下图的分类效果图:
至此,我们已经介绍了逻辑回归的基本原理和如何用Python实现一个简单的逻辑回归模型。希望这篇文章对你有所帮助!