← 文章 / AI技术
freeCodeCamp 11小时前 · 2026-09-12 02:14:24 · 3 阅读

揭秘机器学习模型:从零到一构建你的第一个模型

机器学习听起来往往比实际复杂得多。一听到模型训练特征数据集预测算法这些词,就好像写第一个机器学习程序之前,必须先拿个数学博士学位才行。

但机器学习的本质其实很简单:让计算机从大量例子中学习规律,再用这些规律对新的例子做出预测。你见过很多猫之后就学会了认猫——那你就已经懂了机器学习的基本思想。

在本教程中,我们将用 Python 构建一个真正的机器学习模型。我们会从一个很小的数据集开始,训练一个模型,根据学生的学习时长预测他能否通过考试,然后用训练好的模型对新的学生做出预测。

前置要求

学习本教程不需要任何机器学习基础,我们会边做边介绍相关概念。

不过,掌握一些 Python 基础会让学习过程更顺畅。你需要熟悉以下内容:

  • 变量的创建和使用

  • Python 列表的操作

  • 编写基本的 if/else 语句

  • 调用函数

  • 阅读和运行 Python 程序

  • 使用终端或命令提示符执行命令

你还需要准备:

  • 电脑上已安装 Python

  • 一个文本或代码编辑器,比如 VS Code

  • 终端或命令提示符

  • 网络连接,用于安装所需的 Python 库

不需要事先了解机器学习、scikit-learn、统计学或高等数学,我会逐步讲解相关概念和代码。

你将学到什么

目标不仅仅是让代码跑起来。我们要深入理解每一行关键代码的作用、为什么需要它,以及背后到底发生了什么。

读完之后,你会对机器学习究竟是什么、以及如何开始自己构建模型,拥有更清晰的心智模型。

什么是机器学习模型?

机器学习模型是一种从数据中习得规律的程序。

这个定义故意保持得简单。

假设你向一个孩子展示几种动物,并告诉它哪些是猫。看过足够多的例子后,孩子可能会发现猫通常具备某些特征:胡须、四条腿、毛发、特定的脸型等等。当它看到一种新动物时,就能利用所学到的知识来猜测它是不是猫。

机器学习模型的工作原理类似,只不过它处理的是数字和数据,而不是动物。

例如,假设我们给模型提供以下学生信息:

学习时长 考试结果
1 不及格
2 不及格
3 不及格
4 及格
5 及格
6 及格

模型可以观察这些示例,发现学习时长和考试结果之间的关系。它可能会学到:学习时间越长的学生,通过考试的概率往往越高。

我们并没有在程序里明确写下这条规则,而是模型从这些示例中自己学到的。

这正是机器学习背后的核心思想。

机器学习 vs 传统编程

把机器学习和传统编程对比一下,这一点就清晰多了。

在传统编程中,你给计算机提供规则和数据,它输出一个结果。

例如:

数据 + 规则 → 结果

你可能会这样写:

hours = 5

if hours >= 4:
    print("Likely to pass")
else:
    print("Likely to fail")

这里,规则是你亲手写的:

hours >= 4

计算机什么都没学到,每一步都是你明确告诉它的。

机器学习则把这个过程反过来。你不用手动编写规则,而是给计算机一堆示例:

示例 + 正确答案 → 机器学习模型

模型自己从这些示例中找出有用的规律。

之后,你就可以把新数据交给训练好的模型:

新数据 + 训练好的模型 → 预测结果

这个区别是最需要理解的核心概念之一。

什么是“训练”?

训练就是用示例来教机器学习模型的过程。

想象你在教一个人判断某个学生能否通过考试。

你给他一些示例:

1 小时 → 不及格
2 小时 → 不及格
3 小时 → 不及格
5 小时 → 及格
6 小时 → 及格

看过足够多的示例后,他就会开始注意到其中的规律。

机器学习的训练也是同样的道理。

我们把数据交给算法,算法不断调整模型,让它的预测结果越来越贴合给定的示例。

「训练」这个词听起来很高大上,但核心思路其实很简单:给模型一些示例,让它从中找出有用的规律。

