零基础学机器学习算法入门:基础概念详解

刘娟
2026-07-15 01:54
阅读 1071

作者:一个在大厂搬砖3年、业余在B站肝视频的技术UP主


写在前面:为什么要写这篇教程?

大家好,我是你们的老朋友,一个在大厂写了3年代码、业余在B站做技术分享的UP主。

最近后台收到最多的私信就是:"UP主,我想学机器学习,但是完全零基础,该从哪里开始?"说实话,我当初学的时候也是一脸懵,什么梯度下降、损失函数、过拟合……每个字都认识,连在一起就不知道在说什么了。

所以今天这篇文章,我就用最通俗的大白话,带你从零开始搞懂机器学习的基础概念。不讲复杂的数学推导,不搞晦涩的公式,咱们实践驱动,边学边敲代码,让你真正理解每一个概念到底是什么意思。

另外,在写这篇教程的过程中,我也用到了不少AI辅助工具,比如用Kiro来帮我梳理代码结构,用扣子(Coze)来生成一些教学案例的灵感,不得不说,现在的AI编程工具确实能大幅提升效率,后面我也会分享一些我的实战经验

好了,废话不多说,咱们直接开干!


一、机器学习到底是什么?

在正式开始之前,咱们先用30秒搞明白一个最基本的问题:机器学习到底是干嘛的?

1.1 用大白话解释机器学习

传统编程是什么?是你告诉电脑:"如果A,就执行B"。比如:

# 传统编程:你写规则
def is_adult(age):
    if age >= 18:
        return "成年"
    else:
        return "未成年"

你写死了规则,电脑照着执行。

但机器学习不一样。你不告诉电脑规则,而是给它一堆数据,让它自己去找规律。比如:

# 机器学习:让电脑自己找规律
# 你给电脑看1000个人的数据:年龄、收入、是否买房
# 电脑自己总结出:什么样的人更可能买房

一句话总结:机器学习就是让计算机从数据中自动学习规律,而不是靠人手动编写规则。

1.2 机器学习的三大类型

类型 核心特点 典型应用 通俗比喻
监督学习 数据有标签(有标准答案) 图像分类、房价预测 老师出题,学生做题,老师批改
无监督学习 数据没标签(没标准答案) 聚类分析、降维 让学生自己分组,没有标准答案
强化学习 通过奖惩来学习 游戏AI、自动驾驶 训练小狗,做对了给奖励,做错了惩罚

咱们这篇入门教程,主要聚焦在监督学习,因为这是最基础、也是工作中用得最多的。


二、环境准备:搭建你的第一个机器学习开发环境

我当初学的时候,光装环境就折腾了两天。现在工具链成熟了,5分钟就能搞定。

2.1 安装Python和必要库

首先,确保你安装了Python 3.8或以上版本。然后安装以下核心库:

pip install numpy pandas scikit-learn matplotlib jupyter

各库的作用说明:

库名 作用 是否必须
numpy 数值计算,矩阵运算 必须
pandas 数据处理和分析 必须
scikit-learn 机器学习算法库(本文主角) 必须
matplotlib 数据可视化 推荐
jupyter 交互式笔记本,方便实验 强烈推荐

2.2 启动Jupyter Notebook

jupyter notebook

浏览器会自动打开一个界面,点击"New" → "Python 3",就可以开始写代码了。

小贴士:如果你不想折腾本地环境,可以直接用Google Colab,打开浏览器就能写代码,还免费提供GPU。搜索"Google Colab"即可使用。


三、核心概念详解(通俗版)

接下来是本文的重点。我会用最通俗的语言,把机器学习的核心概念一个个讲清楚。

3.1 特征(Feature)和标签(Label)

这两个词你以后会天天听到,必须搞清楚。

  • 特征(Feature):用来描述数据的属性。比如预测房价,面积、地段、楼层就是特征。
  • 标签(Label):你要预测的目标。比如房价本身就是标签。
import pandas as pd

# 一个简化的房价数据集
data = {
    '面积(㎡)': [50, 70, 90, 110, 130],
    '楼层': [3, 5, 8, 12, 15],
    '房价(万)': [150, 210, 280, 350, 420]  # 这是标签
}

df = pd.DataFrame(data)
print(df)

# 特征:面积和楼层
X = df[['面积(㎡)', '楼层']]
# 标签:房价
y = df['房价(万)']

print("\n特征X:")
print(X)
print("\n标签y:")
print(y)

我当初学的时候,老是搞混特征和标签。后来我就记一个口诀:特征是你已知的,标签是你要猜的。

