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

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

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


文章目录

  • [人工智能之核心基础 机器学习](#人工智能之核心基础 机器学习)
    • [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∑m[y(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》

相关推荐
jkyy20142 小时前
线上线下一体化,AI慢病管理突破药品零售时空限制
大数据·人工智能·健康医疗
愚公搬代码2 小时前
【愚公系列】《扣子开发 AI Agent 智能体应用》027-实战案例:企业营销宣传海报自动生成器
人工智能
水如烟2 小时前
孤能子视角:“融智学“理论分析,观点碰撞
人工智能
caoxiaoye2 小时前
Skills:让AI变身你的专属领域专家
人工智能
lisw052 小时前
AI宠物市场有哪些成功案例?
人工智能·机器人·宠物
上海锝秉工控2 小时前
增量型旋转式编码器:工业智能化的精密“神经元”
人工智能
wa的一声哭了2 小时前
矩阵分析 方阵幂级数与方阵函数
人工智能·python·线性代数·算法·自然语言处理·矩阵·django
O561 6O623O7 安徽正华露2 小时前
露,AI人工智能Morris水迷宫 AI人工智能Morris水迷宫视频分析系统 小鼠恒温游泳池 可折叠水迷宫
人工智能
AC赳赳老秦2 小时前
工业互联网赋能智造:DeepSeek解析产线传感器数据驱动质量管控新范式
前端·数据库·人工智能·zookeeper·json·flume·deepseek