什么是数据集?

数据集就是数据的集合。

在我们的项目中,可以用 Python 列表来表示数据集。

假设我们有:

hours = [1, 2, 3, 4, 5, 6, 7, 8]

以及:

results = [0, 0, 0, 1, 1, 1, 1, 1]

这里,我们用数字代表考试成绩。

具体含义是:

0 = 不及格
1 = 及格

所以我们的数据意味着:

1 小时 → 不及格
2 小时 → 不及格
3 小时 → 不及格
4 小时 → 及格
5 小时 → 及格
6 小时 → 及格
7 小时 → 及格
8 小时 → 及格

第一个列表包含输入信息,第二个列表包含我们想让模型学会的答案。

什么是特征和标签?

机器学习里有几个术语,听起来比实际复杂得多。

特征是我们用来做预测的信息。

标签是我们希望模型预测出的答案。

在我们的例子中:

学习时长 → 特征
及格/不及格 → 标签

如果我们知道每位学生更多的信息,就可以有多个特征,例如:

学习时长
上次考试成绩
作业完成度
出勤情况

这样模型就能利用所有这些特征来预测:

及格或不

所以可以这样理解:特征是线索,标签是答案。

我们在用哪种机器学习?

我们的例子使用的是监督学习。监督学习是指用已知正确答案的示例来训练模型。

比如:

学习时长:2 小时
正确答案:不及格

以及:

学习时长:6 小时
正确答案:及格

训练过程中,模型同时看到输入和对应的正确输出。

这与无监督学习不同:无监督学习中,模型接收数据但没有给定正确答案,需要自行寻找规律或进行分组。

机器学习还有其他类型,比如强化学习,但监督学习是很好的入门选择,因为基本流程容易理解。

我们实际会构建什么?

下面用一个 Python 程序演示这个过程:

  1. 创建一个小型数据集。

  2. 把输入和答案分开。

  3. 将数据划分为训练集和测试集。

  4. 创建一个机器学习模型。

  5. 训练该模型。

  6. 检验模型性能。

  7. 为模型提供新数据。

  8. 用模型进行预测。

最后的程序使用 决策树分类器,来自 scikit-learn 库。

决策树是一种机器学习算法,通过就数据提出一连串问题来做判断。

在我们的简单示例里,模型可能学会一种类似这样的模式:

学生学习的时长是否足够?
        ↓
      是 → 通过
      否  → 不及格

真实世界里的决策树要复杂得多,但足以体现核心思路。

开始动手构建吧。

Step 1: 安装 Python

要跟着实践,需要先在电脑上装好 Python。

通过运行以下命令检查 Python 是否已安装:

python --version

输出大致如下:

Python 3.12.0

版本不必完全一致。

Step 2: 建立项目目录

新建一个文件夹:

machine-learning-model

在这个文件夹里创建一个文件:

model.py

最终项目结构如下:

machine-learning-model/
└── model.py

Step 3: 安装 scikit-learn

使用 Python 库 scikit-learn

scikit-learn 内置大量机器学习算法和工具,不需要自己从数学公式逐条实现。

通过下面命令安装:

pip install scikit-learn

技术上,可以自己实现一个简单机器学习算法,这对后续学习数学有帮助。但作为第一个实战模型,直接借助机器学习库更便于聚焦在理解整个工作流程上。

Step 4: 引入模型

打开 model.py,写下:

from sklearn.tree import DecisionTreeClassifier

这行代码从 scikit-learn 中导入 DecisionTreeClassifier 类。

下面这个结构:

from sklearn.tree

表示我们要从 scikit-learn 的 tree 模块中取东西。

接着:

import DecisionTreeClassifier

表示我们要使用决策树分类器。

导入之后,我们就可以用下面的代码创建一个机器学习模型:

model = DecisionTreeClassifier()

变量:

model

就代表我们的机器学习模型。

此时模型还什么都没学到,它基本上是一个空模型,在等待训练数据。

第 5 步:创建数据集

现在我们来创建模型要学习的样本数据。

添加:

hours = [1, 2, 3, 4, 5, 6, 7, 8]

