查看全课大纲(第 92 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

机器学习工具scikit-learn

约 4 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · Python数据分析实战

在掌握了数据分析的基础工具和流程后,我们即将迈入一个更广阔的领域:机器学习。机器学习算法看似复杂,但得益于成熟的工具库,我们能够高效地将其应用于实际问题。本节将介绍 Python 中最重要、最易用的机器学习库——scikit-learn,了解它的核心功能、设计哲学以及如何帮助我们快速构建和部署模型。

💡 核心导读

  • scikit-learn 是什么:一个面向 Python 的免费、开源的机器学习库。
  • 核心功能:集成了分类、回归、聚类等经典算法,以及数据预处理、特征工程、模型评估等全套工具。
  • 设计哲学:提供统一、简洁的 API 接口,让用户专注于模型应用而非底层实现。
  • 生态与价值:支持 NumPy 和 SciPy 数据结构,被众多知名产品级应用所采用。

为什么需要 scikit-learn?

在机器学习领域,算法原理的推导和实现是复杂且耗时的。然而,对于大多数数据分析师和应用开发者而言,我们的目标并非从零开始发明算法,而是利用现有的、经过验证的工具来解决业务问题。

这就好比我们驾驶汽车,无需从制造发动机和轮胎开始,而是直接使用已经造好的、性能可靠的整车。scikit-learn 正是这样一个“造好的轮子”和“造好的汽车”。它封装了大量经典的机器学习算法,提供了统一、简洁的编程接口。我们只需要几行代码,就能引入并应用一个复杂的算法,例如支持向量机(SVM):

# 示例:引入支持向量机分类器
from sklearn.svm import SVC
# 后续即可使用 SVC() 创建模型并进行训练、预测

这种“拿来即用”的方式极大地提升了开发效率,让我们能够将精力集中在问题定义、数据准备和结果分析上,而非算法的底层实现细节。

认识 scikit-learn

scikit-learn 是一个基于 Python 语言的免费开源机器学习库。它建立在 NumPy、SciPy 和 matplotlib 之上,为数据挖掘和数据分析提供了简单高效的工具。

核心特性

  1. 全面的算法覆盖:scikit-learn 包含了机器学习中几乎所有经典和常用的算法。
    • 监督学习:如用于分类的支持向量机(SVM)、随机森林(Random Forest)、K近邻(KNN);用于回归的线性回归、岭回归等。
    • 无监督学习:如用于聚类的 K-Means、层次聚类;用于降维的主成分分析(PCA)、t-SNE 等。
  2. 完整的工具链:除了核心算法,scikit-learn 还提供了机器学习流程中各个环节所需的工具。
    • 数据预处理:标准化、归一化、缺失值填充、编码分类变量等。
    • 模型选择:交叉验证、超参数调优(网格搜索、随机搜索)。
    • 评估指标:准确率、精确率、召回率、F1分数、均方误差等。
  3. 统一的 API 设计:scikit-learn 最受赞誉的特点是其一致性。几乎所有模型都遵循 fit、predict、score 等核心方法,学习成本低,易于记忆和使用。
  4. 优秀的文档与社区:scikit-learn 拥有极其详细、清晰的官方文档,包含大量示例和算法原理的简要说明,是绝佳的学习资源。

与 NumPy/Pandas 的无缝衔接

scikit-learn 的核心数据输入格式是 NumPy 数组(numpy.ndarray)。这正好与我们之前学习的 Pandas 和 NumPy 无缝衔接。我们通常使用 Pandas 进行数据加载和清洗,然后将需要的特征列转换为 NumPy 数组,输入给 scikit-learn 模型。

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

# 在代码块内构造一个简单的示例数据
data = {
    'feature1': [1, 2, 3, 4, 5],
    'feature2': [2, 4, 5, 4, 5],
    'target': [3, 5, 7, 8, 10]
}
df = pd.DataFrame(data)

# 从 Pandas DataFrame 中提取特征和目标,并转换为 NumPy 数组
X = df[['feature1', 'feature2']].to_numpy()  # 特征矩阵
y = df['target'].to_numpy()                  # 目标向量

# 创建并训练线性回归模型
model = LinearRegression()
model.fit(X, y)  # scikit-learn 的标准拟合接口

# 查看模型学到的系数和截距
print(f"模型系数: {model.coef_}")
print(f"模型截距: {model.intercept_:.2f}")
模型系数: [1.5        0.33333333]
模型截距: 0.77

广泛的应用与认可

scikit-learn 不仅是一个教学和研究工具,它因其稳定性和高效性,被许多知名公司和产品用于生产环境,支撑着核心的推荐、分类和预测功能。例如:

  • Spotify:用于音乐推荐。
  • Evernote:用于笔记分类和内容分析。
  • Booking.com:用于酒店预订和价格预测。

这表明,一个免费、易用的库,完全有能力成为产品级应用的后台算法支柱。

scikit-learn 的基本使用模式

尽管 scikit-learn 包含众多算法,但它们的使用遵循一个高度统一的模式,通常包含以下步骤:

  1. 数据准备:将数据整理为特征矩阵 X(通常为二维 NumPy 数组)和目标向量 y(一维数组)。
  2. 数据划分:将数据集划分为训练集和测试集,以评估模型在未见数据上的性能。
  3. 模型选择与实例化:选择一个算法类,并创建它的一个实例(可以设置初始参数)。
  4. 模型训练:调用模型的 .fit(X_train, y_train) 方法,在训练集上学习规律。
  5. 模型预测:调用 .predict(X_test) 方法,对测试集进行预测。
  6. 模型评估:将预测结果 y_pred 与真实值 y_test 比较,使用评估指标量化模型性能。
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 1. 准备数据:构造一个简单的分类数据集
X = [[1, 2], [2, 3], [3, 1], [6, 5], [7, 7], [8, 6]]
y = [0, 0, 0, 1, 1, 1]  # 类别标签

# 2. 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

# 3. 选择并实例化模型(这里使用K近邻分类器,设置邻居数k=3)
model = KNeighborsClassifier(n_neighbors=3)

# 4. 训练模型
model.fit(X_train, y_train)

# 5. 进行预测
y_pred = model.predict(X_test)

# 6. 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"测试集上的预测结果: {y_pred}")
print(f"模型准确率: {accuracy:.2f}")
测试集上的预测结果: [1 1]
模型准确率: 0.00

📝 动手练一练

  1. 概念辨析:scikit-learn 的 .fit()、.predict() 和 .score() 方法分别对应机器学习流程中的哪个环节?它们通常接收什么参数,返回什么结果?
👉 点击查看参考答案
  • .fit(X_train, y_train):对应模型训练环节。它接收训练集的特征矩阵 X_train 和目标向量 y_train,让模型从数据中学习规律。该方法通常返回模型对象本身(允许链式调用),但主要作用是更新模型内部状态(如系数、决策树结构等)。
  • .predict(X_new):对应模型预测环节。它接收新的特征数据 X_new(可以是单条样本或多条),基于训练好的模型返回预测的目标值(分类的类别或回归的数值)。
  • .score(X_test, y_test):对应模型评估环节。它接收测试集的特征 X_test 和真实目标 y_test,内部会先调用 .predict(X_test) 得到预测值,然后与 y_test 计算一个默认的评估分数(如分类器的准确率、回归器的 R² 分数),并返回该分数值。这是一个便捷的评估方法。
  1. 代码实践:将上面 KNN 分类器的示例代码中的 n_neighbors 参数从 3 改为 1,重新运行代码。观察并思考,预测结果和准确率发生了变化吗?这说明了什么?
👉 点击查看参考答案
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

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

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

# 将 n_neighbors 改为 1
model = KNeighborsClassifier(n_neighbors=1)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)

