第 1 课 - 什么是机器学习
1. 学习目标
完成本课学习后,你将能够:
- 解释机器学习的基本概念和核心思想。
- 区分机器学习与传统编程的核心差异。
- 识别并说明机器学习任务中的关键要素(数据、特征、模型)。
- 描述一个简单的机器学习项目的基本流程。
- 列举机器学习在现实世界中的几个常见应用。
2. 核心概念
2.1 什么是机器学习?
想象一下,你正在教一个孩子识别苹果。你不会给他一本规则手册,写着“圆形、红色、有果柄的是苹果”。相反,你会给他看很多苹果和非苹果(比如橘子、红色的球)的图片,并告诉他“这是苹果”、“这不是苹果”。通过反复观察,孩子自己总结出规律,未来就能识别出从未见过的苹果。
机器学习(Machine Learning, ML) 就是这个过程的自动化。它让计算机能够从数据中自动学习出规律和模式,从而做出决策或预测,而无需为每个具体任务编写显式的程序规则。
一个简单的定义:机器学习是人工智能的一个分支,它赋予计算机通过经验(数据)自动改进的能力。
2.2 机器学习 vs. 传统编程
这是理解机器学习最关键的区别:
-
传统编程:人类明确制定规则,计算机根据规则处理数据,得出结果。
规则 + 数据 → 结果- 例子:编写一个函数,当温度高于30°C时,返回“天气炎热”。
-
机器学习:人类提供大量数据和期望的结果,计算机自己推断规则。
数据 + 结果 → 规则(模型)- 例子:给计算机成千上万条“(温度,湿度,风速等)→ 天气描述(炎热/凉爽)”的历史记录,让它自己学习出判断“炎热”的规则。
2.3 关键术语入门
- 数据(Data):机器学习的“燃料”。通常是一张表格,每一行是一个样本(例如,一个客户、一张图片),每一列是一个特征(例如,年龄、收入;像素值)。
- 特征(Features):描述样本的属性。选择哪些特征至关重要。
- 模型(Model):从数据中学习到的“规律”的数学表示。它就像一个从特征到结果的函数。
- 训练(Training):使用数据来“教会”模型这个函数的过程。
- 预测(Prediction):将新数据输入训练好的模型,得到输出结果。
3. 代码示例:第一个机器学习程序
我们将使用Python中最流行的机器学习库scikit-learn,通过一个简单的线性回归例子,预测房价。这能直观展示ML的流程。
前提:确保已安装所需库。在终端运行:pip install numpy matplotlib scikit-learn
# 第0步:导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# 第1步:准备数据
# 假设我们有一些房屋面积(平方米)和对应房价(万元)的数据
# 我们手动创建一些数据作为示例
house_areas = np.array([50, 60, 80, 100, 120, 150]) # 特征(X)
house_prices = np.array([150, 180, 240, 300, 360, 450]) # 目标(Y)
# 将数据调整为scikit-learn要求的格式(每个样本是二维数组)
X = house_areas.reshape(-1, 1) # 转换为列向量
Y = house_prices
print("特征矩阵X的形状:", X.shape) # (6, 1) 6个样本,每个样本1个特征
print("目标向量Y的形状:", Y.shape) # (6,)
# 第2步:划分训练集和测试集
# 我们用大部分数据训练模型,留一小部分来测试它是否真的学到了规律,而不是死记硬背。
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
# test_size=0.2 表示20%的数据用于测试,80%用于训练。
# random_state 确保每次划分结果一致,便于学习。
print(f"训练集样本数: {len(X_train)}")
print(f"测试集样本数: {len(X_test)}")
# 第3步:创建并训练模型
model = LinearRegression() # 创建一个线性回归模型
model.fit(X_train, Y_train) # 用训练数据“训练”模型,即寻找最佳拟合直线 y = wx + b
# 训练后,我们可以查看模型学到的参数
print(f"模型学到的斜率(w): {model.coef_[0]:.2f}")
print(f"模型学到的截距(b): {model.intercept_:.2f}")
# 第4步:使用模型进行预测
# 用测试集数据进行预测,看看模型在从未见过的数据上表现如何
Y_pred = model.predict(X_test)
print("测试集真实房价:", Y_test)
print("模型预测房价:", np.round(Y_pred, 2))
# 第5步:可视化结果(可选,但很有帮助)
plt.figure(figsize=(10, 6))
plt.scatter(X, Y, color='blue', label='所有原始数据')
plt.plot(X, model.predict(X), color='red', linewidth=2, label='模型学习到的规律 (线性拟合)')
plt.scatter(X_test, Y_pred, color='green', marker='x', s=100, label='测试集预测结果')
plt.xlabel('房屋面积 (平方米)')
plt.ylabel('房价 (万元)')
plt.title('我的第一个机器学习模型:房价预测')
plt.legend()
plt.grid(True)
plt.show()
# 第6步:评估模型(简单评估)
# 一个简单的评估指标:均方误差(MSE),值越小越好
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(Y_test, Y_pred)
print(f"模型在测试集上的均方误差(MSE): {mse:.2f}")
运行结果解读:你会看到模型输出一个斜率和截距,以及测试集的预测值。图形会显示一条红色的直线,它尝试穿过所有蓝色数据点,并用绿色叉号标记对测试集的预测。这展示了机器学习“从数据中学习规律”的核心过程。
4. 实践练习
练习1:调整参数
修改上面的代码,将test_size改为0.3。观察训练集和测试集的样本数量变化,以及模型参数和MSE是否会发生变化?思考为什么。
练习2:增加一个特征 当前模型只用了“面积”一个特征。假设你还收集了“卧室数量”的数据。请修改代码,使用两个特征(面积,卧室数)来预测房价。
- 提示:你需要构建一个新的
X矩阵,形状为(6, 2)。 - 新数据:
bedrooms = np.array([1, 1, 2, 2, 3, 3])。
练习3:尝试不同模型
将LinearRegression()替换为KNeighborsRegressor(n_neighbors=3)(K近邻回归器)。比较新旧模型的MSE和可视化图形有何不同?哪种模型在这组简单数据上拟合得更好?(注:KNN需要从sklearn.neighbors导入)。
5. 常见错误
- 混淆机器学习与人工智能:ML是实现AI的一种主要方法,但AI范围更广(还包括规则系统、专家系统等)。
- 期望过高:机器学习不能从“垃圾数据”中变出“黄金规律”。“Garbage In, Garbage Out” 是铁律。数据质量和特征工程至关重要。
- 忽略评估:只看训练集上的表现(训练误差)是危险的,容易导致过拟合——模型死记硬背了训练数据,对新数据毫无用处。必须使用测试集评估泛化能力。
- 不理解“黑箱”:初学者常觉得ML模型神秘。虽然复杂模型(如深度神经网络)的内部决策难以完全解释,但其核心仍是数学函数,输入数据,输出结果。
6. 小结
本节课我们开启了机器学习之旅:
- 核心思想:机器学习让计算机从数据中自动学习规律,而不是依赖人类手动编写规则。
- 关键区别:
传统编程 = 规则+数据→结果,机器学习 = 数据+结果→规则(模型)。 - 基本流程:1) 获取数据 -> 2) 划分训练/测试集 -> 3) 选择并训练模型 -> 4) 评估与预测。
- 第一段代码:我们用
scikit-learn实现了线性回归,完成了从数据准备到预测可视化的完整流程。 - 现实应用:机器学习无处不在,如推荐系统(淘宝、抖音)、人脸识别、自动驾驶、医疗诊断、金融风控等。
下一课预告:我们将深入探讨机器学习的三大主要类型——监督学习(就像本课的例子,有明确答案)、无监督学习(让机器自己发现数据中的群组)和强化学习(通过试错与奖励来学习策略)。这将为你构建更清晰的ML知识地图。