这个列表表示每个学生的学习时长。

然后:

results = [0, 0, 0, 1, 1, 1, 1, 1]

这个列表表示每个学生是否及格。

记住:

0 = Fail
1 = Pass

所以第一个学生学了 1 小时,没及格。

第四个学生学了 4 小时,及格了。

第八个学生学了 8 小时,也及格了。

这样我们就有了一批可供模型学习的样本。

第 6 步:理解数据结构的重要性

这里有个重要细节:机器学习库通常要求输入数据以特定的方式组织。

我们的 hours 列表长这样:

[1, 2, 3, 4, 5, 6, 7, 8]

但 scikit-learn 要求特征用二维结构来表示。

为什么呢?

因为机器学习数据集可以包含多个特征。

想象这样一个数据集:

Hours Studied | Attendance | Previous Score
2             | 80%        | 65
5             | 95%        | 82
7             | 98%        | 91

每一行代表一个样本。

每一列代表一个特征。

所以即使我们当前的模型只有一个特征,也仍然需要把它表示成二维数据集。

可以用嵌套列表来实现:

X = [
    [1],
    [2],
    [3],
    [4],
    [5],
    [6],
    [7],
    [8]
]

每个内层列表代表一个学生。

第一个学生是:

[1]

也就是说,他们学习了一个小时。

第二个是:

[2]

以此类推。

大写 X 是特征数据的通用约定。

现在创建标签:

y = [0, 0, 0, 1, 1, 1, 1, 1]

小写 y 通常用于表示目标值或标签值。

现在我们有了:

X = [
    [1],
    [2],
    [3],
    [4],
    [5],
    [6],
    [7],
    [8]
]

y = [0, 0, 0, 1, 1, 1, 1, 1]

你可以把 X 理解为:

这是线索。

y 理解为:

这是正确答案。

第 7 步:拆分数据

我们不想用完全相同的样本进行训练和测试。

这就好比给学生看了即将考试的题目,然后说:

“哇,你拿了 100%。干得不错。”

我们并没有真正测试他们是否学到了东西。

相反,我们会将数据集拆分为:

  • 训练数据

  • 测试数据

训练数据用于教导模型,测试数据则用于检查模型能否对未在训练中出现过的样本进行预测。

导入拆分函数:

from sklearn.model_selection import train_test_split

现在我们可以写:

X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.25,
    random_state=42
)

这一行代码包含了很多内容,我们来逐一拆解。

train_test_split()

该函数将我们的数据随机划分为训练部分和测试部分。

我们传入:

X

它包含我们的特征。

然后是:

y

它包含我们的标签。

参数:

test_size=0.25

意味着我们想保留大约 25% 的数据用于测试。

剩余的 75% 用于训练。

random_state=42

数据是随机拆分的。

如果你多次运行程序而不控制随机性,每次可能会得到不同的拆分结果。

设置:

random_state=42

可以使随机拆分结果可复现。

数字 42 并不神秘。你可以使用其他整数。

举例来说:

random_state=10

也是可以的。

我们使用 42 只是因为它是一个常见的示例值。

四个变量

该函数返回四部分数据:

X_train
X_test
y_train
y_test

X_train 包含用于训练模型的特征数据。

y_train 包含这些训练样本对应的正确答案。

X_test 包含用于测试模型的特征数据。

y_test 包含正确的答案,以便与模型的预测结果进行对比。

第 8 步:创建模型

现在来创建我们的决策树:

model = DecisionTreeClassifier()

这样就创建了模型对象。

此时模型尚未学习任何内容。可以把它想象成买了一个空白笔记本:笔记本本身存在,但里面还没有你的笔记。

第 9 步:训练模型

现在我们来执行真正教模型学习的那行代码:

model.fit(X_train, y_train)

这是机器学习中最重要的代码之一。

.fit() 方法使用我们提供的数据来训练模型。

我们传入:

X_train

它包含示例数据。

然后传入:

y_train

它包含正确答案。

模型会寻找特征与标签之间的关联模式。

在我们的例子中,它试图发现以下两者之间的关系:

