查看全课大纲(第 92 / 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.实战:通过移动设备行为数据预测性别和年龄
机器学习工具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 之上,为数据挖掘和数据分析提供了简单高效的工具。
核心特性
- 全面的算法覆盖:scikit-learn 包含了机器学习中几乎所有经典和常用的算法。
- 监督学习:如用于分类的支持向量机(SVM)、随机森林(Random Forest)、K近邻(KNN);用于回归的线性回归、岭回归等。
- 无监督学习:如用于聚类的 K-Means、层次聚类;用于降维的主成分分析(PCA)、t-SNE 等。
- 完整的工具链:除了核心算法,scikit-learn 还提供了机器学习流程中各个环节所需的工具。
- 数据预处理:标准化、归一化、缺失值填充、编码分类变量等。
- 模型选择:交叉验证、超参数调优(网格搜索、随机搜索)。
- 评估指标:准确率、精确率、召回率、F1分数、均方误差等。
- 统一的 API 设计:scikit-learn 最受赞誉的特点是其一致性。几乎所有模型都遵循
fit、predict、score等核心方法,学习成本低,易于记忆和使用。 - 优秀的文档与社区: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 包含众多算法,但它们的使用遵循一个高度统一的模式,通常包含以下步骤:
- 数据准备:将数据整理为特征矩阵
X(通常为二维 NumPy 数组)和目标向量y(一维数组)。 - 数据划分:将数据集划分为训练集和测试集,以评估模型在未见数据上的性能。
- 模型选择与实例化:选择一个算法类,并创建它的一个实例(可以设置初始参数)。
- 模型训练:调用模型的
.fit(X_train, y_train)方法,在训练集上学习规律。 - 模型预测:调用
.predict(X_test)方法,对测试集进行预测。 - 模型评估:将预测结果
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📝 动手练一练
- 概念辨析: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² 分数),并返回该分数值。这是一个便捷的评估方法。
- 代码实践:将上面 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-learnPDF · 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 数据库