简介
最近在学习机器学习的基础算法,发现逻辑回归是个特别适合新手入门的模型。虽然名字里有'回归'二字,但它其实是用来解决分类问题的。
核心原理
逻辑回归的核心思想其实很简单:它通过一个 S 型函数(sigmoid 函数)把线性回归的结果映射到 0 到 1 之间,这样就可以表示概率了。比如预测明天是否下雨,0.7 的概率表示有 70% 的可能性会下雨。这个算法特别适合二分类问题,比如判断邮件是垃圾邮件还是正常邮件。
实现步骤
- 准备数据:这里用经典的鸢尾花数据集,但为了简化问题,只取其中两个类别(Setosa 和 Versicolor)和两个特征(花萼长度和宽度)。这样数据简单直观,方便理解。
- 数据预处理:我们需要把类别标签转换成 0 和 1,并对特征进行标准化处理。标准化就是把数据按比例缩放,让不同特征的值在相近的范围内,这样模型训练会更稳定。
- 定义 Sigmoid 函数:这个函数的神奇之处在于,它能把任何实数映射到 (0,1) 区间,正好可以用来表示概率。当输入值很大时输出接近 1,很小时接近 0,中间部分平滑过渡。
- 实现损失函数:逻辑回归用的是交叉熵损失,它能很好地衡量预测概率和真实标签之间的差异。我们的目标就是找到一组参数,让这个损失值最小。
- 优化参数:使用梯度下降法优化参数。这个方法通过不断调整参数来减小损失值,就像下山一样一步步找到最低点。学习率这个参数很重要,太大容易错过最优解,太小又收敛太慢。
- 预测与可视化:训练完成后就可以做预测了。对于新数据,模型会输出一个 0 到 1 之间的概率值,我们通常设定一个阈值(比如 0.5),大于这个值就预测为正类,否则为负类。最后我们可以可视化决策边界,在二维特征空间里画出一条线,直观展示模型是如何区分两类数据的。
代码示例
以下是一个基于 Python 和 Scikit-learn 的简单实现:
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 1. 加载数据并筛选二分类
iris = load_iris()
X = iris.data[:, :2] # 取前两个特征
y = (iris.target == 0).astype(int) # 将 Setosa 设为 1,其他为 0
# 2. 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 3. 特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 4. 训练模型
model = LogisticRegression()
model.fit(X_train_scaled, y_train)
# 5. 预测与评估
y_pred = model.predict(X_test_scaled)
()