学习时长

与:

通过/未通过

具体的内部机制取决于算法。决策树会学习决策规则,将训练数据分割成越来越有利于预测目标的组。

现阶段需要理解的关键点是:

model.fit(X_train, y_train)

表示:

从这些示例及其正确答案中学习。

第 10 步:进行预测

训练完成后,我们可以让模型处理新数据。

假设一名学生学习了五个小时。

我们可以这样写:

prediction = model.predict([[5]])

注意这里使用的是:

[[5]]

而不是:

[5]

外层列表表示样本集合,内层列表表示单个样本的特征。

由于我们的模型只有一个特征,所以这个样本只包含一个值:

[5]

因此:

[[5]]

的含义是:

为一个特征值为五小时的学生预测结果。

模型会返回一个预测结果。

我们可以打印出来:

print(prediction)

你可能会看到:

[1]

别忘了:

1 = Pass(通过)
0 = Fail(不通过)

所以模型预测这个学生会通过。

第 11 步:把预测结果转换成人类可读的文本

直接输出一个:

1

并不直观。

我们可以这样写:

if prediction[0] == 1:
    print("The model predicts: Pass")
else:
    print("The model predicts: Fail")

先看这一行:

prediction[0]

模型返回的是包含预测结果的列表:

[1]

[0] 就是取出第一个元素。

Python 中列表位置从零开始计数。

所以:

prediction[0]

的意思是:

给我第一个预测结果。

接着:

if prediction[0] == 1:

判断模型的预测是否为 1

如果是,就打印:

The model predicts: Pass

否则打印:

The model predicts: Fail

第 12 步:测试模型

不能只做一次预测就认为模型没问题。

我们需要对模型进行评估。

首先,对测试数据集进行预测:

predictions = model.predict(X_test)

此时:

predictions

存放的是模型对训练时没见过的样本做出的预测。

我们可以把这些预测结果与:

y_test

(即真实答案)进行对比。

scikit-learn 提供了准确率函数:

from sklearn.metrics import accuracy_score

然后:

accuracy = accuracy_score(y_test, predictions)

该函数会把正确答案和模型的预测结果进行对比。

如果模型做到了:

10 次中对了 8 次

正确的话,准确率就是:

0.8

我们可以把它转换成百分比:

print(f"Model accuracy: {accuracy * 100:.2f}%")

这里的 * 100 将:

0.8

转换为:

80

而:

:.2f

表示我们想要保留两位小数。

因此输出可能如下所示:

Model accuracy: 80.00%

关于准确率的重要警告

准确率很有用,但它不能告诉你模型的全部情况。

假设你要检测一种罕见疾病。

假设情况是:

99 个人是健康的
1 个人生病了

一个糟糕的模型可以直接预测:

每个人都是健康的。

它的准确率将达到 99%。

但它完全失败了,没有完成我们真正关心的事情:识别出那个生病的人。

这就是为什么机器学习开发者会根据问题使用其他评估指标,包括精确率、召回率、F1 分数、均方误差等。

对于我们的初学者示例来说,用准确率来理解基本工作流就足够了。

第 13 步:整合所有内容

我们完整的初学者机器学习程序如下:

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Dataset
X = [
    [1],
    [2],
    [3],
    [4],
    [5],
    [6],
    [7],
    [8]
]

y = [
    0,
    0,
    0,
    1,
    1,
    1,
    1,
    1
]

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.25,
    random_state=42
)

# Create the machine learning model
model = DecisionTreeClassifier()

# Train the model
model.fit(X_train, y_train)

# Make predictions on the test data
predictions = model.predict(X_test)

# Calculate accuracy
accuracy = accuracy_score(y_test, predictions)

print(f"Model accuracy: {accuracy * 100:.2f}%")

# Make a prediction for a new student
hours_studied = [[5]]

prediction = model.predict(hours_studied)

# Display the prediction
if prediction[0] == 1:
    print("The model predicts: Pass")
else:
    print("The model predicts: Fail")

从头到尾阅读完整代码

前三行代码:

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

导入所需的工具。

接着:

X = [
    [1],
    [2],
    [3],
    [4],
    [5],
    [6],
    [7],
    [8]
]

创建特征数据。

然后:

y = [
    0,
    0,
    0,
    1,
    1,
    1,
    1,
    1
]

创建标签。

接下来:

X_train, X_test, y_train, y_test = train_test_split(...)

将数据集划分为训练集和测试集。

之后:

model = DecisionTreeClassifier()

创建模型。

再往下:

model.fit(X_train, y_train)

训练模型。

接着:

predictions = model.predict(X_test)

让训练好的模型对测试样例进行预测。

然后:

accuracy = accuracy_score(y_test, predictions)

计算预测结果中的正确率。

最后:

prediction = model.predict([[5]])

让模型预测一名学习了五小时的新生的结果。

这就是完整的机器学习流程。

模型内部究竟发生了什么?

这正是机器学习变得有趣的地方。

当我们运行:

model.fit(X_train, y_train)

决策树并不会死记硬背这条规则:

4 小时 = 通过

它会分析训练样例,寻找有用的划分方式。

例如,它可能会发现类似这样的规则:

学习时长是否 <= 3.5 小时?

如果是:

预测为不及格

如果否:

预测为通过

具体的树结构取决于训练数据和算法设置。

如果我们增加更多特征,树就可以结合多项信息来做决策。

例如:

学习时间是否 <= 3.5?

       是
        ↓
    预测不及格

       否
        ↓
出勤率是否 <= 80%?

       是
        ↓
    预测不及格

       否
        ↓
    预测通过

再次强调,我们的代码并没有手动创建这些规则。

算法是从训练数据中自动学习到的。

“学习”到底意味着什么?

这是机器学习中最容易被误解的概念之一。

计算机的“学习”和人类并不完全相同。机器学习算法是通过数学方法,根据数据来调整模型的。

不同算法的学习方式各不相同:决策树寻找有用的划分点,线性回归模型学习描述变量关系的数值参数,神经网络借助优化算法调整大量参数,聚类算法则把相似的样本归为一组。

所以,“学习”其实是一个方便的说法,指的是:

用算法调整模型,让它捕捉到数据中有用的模式。

什么是参数?

参数是机器学习模型内部从数据中学到的数值。

比如一个简单的线性模型:

y = mx + b

模型会学到这些值:

m
b

这些值决定了输入和输出之间的关系。

神经网络的参数可以达到数百万甚至数十亿个。

关键在于:模型的行为由训练过程中学习或调整出来的数值所控制。

参数 vs 超参数

这两个术语很容易混淆。

参数(parameter)通常是从训练数据中学到的,而超参数(hyperparameter)是你在训练前或训练过程中自行配置的设置。

以决策树为例,我们可以这样指定:

model = DecisionTreeClassifier(
    max_depth=3
)

这里的:

max_depth=3

就是一个超参数。

它相当于在告诉算法:

决策树的深度不要超过三层。

模型从数据中学出内部的决策规则,而超参数则由我们自己来选择。

随着你构建更复杂的模型,这个区别会越来越重要。

为什么需要训练集和测试集?

想象一下你在准备数学考试。

老师给了你十道练习题,你把答案全背下来了。

结果考试正好就是这十道题,你全都答对了。

这能证明你真的懂数学吗?未必。你可能只是背会了这几道题而已。

机器学习中存在一个类似的问题,称为过拟合。模型可能在训练数据上表现极好,却失去了处理新数据的能力。

这就是我们要将部分样本单独保留的原因。训练期间,模型看不到这些测试样本。随后我们可以追问:

模型能否将其所学泛化到它从未见过的新样本上?

这种在未见数据上有效运作的能力,是机器学习最重要的目标之一。

什么是过拟合?

当模型对训练数据的学习过于具体时,就会发生过拟合。

假设我们给模型一个极小的数据集。它可能不会去学习通用规律,

例如“学习时长越长,通过率越高”

而是直接死记硬背那些具体的例子。

这会导致训练时的性能看起来非常出色,而在新数据上的表现却很差。