3.2 训练集和测试集

这就像考试。你不能拿考试原题给学生练习,否则无法检验真实水平。

  • 训练集(Training Set):用来让模型"学习"的数据,相当于平时的练习题。
  • 测试集(Test Set):用来检验模型效果的数据,相当于考试题。
from sklearn.model_selection import train_test_split

# 假设我们有100条数据
import numpy as np
X = np.random.rand(100, 2)  # 100条数据,每条2个特征
y = np.random.rand(100)     # 100个标签

# 按 8:2 的比例划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

print(f"训练集大小: {X_train.shape[0]} 条")
print(f"测试集大小: {X_test.shape[0]} 条")

输出:

训练集大小: 80 条
测试集大小: 20 条

为什么要分训练集和测试集? 如果一个模型在训练集上表现很好,但在测试集上表现很差,说明它只是"死记硬背"了训练数据,并没有真正学到规律。这就是所谓的过拟合,后面会详细讲。

3.3 模型(Model)

模型就是那个"从数据中学习规律"的东西。你可以把它理解成一个函数:y = f(x)

不同的算法就是不同的模型,比如:

  • 线性回归(Linear Regression):画一条直线来拟合数据
  • 决策树(Decision Tree):像流程图一样做判断
  • K近邻(KNN):看看周围邻居是什么类别
from sklearn.linear_model import LinearRegression

# 创建一个线性回归模型
model = LinearRegression()

# 训练模型(让模型从数据中学习规律)
model.fit(X_train, y_train)

# 用模型做预测
predictions = model.predict(X_test)

print("预测值:", predictions[:5])
print("真实值:", y_test[:5])

3.4 损失函数(Loss Function)和评估指标

模型训练得好不好,怎么衡量?这就需要损失函数评估指标

  • 损失函数:衡量模型预测值和真实值之间的差距。训练的目标就是让损失函数最小化。
  • 评估指标:用来评价模型在测试集上的表现。

常见的评估指标:

指标 适用场景 含义
MSE(均方误差) 回归任务 预测值和真实值差值的平方的平均值
MAE(平均绝对误差) 回归任务 预测值和真实值差值的绝对值的平均值
Accuracy(准确率) 分类任务 预测正确的样本占总样本的比例
Precision(精确率) 分类任务 预测为正例的样本中,真正是正例的比例
Recall(召回率) 分类任务 真正是正例的样本中,被预测为正例的比例
from sklearn.metrics import mean_squared_error, mean_absolute_error

# 计算MSE
mse = mean_squared_error(y_test, predictions)
print(f"MSE: {mse:.4f}")

# 计算MAE
mae = mean_absolute_error(y_test, predictions)
print(f"MAE: {mae:.4f}")

3.5 过拟合和欠拟合

这是新手最容易踩的坑,也是面试高频考点。

  • 欠拟合(Underfitting):模型太简单,连训练数据都学不好。就像考试连练习题都做不对。
  • 过拟合(Overfitting):模型太复杂,把训练数据的噪声也学进去了。就像死记硬背了练习题,但考试题一变就不会了。
训练误差    测试误差
   |           |
   |   欠拟合   |   合适    过拟合
   |   ↗       |   ↘      ↗
   |  /        |    \    /
   | /         |     \  /
   |/__________|______\/________
              模型复杂度 →

怎么解决?

  • 欠拟合:增加特征、换更复杂的模型、减少正则化
  • 过拟合:增加数据、减少特征、增加正则化、用交叉验证

四、实战项目:预测房价

光说不练假把式。咱们来做一个完整的实战项目:用线性回归预测房价

4.1 项目概述

我们要做的事情:

  1. 加载一个房价数据集
  2. 探索和分析数据
  3. 划分训练集和测试集
  4. 训练一个线性回归模型
  5. 评估模型效果
  6. 用模型做预测

4.2 完整代码实现

# ==================== 第一步:导入必要的库 ====================
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import matplotlib.pyplot as plt

# ==================== 第二步:准备数据 ====================
# 这里我们用sklearn自带的波士顿房价数据集的模拟版本
np.random.seed(42)
n_samples = 200

# 生成模拟数据
area = np.random.uniform(40, 200, n_samples)        # 面积 40-200㎡
rooms = np.random.randint(1, 6, n_samples)           # 房间数 1-5
distance = np.random.uniform(0.5, 20, n_samples)     # 距市中心距离 0.5-20km
floor = np.random.randint(1, 30, n_samples)          # 楼层 1-30

