查看全课大纲(第 88 / 101 节)
- 1.数据分析基本概念
- 2.学习数据分析的一般路线
- 3.数据分析的流程
- 4.数据类型
- 5.环境部署(1)
- 6.环境部署(2)
- 7.课程介绍
- 8.TXT文件操作
- 9.JSON文件操作
- 10.CSV文件操作
- 11.Excel文件操作
- 12.数据库及SQL常用语法
- 13.数据库基本操作
- 14.数据库多表连接
- 15.实战:欧洲职业足球数据库分析
- 16.爬虫简介
- 17.URL管理模块
- 18.网页下载模块
- 19.网页解析模块(1)
- 20.网页解析模块(2)
- 21.Scrapy简介
- 22.Scrapy使用步骤(1)
- 23.Scrapy使用步骤(2)
- 24.Scrapy使用步骤(3)
- 25.Scrapy使用步骤(4)
- 26.实战:获取国内城市空气质量指数数据
- 27.NumPy和SciPy介绍
- 28.多维数组
- 29.多维数组操作
- 30.NumPy的常用方法
- 31.向量化介绍
- 32.向量化及通用函数
- 33.实战:2016美国大选分析
- 34.数据结构-Series
- 35.数据结构-DataFrame
- 36.数据结构-Index
- 37.Series的索引操作
- 38.DataFrame的索引操作
- 39.索引操作总结
- 40.运算与对齐
- 41.函数应用操作(1) -- map
- 42.函数应用操作 (2) -- apply applymap
- 43.文件读写操作
- 44.排序操作
- 45.数据清洗--处理缺失数据
- 46.数据清洗--处理重复数据
- 47.数据清洗--替换数据
- 48.常用统计方法(1) -- describe quantile
- 49.常用统计方法(2) -- sum mean median count
- 50.常用统计方法(3) -- max min idxmax idxmin
- 51.常用统计方法(4) -- mad var std cumsum
- 52.实战:全球食品数据分析
- 53.层级索引
- 54.分组与聚合介绍
- 55.分组操作(1) -- GroupBy对象及常用聚合操作
- 56.分组操作(2) -- 自定义分组及聚合操作
- 57.透视表介绍
- 58.透视表操作
- 59.数据规整(1) -- 数据合并concat
- 60.数据规整(2) -- 数据连接merge
- 61.数据重构(3) -- 数据重构stack unstack
- 62.实战:互联网电影资料库分析
- 63.探索性数据分析EDA介绍
- 64.EDA的目的
- 65.EDA常用工具
- 66.Matplotlib绘图基本介绍
- 67.Matplotlib画布
- 68.散点图和柱状图的绘制
- 69.直方图的绘制
- 70.矩阵绘图
- 71.子图的使用
- 72.Matplotlib颜色、标记、线型
- 73.Matplotlib坐标刻度、标签、图例、标题
- 74.Seaborn介绍
- 75.数据集分布可视化(1) -- 单变量分布、双变量分布
- 76.数据集分布可视化(2) -- 变量关系可视化
- 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
- 78.交互式数据可视化工具Bokeh介绍
- 79.Bokeh绘制散点图、柱状图、盒子图、弦图
- 80.Bokeh绘制常用图形元素
- 81.3D绘图 -- mplot3d
- 82.3D曲线可视化
- 83.3D散点图可视化
- 84.3D柱状图可视化
- 85.Pandas绘图
- 86.实战:Lending Club借贷数据探索性分析及可视化
- 87.机器学习介绍及应用场景
- 88.机器学习建模介绍 (1) -- 分类
- 89.机器学习建模介绍 (2) -- 回归
- 90.机器学习建模介绍 (3) -- 聚类
- 91.机器学习分类
- 92.机器学习工具scikit-learn
- 93.使用scikit-learn的流程
- 94.数据集准备及划分
- 95.模型选择
- 96.数据预处理及特征工程
- 97.过拟合与欠拟合
- 98.模型调参介绍
- 99.模型调参方法
- 100.模型测试及评价
- 101.实战:通过移动设备行为数据预测性别和年龄
机器学习建模介绍 (1) -- 分类
约 10 分钟
机器学习建模介绍:分类算法
小象实战讲义 · Python数据分析实战
在上一节,我们了解了机器学习的基本概念和流程。本节我们将深入机器学习建模的第一类核心算法:分类算法。你将理解分类算法的核心思想、典型应用场景,并通过一个经典的鸢尾花分类案例,直观地看到模型是如何在数据空间中“画出”分类边界,从而对新数据进行预测的。
💡 核心导读
- 分类算法是什么:将数据样本映射到预先定义的类别标签的算法。
- 典型应用场景:人脸识别、垃圾邮件检测、信用风险评估等。
- 核心原理:基于历史数据(带标签)学习一个分类边界或区域。
- 可视化理解:通过二维空间的分类边界图,直观理解高维分类问题。
- 思维训练:学会将高维复杂问题简化为低维直观问题来理解。
分类算法概述
机器学习算法种类繁多,根据任务目标,主要可以分为以下几类:
- 分类:预测数据样本所属的离散类别。
- 回归:预测数据样本的连续数值。
- 聚类:将数据样本自动分组,无需预先定义类别。
- 时序分析:分析与时间序列相关的模式和预测。
其中,分类、回归和聚类是应用最广泛的三大类算法。本节我们聚焦于分类算法。
什么是分类算法?
分类算法的核心任务是:将具有某些特征的数据项,映射到一个预先定义好的类别标签上。
这个过程可以理解为建立一个从“特征空间”到“类别空间”的映射函数。要完成这个映射,我们需要两类信息:
- 数据:即样本的特征。例如,一张人脸的像素矩阵、一封邮件的文本内容、一个信用卡申请人的年收入和贷款记录等。
- 标签:即数据对应的类别。例如,人脸对应的姓名ID、邮件是否为垃圾邮件、申请人的信用风险等级(高/中/低)。
在模型训练阶段,我们提供大量“数据-标签”对,让算法去学习它们之间的关联规律。训练完成后,当一个新的、未知类别的数据到来时,模型就能根据其特征,预测出它最可能属于哪个类别。
分类算法的应用场景
分类算法在实际生活中应用极其广泛:
- 人脸识别:系统通过训练阶段录入的多角度人脸图片(数据)及其对应身份(标签),学习如何将新的人脸图像正确归类到某个身份。
- 垃圾邮件检测:模型通过学习大量已标记为“垃圾邮件”和“正常邮件”的邮件内容(数据),识别出垃圾邮件的关键词或模式特征,从而对新邮件进行分类。
- 信用卡申请风险评估:银行根据历史申请人的信息(如收入、负债、信用记录等作为数据)和其后续的还款表现(如“低风险”、“高风险”作为标签),训练模型来预测新申请人的风险等级。
这些应用都遵循同一个模式:基于历史经验(带标签数据)学习规律,并对新情况做出判断(预测类别)。
分类原理的可视化理解
为了直观理解分类,我们通常将其放在一个坐标空间中进行思考。假设我们只有两个特征,那么每个样本就可以用这个二维空间中的一个点来表示。
import matplotlib.pyplot as plt
import numpy as np
# 设置无界面后端,保证代码在任何环境可运行
plt.switch_backend('Agg')
# 模拟两类数据:圆圈和叉叉
np.random.seed(42) # 固定随机种子,保证每次运行结果一致
# 生成第一类数据(圆圈类,标签为0)
class0_x = np.random.normal(2, 0.8, 30)
class0_y = np.random.normal(3, 0.8, 30)
# 生成第二类数据(叉叉类,标签为1)
class1_x = np.random.normal(5, 0.8, 30)
class1_y = np.random.normal(5, 0.8, 30)
fig, ax = plt.subplots(figsize=(8, 6))
# 绘制第一类数据点,用圆圈表示
ax.scatter(class0_x, class0_y, c='blue', marker='o', label='类别 A (圆圈)', alpha=0.7)
# 绘制第二类数据点,用叉叉表示
ax.scatter(class1_x, class1_y, c='red', marker='x', label='类别 B (叉叉)', alpha=0.7)
# 假设模型学习到了一个分类边界(这里用一条直线简单模拟)
# 边界线方程: y = -x + 7
boundary_x = np.array([0, 7])
boundary_y = -boundary_x + 7
ax.plot(boundary_x, boundary_y, 'k--', linewidth=2, label='分类边界')
# 模拟一个新样本点
new_point_x, new_point_y = 1.5, 2.8
ax.scatter(new_point_x, new_point_y, c='green', marker='s', s=150, label='新样本', edgecolors='black', linewidth=1.5)
ax.set_xlabel('特征 X1')
ax.set_ylabel('特征 X2')
ax.set_title('分类算法原理示意图')
ax.legend()
ax.grid(True, linestyle='--', alpha=0.5)
# 在实际讲义中,这里不会执行savefig,仅作演示说明
# plt.savefig('classification_boundary.png')
plt.close(fig)
print("分类示意图已生成。新样本点位于分类边界的左侧区域。")分类示意图已生成。新样本点位于分类边界的左侧区域。在上面的示意图中:
- 蓝色圆圈和红色叉叉代表两类已知的训练数据。
- 黑色虚线是模型学习到的分类边界,它试图将两类数据尽可能分开。
- 绿色方块代表一个新来的样本,我们不知道它属于哪一类。
- 根据其位置(落在边界左侧),模型会将其预测为蓝色圆圈类(类别 A)。
模型训练的本质:就是寻找最优的分类边界(在二维是线或曲线,在三维是面,在高维是超平面),使得训练数据尽可能被正确划分。
模型预测的本质:将新样本点放入这个训练好的空间,看它落在哪个类别区域内,就将其归为哪一类。
案例:鸢尾花分类
我们用一个更真实的例子——经典的鸢尾花(Iris)数据集来加深理解。该数据集包含150个样本,每个样本有4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和1个标签(鸢尾花品种:Setosa, Versicolor, Virginica)。
为了可视化,我们选取其中两个特征(花瓣长度和花瓣宽度)来绘制。
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
plt.switch_backend('Agg')
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data[:, 2:4] # 只取花瓣长度(第3列)和花瓣宽度(第4列)两个特征
y = iris.target # 标签
target_names = iris.target_names
# 为每个类别指定颜色和标记
colors = ['red', 'green', 'blue']
markers = ['o', '^', 's']
fig, ax = plt.subplots(figsize=(10, 7))
# 绘制每个类别的散点图
for i, (color, marker, name) in enumerate(zip(colors, markers, target_names)):
ax.scatter(X[y == i, 0], X[y == i, 1],
c=color, marker=marker, label=name, alpha=0.7, edgecolors='w', linewidth=0.5)
ax.set_xlabel('花瓣长度 (cm)')
ax.set_ylabel('花瓣宽度 (cm)')
ax.set_title('鸢尾花数据集散点图(按品种分类)')
ax.legend(title='品种')
ax.grid(True, linestyle='--', alpha=0.3)
# 为了演示,我们手动绘制一些示意性的分类区域边界(非真实模型生成)
# 这仅用于帮助理解“区域”的概念
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
np.arange(y_min, y_max, 0.02))
# 简单模拟一个分类区域(实际模型边界会更复杂)
from matplotlib.patches import Polygon
# 模拟Setosa的大致区域
setosa_zone = Polygon([(1, 0.1), (1.8, 0.1), (1.8, 0.6), (1, 0.6)],
closed=True, alpha=0.1, color='red', label='Setosa区域示意')
ax.add_patch(setosa_zone)
# 模拟Versicolor和Virginica的大致分界
ax.plot([3, 7], [0.8, 2.5], 'k--', linewidth=1, alpha=0.5, label='分类边界示意')
ax.set_xlim(x_min, x_max)
ax.set_ylim(y_min, y_max)
ax.legend(loc='upper left')
plt.close(fig)
print("鸢尾花数据可视化完成。图中红色半透明区域示意Setosa品种的分布范围,黑色虚线示意Versicolor和Virginica的大致分界。")鸢尾花数据可视化完成。图中红色半透明区域示意Setosa品种的分布范围,黑色虚线示意Versicolor和Virginica的大致分界。通过这个二维视图,我们可以清晰地看到:
- 数据分布:Setosa(红色圆圈)的花瓣尺寸明显较小,与其他两类区分度很高。Versicolor(绿色三角)和Virginica(蓝色方块)则有部分重叠。
- 分类任务:机器学习模型的任务就是学习出能区分这三类花的“边界”。对于Setosa,很容易找到一个区域将其圈出。对于Versicolor和Virginica,则需要一条更复杂的曲线(图中虚线示意)来划分。
- 预测过程:如果新来一朵花,我们测量其花瓣长和宽,并在图中标出这个点。它落在哪个区域,我们就预测它属于哪个品种。
- 不完美性:注意到蓝色方块(Virginica)有些点落在了绿色区域(Versicolor示意区域),这意味着即使是最好的模型,也可能无法做到100%准确分类,因为数据本身存在重叠。模型需要在“拟合训练数据”和“泛化到新数据”之间取得平衡。
从低维理解到高维抽象
你可能会问:上面只是两个特征(二维),如果鸢尾花有四个特征(四维),或者人脸识别有上千个特征(上千维)怎么办?我们无法想象高维空间。
这正是机器学习中重要的思维方式:
- 低维理解:先在二维或三维这种可直观想象的空间里,把分类的核心思想(学习边界、根据区域判断)理解透彻。
- 数学抽象:用数学语言(向量、矩阵、距离、概率等)将低维空间中的“点”、“线”、“面”、“区域”等概念,严格地推广到高维空间,定义出“高维空间中的点”、“超平面”、“决策区域”等。
- 算法实现:计算机不依赖视觉,它直接处理高维向量和矩阵运算。只要数学定义是清晰的,算法就能在高维空间执行分类任务。
所以,当你面对一个高维分类问题感到困惑时,不妨尝试将其降维思考。例如,一个100维的数据点分类,可以想象成在100个特征中,找到最关键的几个特征,在二维投影图上观察其分布规律。理解低维的原理,是掌握高维算法的基础。
📝 动手练一练
概念辨析:分类算法和聚类算法最主要的区别是什么?
👉 点击查看参考答案
最主要的区别在于是否需要预先知道数据的类别标签。
- 分类算法是有监督学习,训练数据必须包含特征和对应的已知类别标签。模型学习从特征到标签的映射关系,用于预测新数据的类别。
- 聚类算法是无监督学习,训练数据只有特征,没有标签。模型的任务是自行发现数据中的内在分组结构,将相似的数据聚在一起。
动手实践:假设我们有一个更简单的数据集,只有1个特征(X)和2个类别(0和1)。部分数据如下:(X=1, 标签=0), (X=2, 标签=0), (X=4, 标签=1), (X=5, 标签=1)。请思考,如果用一个最简单的“阈值”作为分类边界(例如,X < 3 则为类别0,否则为类别1),这个边界能完美分开数据吗?如果新来一个样本 X=3.5,模型会如何预测?
👉 点击查看参考答案
- 评估边界:阈值设为3时,数据点 (1,0), (2,0) 的 X<3,被划为类别0,正确。(4,1), (5,1) 的 X>3,被划为类别1,正确。因此,这个简单的阈值边界能完美分开给定的训练数据。
- 预测新样本:对于新样本 X=3.5,因为 3.5 > 3,所以模型会将其预测为类别1。 注意:这是一个极度简化的例子。现实中数据更复杂,很难用一个阈值完美分开,且需要更多数据来验证边界是否合理。
本章小结
本节我们开启了机器学习建模的第一扇门——分类算法。我们不仅了解了它的定义和广泛应用,更重要的是,通过可视化的方式,直观理解了分类模型“学习边界、划分区域”的核心思想,并学会了用从低维到高维的抽象思维来理解复杂问题。
📋 行动清单
- 理解核心:能用自己的话复述分类算法的原理(数据+标签 -> 学习映射 -> 预测新数据类别)。
- 可视化思维:面对一个分类问题,尝试思考如果只取两个最重要的特征,数据点在二维图上可能会如何分布,边界可能是什么形状。
- 准备工具:确保你的Python环境中已安装好
scikit-learn库(pip install scikit-learn),我们将在接下来的实战中用它来构建真正的分类模型。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载本节课件:机器学习建模介绍 (1) -- 分类PDF · 364KB
- 下载全套课件打包(第1-5章)ZIP · 12.8MB
- 下载全套课件打包(第6-8章)ZIP · 15MB
- 下载实战数据集:AppleStore 应用商城分析ZIP · 329KB
- 下载实战数据集:女性服装电商分析ZIP · 2.8MB
- 下载Python 数据分析环境搭建指南PDF · 2MB
- 下载Scrapy 安装教程PDF · 12.7MB
- 下载附加实战项目:AppleStore 应用商城数据分析ZIP · 0.3MB · ipynb + CSV 数据
- 下载附加实战项目:银行电话营销数据分析ZIP · 0.4MB · ipynb + CSV 数据
- 下载附加实战项目:女性服装电商评论数据分析ZIP · 2.7MB · ipynb + CSV 数据
- 下载附加实战项目:美国化学学会杂志数据分析ZIP · 34.2MB · ipynb + SQLite 数据库