一个在训练集上表现良好、但在未见数据上表现不佳的模型,通常就处于过拟合状态。

什么是欠拟合?

欠拟合基本上就是另一种极端。模型过于简单,无法捕捉数据中的关键模式。

想象一下,仅凭一两项成绩来预测某人的考试结果。

模型从中获取的有效信息不足,导致它在训练数据和测试数据上的表现都很差。

良好的机器学习实践在于找到一个平衡点:模型既要有足够的复杂度来学习有用规律,又不至于复杂到只是机械记忆训练样本。

为什么我们的数据集不是真正的机器学习数据集

我们的八个例子是故意设计得这么小的。

实际的机器学习项目通常会使用海量数据。

举例来说,你可能收集:

10,000 名学生的数据

并包含以下特征:

学习时长
出勤率
作业完成率
历史分数
睡眠时长

以及一个标签:

是否通过

这样,模型就能从数千个实例中学习。

我们的迷你数据集之所以有用,是因为它能让我们透彻理解流程的每个环节。

第 14 步:增加更多特征

让我们让例子更贴近现实一些。

除了学习时长,假设我们还有:

学习时长
出勤率

我们可以这样表示每个学生:

X = [
    [2, 70],
    [3, 75],
    [4, 80],
    [5, 85],
    [6, 90],
    [7, 95]
]

现在每行包含两个特征。

例如:

[5, 85]

表示:

学习了 5 小时
出勤率为 85%

标签仍可以是:

y = [0, 0, 1, 1, 1, 1]

模型现在拥有了更多信息。

训练方式完全相同:

model.fit(X_train, y_train)

区别在于,模型现在有两个特征,而不是一个。

第 15 步:基于多个特征进行预测

假设我们要预测一名学生的结果,该学生:

学习了 5 小时
出勤率为 90%

我们将此表示为:

new_student = [[5, 90]]

然后:

prediction = model.predict(new_student)

模型会结合这两个特征来进行预测。

这就是机器学习如何从简单示例扩展到拥有多列的数据集。

如果有成百上千个特征怎么办?

基本概念是一样的。

想象使用以下数据预测房价:

卧室数量
面积
浴室数量
位置
房屋房龄
车库大小
地块面积
距离学校的距离

每一项都可以成为一个特征。然后模型利用这些特征来预测目标:

房屋价格

基本结构保持不变:

特征 → 模型 → 预测

难点在于选择有用的数据、选择合适的算法、清洗数据、评估模型,并确保模型在训练集之外也能良好运行。

什么是回归?

到目前为止,我们的模型预测的是类别:

通过
失败

这是一个分类问题。分类意味着预测类别。

例子包括:

垃圾邮件 / 非垃圾邮件
猫 / 狗
欺诈 / 非欺诈
通过 / 失败

回归不同,它预测的是数值。

例如:

房屋价格 = 425,000 美元

或:

温度 = 82.4°F

或:

销售额 = 17,500 美元

因此,一个有用的区分是:

分类 → 预测类别

回归 → 预测数值

一个简单的回归示例

scikit-learn 提供了一个叫 LinearRegression 的模型。

先导入:

from sklearn.linear_model import LinearRegression

创建模型:

model = LinearRegression()

然后训练:

model.fit(X_train, y_train)

再做预测:

prediction = model.predict([[5]])

整个流程几乎一模一样。

这正是机器学习库好用的原因之一:只要理解了通用流程,学习新算法就会容易得多。

机器学习的通用工作流

大多数入门级机器学习项目都可以按下面这个流程来理解:

1. 收集数据

获取与你要解决的问题相关的样本。

2. 清洗数据

处理缺失、错误、重复或不一致的数据。

3. 选择特征

确定你希望模型使用哪些信息。

4. 选择模型

挑选适合该问题的算法。

5. 划分数据

把数据分成训练集和测试集。

6. 训练

用训练数据拟合模型。

7. 评估

衡量模型的表现。

8. 改进

调整数据、特征、模型或超参数。

9. 做出预测

用训练好的模型处理新数据。

10. 部署

如果模型有效,就把它集成到应用中。