# 生成房价(带一些噪声)
# 房价 = 面积*1.5 + 房间数*10 - 距离*3 + 楼层*0.5 + 随机噪声
price = (area * 1.5 + rooms * 10 - distance * 3 + 
         floor * 0.5 + np.random.normal(0, 20, n_samples))

# 组装成DataFrame
df = pd.DataFrame({
    '面积': area,
    '房间数': rooms,
    '距市中心距离': distance,
    '楼层': floor,
    '房价': price
})

print("数据集前5行:")
print(df.head())
print(f"\n数据集大小: {df.shape}")
print(f"\n数据统计信息:")
print(df.describe())

# ==================== 第三步:准备特征和标签 ====================
X = df[['面积', '房间数', '距市中心距离', '楼层']]
y = df['房价']

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

print(f"\n训练集大小: {X_train.shape[0]} 条")
print(f"测试集大小: {X_test.shape[0]} 条")

# ==================== 第五步:训练模型 ====================
model = LinearRegression()
model.fit(X_train, y_train)

# 查看模型学到的参数
print("\n模型学到的系数(每个特征的权重):")
for feature, coef in zip(X.columns, model.coef_):
    print(f"  {feature}: {coef:.4f}")
print(f"  截距: {model.intercept_:.4f}")

# ==================== 第六步:模型预测和评估 ====================
# 在测试集上做预测
y_pred = model.predict(X_test)

# 计算评估指标
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"\n模型评估结果:")
print(f"  MSE(均方误差): {mse:.4f}")
print(f"  MAE(平均绝对误差): {mae:.4f}")
print(f"  R²(决定系数): {r2:.4f}")

# ==================== 第七步:用模型做新数据预测 ====================
# 假设有一个新房子:面积100㎡,3个房间,距市中心5km,10楼
new_house = pd.DataFrame({
    '面积': [100],
    '房间数': [3],
    '距市中心距离': [5],
    '楼层': [10]
})

predicted_price = model.predict(new_house)
print(f"\n预测新房价格: {predicted_price[0]:.2f} 万元")

4.3 代码解读

这段代码虽然不长,但涵盖了机器学习的完整流程:

  1. 数据准备:生成模拟数据,实际项目中你需要从CSV、数据库等地方加载数据
  2. 特征工程:选择哪些列作为特征,哪些作为标签
  3. 数据划分:把数据分成训练集和测试集
  4. 模型训练:调用fit()方法让模型学习规律
  5. 模型评估:用测试集检验模型效果
  6. 模型预测:用训练好的模型预测新数据

实战经验分享:在实际工作中,数据准备和特征工程往往占了80%的时间,模型训练反而很快。这也是为什么AI编程工具越来越重要的原因——用Kiro这样的工具可以帮你快速生成数据处理代码,大幅提升效率。


五、进阶概念速览

当你掌握了上面的基础概念后,以下几个概念也值得了解:

5.1 特征工程(Feature Engineering)

特征工程就是对你选择的特征进行加工处理,让模型学得更好。

常见操作:

操作 说明 代码示例
标准化 把特征缩放到均值为0,标准差为1 StandardScaler().fit_transform(X)
归一化 把特征缩放到[0,1]区间 MinMaxScaler().fit_transform(X)
缺失值处理 填充或删除缺失数据 SimpleImputer().fit_transform(X)
特征编码 把文本类别转为数值 LabelEncoder().fit_transform(X)
from sklearn.preprocessing import StandardScaler

# 标准化示例
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)  # 注意:测试集只用transform

print("标准化前 - 面积均值:", X_train['面积'].mean())
print("标准化后 - 面积均值:", X_train_scaled[:, 0].mean())

5.2 交叉验证(Cross Validation)

交叉验证是更可靠的模型评估方法。把数据分成K份,轮流用其中K-1份训练,1份测试,重复K次。

from sklearn.model_selection import cross_val_score

# 5折交叉验证
scores = cross_val_score(model, X, y, cv=5, scoring='neg_mean_squared_error')
print(f"5折交叉验证MSE: {-scores.mean():.4f} ± {scores.std():.4f}")

5.3 超参数调优(Hyperparameter Tuning)

超参数是你在训练前手动设置的参数(不是模型自己学的)。比如KNN中的K值,决策树的深度。

from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeRegressor

# 定义要搜索的超参数
param_grid = {
    'max_depth': [3, 5, 7, 10],
    'min_samples_split': [2, 5, 10]
}

