问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习入门:从基础概念到线性回归实战

创作时间:
作者:
@小白创作中心

机器学习入门:从基础概念到线性回归实战

引用
CSDN
1.
https://blog.csdn.net/weixin_73839586/article/details/145689588

机器学习是人工智能领域的一个重要分支,它通过让计算机从数据中学习规律,从而完成特定任务。本文将从机器学习的基本概念出发,介绍其核心定义、分类、工作流程以及常见术语,并通过一个线性回归预测房价的实践案例,帮助读者更好地理解机器学习的应用。

什么是机器学习?

机器学习是一种使计算机系统利用数据和算法自主学习并改进其性能的人工智能领域。其核心定义和分类如下:

  • 定义:通过数据训练模型,让模型在不显式编程的情况下完成特定任务。

  • 分类

  • 监督学习(Supervised Learning):有标签数据,例如分类问题和回归问题。

  • 无监督学习(Unsupervised Learning):无标签数据,例如聚类问题。

  • 强化学习(Reinforcement Learning):通过奖励机制学习最佳策略。

监督学习和无监督学习的对比

  • 监督学习案例:预测房价(回归)、分类垃圾邮件(分类)。
  • 无监督学习案例:将客户分组(聚类)。

机器学习工作流程

机器学习的工作流程通常包括以下几个步骤:

  1. 数据收集与准备
  2. 特征工程(数据清洗、标准化、特征选择)
  3. 选择模型
  4. 模型训练与评估
  5. 模型优化
  6. 部署模型

常见术语

  • 特征(Features):模型输入的数据属性。
  • 标签(Labels):目标变量(监督学习中)。
  • 过拟合与欠拟合:模型表现与数据拟合的关系。
  • 损失函数:衡量预测与实际值之间误差的函数。

实践任务:用线性回归预测房价

我们将尝试实现一个简单的线性回归案例,使用Python来预测房价。

代码实现

# 导入所需的库
import numpy as np  # 用于数值计算
import matplotlib.pyplot as plt  # 用于数据可视化
from sklearn.datasets import load_boston  # 用于加载波士顿房价数据集
from sklearn.model_selection import train_test_split  # 用于将数据划分为训练集和测试集
from sklearn.linear_model import LinearRegression  # 用于创建线性回归模型
from sklearn.metrics import mean_squared_error  # 用于评估模型性能(计算均方误差)

# 加载波士顿房价数据集
boston = load_boston()  # 加载数据
X = boston.data  # 特征数据(每个样本的属性,如房间数、面积等)
y = boston.target  # 目标数据(房价)

# 划分训练集和测试集
# 将数据分成训练集和测试集,比例为 80% 训练集,20% 测试集,random_state 保证结果可复现
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)  # 输入测试集特征,输出模型预测的房价

# 评估模型性能
mse = mean_squared_error(y_test, y_pred)  # 计算均方误差 (MSE)
print(f"均方误差 (MSE): {mse:.2f}")  # 打印均方误差,数值越小,模型效果越好

# 可视化实际值与预测值的对比
plt.figure(figsize=(10, 6))  # 创建画布,设置大小为 10x6 英寸
plt.scatter(y_test, y_pred, alpha=0.7)  # 绘制散点图,横轴为实际值,纵轴为预测值
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], '--r', linewidth=2)  
# 绘制一条红色虚线,表示理想情况下预测值与实际值完全相等的直线
plt.xlabel("实际值", fontsize=12)  # 设置 x 轴标签
plt.ylabel("预测值", fontsize=12)  # 设置 y 轴标签
plt.title("实际值 vs. 预测值", fontsize=14)  # 设置图表标题
plt.show()  # 显示图表

附代码解释

model = LinearRegression()

  1. 作用
  • 这行代码创建了一个线性回归模型实例,model是这个模型对象。
  • 线性回归模型的目标是找到一个线性函数(形式为 ( y = w_1x_1 + w_2x_2 + \dots + w_nx_n + b )),使得输入特征 ( x ) 和输出目标 ( y ) 的误差最小。
  1. 为什么需要模型对象
  • LinearRegression()是sklearn.linear_model中的一个类,它封装了线性回归的所有功能,例如:
  • 训练(fit):计算模型的参数 ( w ) 和 ( b )。
  • 预测(predict):用训练好的模型对新数据进行预测。
  • 评估(score):计算模型的 R² 分数(解释变量的比例)。
  1. 模型内部会做什么
  • 创建模型对象时,sklearn会初始化一些超参数(比如是否添加截距项b等)。
  • 这些超参数的默认值已经足够应对大多数基础问题。

model.fit(X_train, y_train)

  1. 作用
  • fit是训练模型的核心方法,它会根据训练集的特征数据 ( X ) 和目标值 ( y ),计算出模型的最优参数(权重 ( w ) 和偏置 ( b ))。
  • 简单来说,这一步让模型“学习”训练数据中的规律。
  1. 内部过程
  • fit方法会执行以下步骤:
    1. 假设模型形式:线性回归假设输出 ( y ) 和输入 ( x ) 存在线性关系。
    2. 最小化损失函数:通过最小化均方误差(MSE),找到最佳的 ( w ) 和 ( b )。
      [
      MSE = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2
      ]
      其中 ( y_i ) 是真实值,( \hat{y}_i ) 是预测值。
    3. 求解参数:利用数学方法(例如最小二乘法或矩阵运算),找到使误差最小的 ( w ) 和 ( b )。
  1. 结果
  • fit方法完成后,模型就会包含训练好的参数。
  • 这些参数存储在model.coef_(权重 ( w ))和model.intercept_(截距 ( b ))中。

举个例子:

假设你的数据集只有一个特征 ( X ) 和一个目标 ( y ),模型要找到以下关系:
[
y = wx + b
]

  1. 初始状态:模型没有任何参数,无法预测 ( y )。
  2. 调用fit(X_train, y_train)后,模型会:
  • 找到最佳的 ( w ) 和 ( b ),例如 ( w = 2.5 ), ( b = 1.0 )。
  • 现在,模型可以用 ( y = 2.5x + 1.0 ) 对任何输入 ( x ) 做出预测。

一些学习疑问:

  • 为什么要fit?
    fit是训练模型的过程,它让模型学习到数据中的规律,计算出最优参数。

  • fit后的模型能做什么?
    训练后的模型可以用predict方法预测新数据的目标值,例如:

    new_data = np.array([[1.5], [3.0]])  # 新的数据点
    predictions = model.predict(new_data)  # 用训练好的模型预测
    

代码运行结果

实际值 vs. 预测值

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号