print(f"当 n_neighbors=1 时,测试集预测结果: {y_pred}")
print(f"模型准确率: {accuracy:.2f}")

运行后,输出将变为:

当 n_neighbors=1 时,测试集预测结果: [0 0]
模型准确率: 1.00

可以看到,在本例中把 n_neighbors 从 3 改为 1 后,预测结果和准确率都发生了变化(与本节前文 k=3 时预测 [1 1]、准确率 0.00 的结果对比)。这说明了一个重要概念:超参数。n_neighbors 是 KNN 算法的一个超参数,它不由数据学习得到,而是需要我们在训练前手动设定。不同的超参数值可能导致模型复杂度、泛化能力(在未知数据上的表现)的巨大差异。在实际项目中,我们需要通过交叉验证等技术来选择合适的超参数。

本章小结

本节作为机器学习之旅的“工具介绍站”,重点讲解了 scikit-learn 这一核心库。我们了解到,scikit-learn 通过提供统一、简洁的 API,将复杂的机器学习算法变成了易于调用的“黑盒”工具,极大地降低了应用门槛。它丰富的算法库、完整的机器学习流程支持以及强大的社区生态,使其成为 Python 数据分析师和机器学习实践者的必备技能。

📋 行动清单

学完本节,你可以立即开始:

  • 访问 scikit-learn 官网,浏览其文档结构,特别是 API Reference 和 User Guide。
  • 在本地环境安装并验证 scikit-learn,尝试运行本节中的两个示例代码块,确保环境配置正确。
  • 思考一个你感兴趣的业务问题(例如:根据历史数据预测销量、对客户评论进行情感分类),并初步判断它可能属于哪类机器学习问题(分类、回归还是聚类),为后续动手实践做准备。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:机器学习工具scikit-learn
    PDF · 243KB
    下载
  • 全套课件打包(第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 数据库
    下载