人工智能之核心基础 机器学习 第三章 线性回归与逻辑回归

人工智能之核心基础 机器学习

第三章 线性回归与逻辑回归


文章目录

  • [人工智能之核心基础 机器学习](#人工智能之核心基础 机器学习)
    • [3.1 线性回归(Linear Regression)](#3.1 线性回归(Linear Regression))
      • [📌 模型原理:用一条"直线"预测数值](#📌 模型原理:用一条“直线”预测数值)
      • [🔧 假设函数(Hypothesis Function)](#🔧 假设函数(Hypothesis Function))
      • [⚖️ 损失函数:平方损失(Mean Squared Error, MSE)](#⚖️ 损失函数:平方损失(Mean Squared Error, MSE))
      • [🔍 参数求解方法](#🔍 参数求解方法)
        • [方法1:正规方程(Normal Equation)](#方法1:正规方程(Normal Equation))
        • [方法2:梯度下降(Gradient Descent)](#方法2:梯度下降(Gradient Descent))
      • [🧪 Python代码实现(Scikit-learn)](#🧪 Python代码实现(Scikit-learn))
    • [3.2 线性回归的优化与正则化](#3.2 线性回归的优化与正则化)
      • [⚠️ 问题:多重共线性(Multicollinearity)](#⚠️ 问题:多重共线性(Multicollinearity))
      • [🔒 L2正则化:Ridge回归](#🔒 L2正则化:Ridge回归)
      • [🔪 L1正则化:Lasso回归](#🔪 L1正则化:Lasso回归)
      • [🧪 正则化代码对比](#🧪 正则化代码对比)
    • [3.3 逻辑回归(Logistic Regression)](#3.3 逻辑回归(Logistic Regression))
      • [📌 模型原理:把线性回归"掰弯"成概率](#📌 模型原理:把线性回归“掰弯”成概率)
      • [⚖️ 损失函数:交叉熵损失(Cross-Entropy Loss)](#⚖️ 损失函数:交叉熵损失(Cross-Entropy Loss))
      • [🧪 逻辑回归代码(垃圾邮件识别)](#🧪 逻辑回归代码(垃圾邮件识别))
    • [3.4 逻辑回归的扩展:多分类](#3.4 逻辑回归的扩展:多分类)
    • [3.5 实战案例总结](#3.5 实战案例总结)
    • [🎯 本章要点回顾](#🎯 本章要点回顾)
  • 资料关注

3.1 线性回归(Linear Regression)

📌 模型原理:用一条"直线"预测数值

目标 :根据输入特征(如房屋面积、房间数)预测一个连续值(如房价)。

✅ 核心思想 :假设输出和输入之间存在线性关系

例如:房价 ≈ 面积 × 权重 + 房间数 × 权重 + 偏置

🔧 假设函数(Hypothesis Function)

对于有 n n n 个特征的样本,模型形式为:

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_n x_n hθ(x)=θ0+θ1x1+θ2x2+⋯+θnxn

  • x i x_i xi:第 i i i 个特征(如面积)
  • θ i \theta_i θi:对应的权重(模型要学的参数)
  • θ 0 \theta_0 θ0:偏置项(截距)

向量形式更简洁:

h θ ( x ) = θ T x h_\theta(x) = \theta^T x hθ(x)=θTx

💡 通俗理解:就像做菜------每个食材(特征)放多少(权重),最后味道(预测值)就出来了。


⚖️ 损失函数:平方损失(Mean Squared Error, MSE)

我们希望预测值越接近真实值越好。于是定义损失函数衡量误差:

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2

  • m m m:样本数量
  • y ( i ) y^{(i)} y(i):第 i i i 个样本的真实值
  • 平方 → 惩罚大误差;除以 2 m 2m 2m → 方便求导

🎯 目标:找到一组 θ \theta θ,让 J ( θ ) J(\theta) J(θ) 最小


🔍 参数求解方法

方法1:正规方程(Normal Equation)

直接解出最优参数:

θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)−1XTy

✅ 优点:一步到位,无需迭代

❌ 缺点:当特征很多(>10,000)时,矩阵求逆太慢甚至不可行

方法2:梯度下降(Gradient Descent)

像下山一样,一步步调整参数,使损失变小:

θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_j} θj:=θj−α∂θj∂J(θ)

其中:

  • α \alpha α:学习率(步长)
  • 偏导数: ∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)}) x_j^{(i)} ∂θj∂J(θ)=m1∑i=1m(hθ(x(i))−y(i))xj(i)

✅ 优点:适合大规模数据

❌ 缺点:需要调学习率,可能陷入局部最小(但MSE是凸函数,无此问题)


🧪 Python代码实现(Scikit-learn)

python 复制代码
# 线性回归:房价预测示例
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import pandas as pd

# 加载数据(以波士顿房价为例,注意:新版sklearn已移除,可用California Housing)
from sklearn.datasets import fetch_california_housing
data = fetch_california_housing()
X, y = data.data, data.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建并训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估
print("R²:", r2_score(y_test, y_pred))
print("RMSE:", mean_squared_error(y_test, y_pred, squared=False))

3.2 线性回归的优化与正则化

⚠️ 问题:多重共线性(Multicollinearity)

当两个或多个特征高度相关(如"房屋面积"和"房间数"),会导致:

  • 参数估计不稳定(微小数据变化 → 权重剧烈波动)
  • 模型泛化能力差

🛠️ 解决方案:正则化(Regularization)------给损失函数加"惩罚项"


🔒 L2正则化:Ridge回归

在损失函数中加入权重的平方和:

J ( θ ) = MSE + α ∑ j = 1 n θ j 2 J(\theta) = \text{MSE} + \alpha \sum_{j=1}^n \theta_j^2 J(θ)=MSE+αj=1∑nθj2

  • α \alpha α 越大,权重越小 → 模型更简单(防过拟合)
  • 所有权重都会被缩小,但不会变为0

✅ 适合特征都重要但怕过拟合的场景


🔪 L1正则化:Lasso回归

加入权重的绝对值之和:

J ( θ ) = MSE + α ∑ j = 1 n ∣ θ j ∣ J(\theta) = \text{MSE} + \alpha \sum_{j=1}^n |\theta_j| J(θ)=MSE+αj=1∑n∣θj∣

  • 特点:能将不重要的特征权重压缩到0 → 自动特征选择
  • 适合高维稀疏数据(如文本)

🧪 正则化代码对比

python 复制代码
from sklearn.linear_model import Ridge, Lasso

# Ridge 回归
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
print("Ridge R²:", r2_score(y_test, ridge.predict(X_test)))

# Lasso 回归
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)
print("Lasso R²:", r2_score(y_test, lasso.predict(X_test)))

# 查看哪些特征被Lasso"淘汰"了(权重为0)
print("非零特征数:", sum(lasso.coef_ != 0))

3.3 逻辑回归(Logistic Regression)

❗ 注意:虽然叫"回归",但它是分类算法 !主要用于二分类

📌 模型原理:把线性回归"掰弯"成概率

线性回归输出任意实数,但分类需要输出 0 或 1 。

→ 引入 Sigmoid 函数,把线性输出映射到 (0,1) 区间:

h θ ( x ) = σ ( θ T x ) = 1 1 + e − θ T x h_\theta(x) = \sigma(\theta^T x) = \frac{1}{1 + e^{-\theta^T x}} hθ(x)=σ(θTx)=1+e−θTx1

  • 输出可解释为:属于正类的概率

  • 若 h θ ( x ) > 0.5 h_\theta(x) > 0.5 hθ(x)>0.5 → 预测为 1;否则为 0


    图:Sigmoid函数将任意实数压缩到0~1之间


⚖️ 损失函数:交叉熵损失(Cross-Entropy Loss)

不能用平方损失!因为:

  • 分类问题不是连续值
  • 平方损失在逻辑回归中是非凸的,梯度下降可能卡住

正确损失函数(对单个样本):

Loss = { − log ⁡ ( h θ ( x ) ) if y = 1 − log ⁡ ( 1 − h θ ( x ) ) if y = 0 \text{Loss} = \begin{cases} -\log(h_\theta(x)) & \text{if } y = 1 \\ -\log(1 - h_\theta(x)) & \text{if } y = 0 \end{cases} Loss={−log(hθ(x))−log(1−hθ(x))if y=1if y=0

合并写法:

J ( θ ) = − 1 m ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) J(\theta) = -\frac{1}{m} \sum_{i=1}^m \left y\^{(i)} \\log h_\\theta(x\^{(i)}) + (1 - y\^{(i)}) \\log(1 - h_\\theta(x\^{(i)})) \\right J(θ)=−m1i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))

✅ 这个函数是凸函数,梯度下降能保证找到全局最优!


🧪 逻辑回归代码(垃圾邮件识别)

python 复制代码
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report
import pandas as pd

# 示例数据(实际可用SMS Spam Collection数据集)
data = [
    ("Free money!!!", 1),
    ("Hey, how are you?", 0),
    ("Win a million dollars!", 1),
    ("Meeting at 3pm", 0)
]
df = pd.DataFrame(data, columns=["text", "label"])

# 构建文本处理 + 逻辑回归管道
pipeline = Pipeline([
    ('tfidf', TfidfVectorizer()),
    ('clf', LogisticRegression())
])

X = df['text']
y = df['label']

# 训练
pipeline.fit(X, y)

# 预测
preds = pipeline.predict(["Congratulations! You won!"])
print("预测结果:", "垃圾邮件" if preds[0] == 1 else "正常邮件")

3.4 逻辑回归的扩展:多分类

逻辑回归天生只能做二分类,但可通过以下策略扩展:

方法1:One-vs-Rest(OvR)

  • 对每个类别 k k k,训练一个二分类器:类别 k k k vs 其他所有类别
  • 预测时,选概率最高的类别

✅ Scikit-learn 默认使用 OvR

方法2:Softmax 回归(多项逻辑回归)

  • 直接输出 K 个类别的概率分布
  • 损失函数用多类交叉熵

📌 在 LogisticRegression 中设置 multi_class='multinomial' 即可启用 Softmax

python 复制代码
# 多分类示例(鸢尾花)
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
clf = LogisticRegression(multi_class='multinomial', solver='lbfgs')
clf.fit(X, y)
print("预测类别:", clf.predict([[5.1, 3.5, 1.4, 0.2]]))  # 输出: [0]

3.5 实战案例总结

任务 模型 数据特点 关键指标
房价预测 线性回归 / Ridge / Lasso 连续目标值,数值特征 R², RMSE
疾病诊断(是否患病) 逻辑回归 二分类,医疗指标 准确率、召回率(别漏诊!)
垃圾邮件识别 逻辑回归 + TF-IDF 文本分类 精确率、F1值

🎯 本章要点回顾

  • 线性回归:预测连续值,用平方损失,可用正规方程或梯度下降求解
  • 正则化:Ridge(L2)防过拟合,Lasso(L1)还能自动选特征
  • 逻辑回归:用 Sigmoid 把线性输出转为概率,用交叉熵损失做二分类
  • 多分类:通过 One-vs-Rest 或 Softmax 扩展
  • 代码核心 :Scikit-learn 的 LinearRegression, Ridge, Lasso, LogisticRegression 一行搞定!

💡 建议:先掌握线性/逻辑回归的直觉和代码,再深入数学细节。它们是理解更复杂模型(如神经网络)的基石!


资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
嘉行文几秒前
传统机器学习与深度学习的特点与选择
人工智能·深度学习·机器学习
咕泡科技1 分钟前
深度学习碾压机器学习?经典机器学习是否真的无用了?从LLM底层逻辑到工业落地全景解析
人工智能·深度学习·机器学习·llm·nlp
饼饼学习空间智能7 分钟前
机器人规模化部署平台怎么选?Fleet、VDA 5050、多机器人调度与运营闭环解析
大数据·深度学习·机器学习
腾讯云大数据10 分钟前
腾讯云AI Native数据平台功能发布合集【9月】
人工智能·腾讯云
谢客诚科技16 分钟前
镀膜脆性薄片,不能接触镀膜面,脆性薄片搬运选伯努利还是边缘承靠式末端模组?
人工智能·机器人
我喜欢就喜欢17 分钟前
纳米 AI 搜索实战应用场景指南
人工智能
GlobalInfo22 分钟前
上新 | 全球及中国反无人机综合防御系统行业研究报告(2026版):市场现状、行业前景与占有率分析
人工智能·无人机
9i编程23 分钟前
6. 带 AI 从零搭低代码平台·踩坑实录:实测与大回归,实操又跑偏逐条清零
人工智能·openai·ai编程
IT_陈寒23 分钟前
为什么你应该学习Java?
前端·人工智能·后端