这个工作流比死记某个算法的名字重要得多。

机器学习如何融入实际应用

训练好的模型通常并不是应用的全部。

假设你构建了一个判断邮件是否为垃圾邮件的模型,最终可能形成这样的结构:

Email
 ↓
Backend
 ↓
Machine Learning Model
 ↓
Prediction
 ↓
User Interface

模型只是更大软件系统中的一个组件。

同样的思路也适用于:

Recommendation systems
Fraud detection
Search engines
AI assistants
Image classification
Demand forecasting
Customer analytics

这一点对开发者很重要,因为机器学习工程不只是训练模型,你还需要懂得如何围绕模型构建软件。

接下来该学什么?

理解了上述基础项目后,你可以探索几个有价值的进阶方向。

掌握 NumPy

NumPy 是 Python 进行数值计算的基础库之一。在机器学习中,你会到处遇到数组。

掌握 pandas

pandas 在处理数据集时极其有用

例如:

import pandas as pd

你可以加载 CSV 文件:

data = pd.read_csv("students.csv")

并查看数据内容:

print(data.head())

当你开始处理真实数据集时,这套流程会变得非常实用。

学习数据可视化

Matplotlib 等库可以帮你直观展示数据。比如,你可能想看看考试分数是否随学习时长增加而提高。

数据可视化能帮你在训练模型之前先发现潜在规律。

探索更多算法

当决策树变得清晰后,接着了解这些算法:

Linear Regression
Logistic Regression
Random Forests
K-Nearest Neighbors
Support Vector Machines
Gradient Boosting
Neural Networks

你不需要死记硬背所有算法。

重点在于理解每种算法适合解决什么类型的问题,以及它们背后的假设或权衡。

夯实数学基础

即使不从零推导每个公式,你也能开发出有用的机器学习应用。

但如果你想深入理解机器学习,数学的价值会越来越凸显

建议从这些领域入手:

Algebra
Functions
Probability
Statistics
Linear Algebra
Calculus

当你开始学习神经网络的训练机制时,导数和梯度等概念会显得格外重要。

为助你入门,这里也推荐一门微积分课程和一本统计学手册

需要牢记的思维模型

学习机器学习时,别被专业术语唬住,以为事情比实际更复杂。

在最基础的层面,可以这样理解机器学习:

你有一组示例,每个示例都包含被称为特征的信息。部分示例还有已知的答案,即标签

把这些示例交给学习算法,算法会创建一个模型,以捕捉示例中的规律。

随后,把新信息交给已训练好的模型,模型利用学到的规律进行预测。

在代码中,基本流程如下:

model = SomeMachineLearningModel()

model.fit(X_train, y_train)

predictions = model.predict(X_test)

这种三部分结构值得记住。

model = ...

创建模型。

model.fit(...)

训练模型。

model.predict(...)

使用已训练的模型。

机器学习中其他所有知识都建立在这个基础之上。

结语

机器学习模型并非计算机里的一块神奇大脑,而是一个由算法从数据中习得规律后生成的数学模型。

思维上最关键的一点转变是:你未必需要亲手编写每一条规则。

在传统编程中,你可能显式地写出:

if hours >= 4:
    result = "Pass"

而在机器学习中,你只需提供示例:

1 hour → Fail
2 hours → Fail
3 hours → Fail
4 hours → Pass
5 hours → Pass

然后让学习算法自行发现有用的规律。

我们的项目刻意做得很小,但同样的基本思想也适用于更庞大的系统。推荐引擎、欺诈检测器、图像分类器以及众多其他机器学习应用,依然需要处理数据、特征、训练、评估和预测。

掌握这些基础之后,训练特征标签分类回归过拟合模型这些术语就不再是一堆零散的 AI 词汇,而是串成了一个完整的知识体系。

不必一上来就想着打造下一个大型 AI 系统。先用一个小数据集,训练一个模型,看看它的预测结果,改动点什么,再观察会发生什么。机器学习正是在这种动手实践中变得越来越容易理解的。

祝编程愉快!

原始来源: freeCodeCamp

评论 (0)