# 网格搜索
grid_search = GridSearchCV(
    DecisionTreeRegressor(random_state=42),
    param_grid,
    cv=5,
    scoring='neg_mean_squared_error'
)
grid_search.fit(X_train, y_train)

print(f"最佳超参数: {grid_search.best_params_}")
print(f"最佳得分: {-grid_search.best_score_:.4f}")

六、常见问题解答

Q1:学机器学习需要很强的数学基础吗?

不需要一开始就有很强的数学基础。 入门阶段,你只需要理解概念,会调用库就行。等你想深入理解算法原理时,再补线性代数、概率论和微积分也不迟。

我当初学的时候也是先上手写代码,遇到不懂的数学再去查,这样学起来更有动力。

Q2:scikit-learn、TensorFlow、PyTorch该学哪个?

框架 适用场景 学习难度
scikit-learn 传统机器学习(回归、分类、聚类)
TensorFlow 深度学习(工业级部署) 中高
PyTorch 深度学习(学术研究)

建议:零基础先学scikit-learn,搞懂机器学习基础概念后,再学深度学习框架。

Q3:模型效果不好怎么办?

按这个排查清单走:

  1. 检查数据:数据量够不够?有没有错误数据?
  2. 检查特征:选的特征和标签有没有关系?
  3. 检查模型:是不是欠拟合或过拟合?
  4. 调参数:试试不同的超参数组合
  5. 换模型:试试其他算法

Q4:机器学习岗位对代码能力要求高吗?

高。你需要熟练掌握Python,熟悉pandas、numpy等数据处理库。建议平时多刷LeetCode,多写项目。

另外,现在AI编程工具越来越强大,用Kiro这类工具可以帮你快速生成代码框架,但核心逻辑还是需要你自己理解和设计。这也是为什么我一直强调要理解基础概念——工具只是辅助,核心能力还是你自己的。


七、学习建议和下一步路径

7.1 本文学习路径总结

理解基本概念(特征、标签、模型)
        ↓
搭建开发环境(Python + scikit-learn)
        ↓
掌握核心流程(数据准备→训练→评估→预测)
        ↓
完成实战项目(房价预测)
        ↓
学习进阶概念(特征工程、交叉验证、超参数调优)
        ↓
尝试更多算法(决策树、SVM、随机森林)
        ↓
进入深度学习领域(神经网络、CNN、RNN)

7.2 推荐学习资源

资源类型 推荐 说明
书籍 《机器学习》(周志华) 国内经典教材,理论扎实
书籍 《Hands-On ML》(Aurélien Géron) 实战导向,代码丰富
视频 B站吴恩达机器学习课程 入门首选,讲解清晰
实战 Kaggle竞赛 从入门竞赛开始练手
工具 Kiro AI辅助编程,提升开发效率
工具 扣子(Coze) AI应用搭建,拓展AI视野

7.3 避坑指南

根据我3年的工作经验和实战经验,给新手几个忠告:

  1. 不要一上来就啃数学推导。先跑通代码,理解流程,再回头补理论。
  2. 不要只看教程不动手。每学一个概念,就写代码验证一下。
  3. 不要忽视数据质量。垃圾数据进,垃圾结果出(Garbage in, garbage out)。
  4. 不要迷信复杂模型。简单模型+好特征 > 复杂模型+烂特征。
  5. 善用AI工具。用Kiro辅助写代码,用扣子搭建AI应用,用AI编程工具提升效率,但一定要理解底层原理。

总结

恭喜你读到这里!通过这篇文章,你应该已经掌握了:

  • ✅ 机器学习的基本概念(特征、标签、模型、训练、预测)
  • ✅ 监督学习的三大类型
  • ✅ 训练集和测试集的划分
  • ✅ 损失函数和评估指标
  • ✅ 过拟合和欠拟合的理解
  • ✅ 一个完整的实战项目(房价预测)
  • ✅ 特征工程、交叉验证等进阶概念

我当初学的时候,如果有人能给我这么一篇通俗易懂的入门教程,我至少能少走两个月的弯路。希望这篇文章也能帮到你。

机器学习的世界很大,这篇文章只是带你入了个门。接下来,建议你多动手实践,多做项目,多思考。记住,编程是一门手艺活,唯手熟尔

如果这篇文章对你有帮助,欢迎点赞、收藏、转发。有问题可以在评论区留言,我会尽量回复。

我们下期见!👋


作者信息:大厂3年开发经验,B站技术UP主,专注分享实用的编程技术和AI编程****实战经验。关注我,一起成长!

评论 0

最热最新
暂无评论
刘娟Lv.1
0
影响力
0
文章
0
粉丝