datascience
datascience 是一个汇集数据科学学习资源的开源项目,旨在为初学者提供一条清晰的知识进阶路径。它解决了学习者在面对海量零散资料时难以构建系统知识体系的问题。通过这份详细的路线图,项目将数据科学的核心领域拆解为数学基础、算法复杂度及数据库原理等模块,涵盖矩阵运算、哈希函数、Big O 表示法以及 SQL 各类连接操作等关键内容。
其独特的技术亮点在于图文并茂地解释抽象概念,例如用示意图展示二叉树结构或自然连接流程,并辅以具体的代码请求示例,让理论学习更加直观。这非常适合希望转型数据领域的学生、需要夯实基础的初级开发者,以及从事数据分析的研究人员。无论你是想查漏补缺还是从零开始规划学习路线,datascience 都能帮助你高效梳理核心技能,快速入门数据科学世界。
使用场景
背景:某电商公司数据团队的新成员小李,需要在入职首周快速掌握数据处理所需的数学原理与 SQL 查询基础,以便顺利接手业务报表。
没有 datascience 时
- 网络资源杂乱无章,难以辨别矩阵运算与线性代数基础知识的正确性
- 经常搞混自然连接与内连接的实际执行逻辑及最终返回结果的差异
- 面对哈希函数映射和大 O 复杂度等抽象概念,缺乏直观的图文辅助说明
- 学习路径完全靠个人摸索,导致大量宝贵时间耗费在筛选无效资料上
使用 datascience 后
- 依据 Roadmap 规划,按顺序攻克从基础代数到数据库查询的系统课程
- 直接复用仓库中提供的标准 SQL 语句模板,大幅减少日常语法编写错误
- 借助 Wiki 风格的图文说明,快速理解二叉树结构与算法运行复杂度
- 建立统一的术语标准,有效避免在不同文档间切换造成的认知割裂感
核心价值:datascience 通过整合高质量免费资源,显著降低了数据科学入门者的知识构建门槛与时间成本,助力新人快速上手。
运行环境要求
- 未说明
未说明
未说明

快速开始
数据科学家路线图 (2021)

1_ 基础
1_ 矩阵与代数基础
关于
在数学中,矩阵是__按行和列排列的数字、符号或表达式的矩形数组__。矩阵可以通过删除任意数量的行和/或列简化为子矩阵。
操作
有许多基本操作可用于修改矩阵:
2_ 哈希函数、二叉树、O(n)
哈希函数 (Hash function)
定义
哈希函数是__任何可以将任意大小的数据映射到固定大小数据的函数__。一种用途是称为哈希表的数据结构,广泛用于计算机软件中的快速数据查找。哈希函数通过检测大型文件中的重复记录来加速表或数据库查找。
二叉树
定义
在计算机科学中,二叉树是__一种每个节点最多有两个子节点的树数据结构__,分别称为左子节点和右子节点。
O(n)
定义
在计算机科学中,大 O 表示法 (Big O notation) 用于__根据算法的运行时间或空间需求随输入规模增长的方式对算法进行分类__。在解析数论中,大 O 表示法通常用于__表达算术函数与其更好理解的近似值之间的界限__。
3_ 关系代数、数据库基础
定义
关系代数 (Relational algebra) 是一族具有__用于建模存储在关系数据库中的数据并定义其上查询的良好语义的代数__。
关系代数的主要应用是为__关系数据库__提供理论基础,特别是此类数据库的查询语言,其中最主要的是 SQL。
自然连接
关于
在 SQL 语言中,如果满足以下条件,两个表之间将进行自然连接:
- 至少有一列在两个表中名称相同
- 这两列具有相同的数据类型
- CHAR (字符)
- INT (整数)
- FLOAT (浮点数值数据)
- VARCHAR (长字符串)
MySQL 请求
SELECT <COLUMNS>
FROM <TABLE_1>
NATURAL JOIN <TABLE_2>
SELECT <COLUMNS>
FROM <TABLE_1>, <TABLE_2>
WHERE TABLE_1.ID = TABLE_2.ID
4_ 内连接、外连接、交叉连接、theta 连接
内连接
INNER JOIN 关键字选择两个表中具有匹配值的记录。
查询语句
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;

外连接
FULL OUTER JOIN 关键字在左表 (table1) 或右表 (table2) 的记录中存在匹配时返回所有记录。
查询语句
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

左连接
LEFT JOIN 关键字返回左表 (table1) 中的所有记录,以及右表 (table2) 中的匹配记录。如果没有匹配,右侧的结果为 NULL。
查询语句
SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;

右连接
RIGHT JOIN 关键字返回右表 (table2) 中的所有记录,以及左表 (table1) 中的匹配记录。当没有匹配时,左侧的结果为 NULL。
查询语句
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;

5_ CAP 定理
分布式数据存储无法同时提供以下三个保证中的两个以上:
- 每个读取都收到最新的写入或错误。
- 每个请求都收到(非错误)响应——但不保证包含最新写入。
- 尽管节点之间的网络丢弃(或延迟)了任意数量的消息,系统仍继续运行。
换句话说,CAP 定理指出,在网络分区存在的情况下,必须在一致性和可用性之间做出选择。注意,CAP 定理中定义的一致性不同于 ACID 数据库事务中保证的一致性。
6_ 表格数据
表格数据与__关系__数据(如 SQL 数据库)相对。
在表格数据中,所有内容都按列和行排列。每一行都有相同数量的列(缺失值除外,可用"N/A"代替)。
表格数据的__第一行__通常是__标题__,描述每列的内容。
数据科学中最常用的表格数据格式是__CSV___。每列都被一个字符(制表符、逗号等)包围,将此列与其两个邻居分隔开。
7_ 熵
熵是__不确定性的度量__。高熵意味着数据具有高方差,因此包含大量信息和/或噪声。
例如,对于所有 x 都为 f(x) = 4 的常数函数没有熵且易于预测,信息量少,没有噪声,可以简洁表示。类似地,f(x) = ~4 有一些熵,而 f(x) = 随机数由于噪声而具有非常高的熵。
8_ 数据框与序列
数据框用于存储数据表。它是长度相等的向量列表。
序列是有序的数据点系列。
9_ 分片 (Sharding)
分片 (Sharding) 是水平(按行)数据库分区,与垂直(按列)分区(即规范化)相对。
为什么要使用分片?
拥有大型数据集或高吞吐量应用程序的数据库系统可能会挑战单台服务器的容量。
应对增长的两种方法:垂直扩展和水平扩展。
垂直扩展 (Vertical Scaling)
- 涉及增加单台服务器的容量。
- 但由于技术和经济限制,单台机器可能不足以应付给定的工作负载。
水平扩展 (Horizontal Scaling)
- 涉及将数据集和负载分散到多台服务器上,根据需要添加额外的服务器以增加容量。
- 虽然单台机器的整体速度或容量可能不高,但每台机器处理整体工作负载的一个子集,可能比单台高速大容量服务器提供更好的效率。
- 理念是利用分布式系统的概念来实现扩展。
- 但它也伴随着分布式系统固有的复杂性增加的权衡。
- 许多数据库系统通过分片数据集提供水平扩展。
10_ 联机分析处理 (OLAP)
联机分析处理,或称 OLAP,是一种在计算中快速回答多维分析 (MDA) 查询的方法。
OLAP 属于 更广泛的商业智能类别,其中包括关系型数据库、报告编写和数据挖掘。OLAP 的典型应用包括 _销售业务报告、营销、管理报告、业务流程管理 (BPM)、预算和预测、财务报告及类似领域,新的应用也在不断涌现,例如农业。
OLAP 一词是对传统数据库术语在线事务处理 (OLTP) 的轻微修改。
11_ 多维数据模型
12_ ETL
抽取 (Extract)
- 从多个异构源系统中提取数据。
- 数据验证,以确认拉取的数据在给定的域中具有正确/预期的值。
转换 (Transform)
- 提取的数据被送入管道,对数据应用多种函数。
- 这些函数的意图是将数据转换为最终系统接受的格式。
- 涉及清理数据以去除噪声、异常值和冗余数据。
加载 (Load)
- 将转换后的数据加载到最终目标。
13_ 报表 vs 商业智能 vs 分析
14_ JSON 和 XML
JSON
JSON 是一种语言无关的数据格式。描述一个人的示例: { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" }, { "type": "mobile", "number": "123 456-7890" } ], "children": [], "spouse": null }
XML
可扩展标记语言 (XML) 是一种标记语言,它定义了一组规则,用于将文档编码为既对人类可读又对机器可读的格式。
<CATALOG>
<PLANT>
<COMMON>Bloodroot</COMMON>
<BOTANICAL>Sanguinaria canadensis</BOTANICAL>
<ZONE>4</ZONE>
<LIGHT>Mostly Shady</LIGHT>
<PRICE>$2.44</PRICE>
<AVAILABILITY>031599</AVAILABILITY>
</PLANT>
<PLANT>
<COMMON>Columbine</COMMON>
<BOTANICAL>Aquilegia canadensis</BOTANICAL>
<ZONE>3</ZONE>
<LIGHT>Mostly Shady</LIGHT>
<PRICE>$9.37</PRICE>
<AVAILABILITY>030699</AVAILABILITY>
</PLANT>
<PLANT>
<COMMON>Marsh Marigold</COMMON>
<BOTANICAL>Caltha palustris</BOTANICAL>
<ZONE>4</ZONE>
<LIGHT>Mostly Sunny</LIGHT>
<PRICE>$6.81</PRICE>
<AVAILABILITY>051799</AVAILABILITY>
</PLANT>
</CATALOG>
15_ NoSQL
NoSQL 与关系型数据库相对(代表 __N__ot __O__nly SQL)。数据未结构化,且表之间没有键的概念。
任何类型的数据都可以存储在 NoSQL 数据库中(JSON, CSV, ...),而无需考虑复杂的关系模式。
常用的 NoSQL 技术栈:Cassandra, MongoDB, Redis, Oracle noSQL ...
16_ 正则表达式 (Regex)
简介
__正__则__表__达式 (regex) 常用于计算机科学。
它可以用于广泛的可能性:
- 文本替换
- 从文本中提取信息(电子邮件、电话号码等)
- 列出具有 .txt 扩展名的文件 ..
http://regexr.com/ 是一个用于实验正则表达式的优秀网站。
使用方法
要在 Python 中使用它们,只需导入:
import re
17_ 供应商格局
18_ 环境设置
2_ 统计学
1_ 选择一个数据集
数据集仓库
通用
医疗
其他语言
法语
2_ 描述性统计
均值 (Mean)
在概率论和统计学中,总体均值和期望值通常互换使用,指代由该分布表征的概率分布或随机变量的__集中趋势度量之一__。
对于数据集,术语算术平均数、数学期望,有时也称为平均值,互换使用以指代离散数值集的中央值:具体来说,是__数值之和除以数值个数__。
中位数 (Median)
中位数是__分隔数据样本、总体或概率分布的上半部分与下半部分的值__。简单来说,它可以被视为数据集的“中间”值。
Python 中的描述性统计
Numpy 是一个广泛用于统计分析的 Python 库。
安装
pip3 install numpy
使用
import numpy
3_ 探索性数据分析
此步骤包括数据的可视化和分析。
原始数据可能存在不合理的分布,这可能会导致后续问题。
此外,在应用过程中,我们也必须了解数据的分布情况,例如数据是线性分布还是螺旋状分布。
Python 库
用于在 Python 中绘制图表的库
安装:
pip3 install matplotlib
使用方法:
import matplotlib.pyplot as plt
用于处理 Python 中大数据集的库
安装:
pip3 install pandas
使用方法:
import pandas as pd
Python 中的又一个图形绘制库。
安装:
pip3 install seaborn
使用方法:
import seaborn as sns
PCA
PCA 代表主成分分析(Principal Component Analysis)。
正如我们之前所见,我们经常需要了解数据分布的形状。我们需要为此绘制数据图。
数据可以是多维的,也就是说,一个数据集可以拥有多个特征。
我们只能绘制二维数据,因此,对于多维数据,我们将多维分布投影到两个维度上,保留分布的主成分,以便通过二维图了解实际分布的情况。
它也用于降维。通常可以看到,某些特征并没有对数据分布提供重要的见解。这些特征增加了复杂性并提高了数据的维度。不考虑这些特征会导致数据维度的降低。
4_ 直方图
直方图是数值数据分布的表示。该过程包括使用范围划分对数值进行分箱,即数据变化的整个范围被分成几个固定的区间。表示的是落在分箱范围内的数字出现的次数或频率。
![]()
在 Python 中,Pandas、Matplotlib、Seaborn 可以用来创建直方图。
5_ 百分位数与异常值
百分位数
百分位数是统计学中的数值度量,表示在数值数据分布中,有多少或百分之多少的数据低于给定的数值或实例。
例如,如果我们说第 70 百分位数,它表示分布中 70% 的数据低于给定的数值。
异常值
异常值是与其他数据点有显著差异的数据点(数值型)。它们与分布中的大多数点不同。这样的点可能会扭曲分布的中心度量,如均值和中位数。因此,需要检测并移除它们。
__箱线图__可用于检测数据中的异常值。可以使用 Seaborn 库创建它们。

6_ 概率论
__概率__是随机实验中事件发生的可能性。例如,如果抛硬币,得到正面的几率是 50%,所以概率是 0.5。
样本空间:它是随机实验所有可能结果的集合。 有利结果:我们在随机实验中寻找的结果集合
概率 = (有利结果的数量) / (样本空间)
__概率论__是与概率概念相关的数学分支。
7_ 贝叶斯定理
条件概率:
这是在另一个事件已经发生的情况下,某个事件发生的概率。因此,它给出了两个事件之间的关系以及这些事件发生概率的概念。
公式如下:
P( A | B ):B 发生后 A 发生的概率。
公式为:
因此,P(A|B) 等于 A 和 B 同时发生的概率除以 B 发生的概率。
Guide to Conditional Probability
贝叶斯定理
贝叶斯定理提供了一种计算条件概率的方法。贝叶斯定理在机器学习中被广泛使用,尤其是在贝叶斯分类器中。
根据贝叶斯定理,在 B 已经发生的情况下 A 的概率,由 A 的概率乘以给定 A 已发生的情况下 B 的概率,再除以 B 的概率得出。
P(A|B) = P(A).P(B|A) / P(B)
8_ 随机变量
随机变量是实验或随机事件的数值结果。它们通常是一组值。
主要有两种类型的随机变量:
离散随机变量:此类变量仅取有限个不同的值。
连续随机变量:此类变量可以取无限个可能的值。
9_ 累积分布函数 (CDF)
在概率论和统计学中,实值随机变量 X 的累积分布函数(CDF),或简称 X 的分布函数,在 x 处的取值,是 X 取值小于或等于 x 的概率。
实值随机变量 X 的累积分布函数是由以下函数给出的:
资源:
10_ 连续分布
连续分布描述了连续随机变量可能值的概率。连续随机变量是一个具有无限且不可数的一组可能值(称为范围)的随机变量。
11_ Skewness (偏度)
偏度 (Skewness) 是衡量数据分布或随机变量分布关于其均值不对称程度的指标。
偏度可以是正的、负的或零。
![]()
负偏: 分布集中在右侧,左侧尾部较长。
正偏: 分布集中在左侧,右侧尾部较长。
集中趋势度量的变化如下所示。
![]()
数据分布通常存在偏斜,这可能在数据处理过程中造成麻烦。可以通过对分布取对数将偏态分布转换为对称分布。
Skew Distribution (偏态分布)

Log of the Skew Distribution. (偏态分布的对数)

12_ ANOVA (方差分析)
ANOVA 代表 方差分析 (Analysis of Variance)。
它用于比较不同组的数据分布。
通常我们会获得海量数据。这些数据太大难以直接处理。总数据被称为 总体 (Population)。
为了处理它们,我们选取随机的较小数据组。它们被称为 样本 (Samples)。
ANOVA 用于比较这些组或样本之间的方差。
组的方差由下式给出:

通过观察组均值之间的差异来观察收集到的样本的差异。我们经常使用 t 检验 (t-test) 来比较均值,并检查样本是否属于同一总体,
现在,t 检验仅适用于两组之间。但是,我们通常会得到更多的组或样本。
如果我们尝试对超过两组的组使用 t 检验,我们必须多次执行 t 检验,每对一次。这就是 ANOVA 发挥作用的地方。
ANOVA 有两个组成部分:
1.Variation within each group (每个组内的变异)
2.Variation between groups (组间的变异)
它基于一个称为 F 比率 (F-Ratio) 的比率工作。
它由下式给出:

F 比率显示了总变异中有多少来自组间变异,有多少来自组内变异。如果大部分变异来自组间变异,则组均值不同的可能性更大。然而,如果大部分变异来自组内变异,那么我们可以得出结论,组内的元素是不同的,而不是整个组。F 比率越大,组具有不同均值的可能性就越大。
Resources:
13_ Prob Den Fn (PDF) (概率密度函数)
它代表概率密度函数。
在概率论中,概率密度函数(PDF),或连续随机变量的密度,是一个函数,其在样本空间(随机变量可能取值集合)中任何给定样本(或点)的值可以被解释为提供随机变量值等于该样本的相对可能性。
连续分布的概率密度函数 (PDF) P(x) 定义为 (累积) 分布函数 D(x) 的导数。
它由函数在给定范围内的积分给出。
14_ Central Limit Theorem (中心极限定理)
15_ Monte Carlo Method (蒙特卡洛方法)
16_ Hypothesis Testing (假设检验)
Types of curves (曲线类型)
我们需要先了解两种分布曲线。
分布曲线反映了在分布的某个值处找到总体实例或样本的概率。
Normal Distribution (正态分布)

正态分布代表了数据的分布情况。在这种情况下,分布中的大多数数据样本散布在分布均值及其周围。少数实例散布在分布的长尾末端。
关于正态分布的几个要点是:
曲线总是钟形的。这是因为大多数数据都围绕均值发现,所以在均值或中心值找到样本的概率更高。
曲线是对称的
曲线下方的面积始终为 1。这是因为分布的所有点都必须存在于曲线下方
对于正态分布,均值和中位数位于分布的同一条线上。
Standard Normal Distribution (标准正态分布)
这种类型的分布是满足以下条件的正态分布。
分布的均值为 0
分布的标准差等于 1。
假设检验的思想完全基于数据分布。
假设检验
假设检验(Hypothesis Testing)是一种统计方法,用于利用实验数据进行统计决策。假设检验基本上是我们对总体参数所做的一个假设。
例如,假设我们提出一个假设:班级里的男孩比女孩高。
上述陈述只是对班级总体的一个假设。
假设(Hypothesis)仅仅是基于对一组信息或数据的观察而提出的推测性提议或陈述。
我们最初根据样本数据的总体提出两个互斥的陈述。
第一个称为__零假设__(NULL HYPOTHESIS)。它用 H0 表示。
第二个称为__备择假设__(ALTERNATE HYPOTHESIS)。它用 H1 或 Ha 表示。它用作零假设的对立面。
基于总体的实例,我们接受或拒绝零假设,并相应地拒绝或接受备择假设。
显著性水平
这是我们决定是否接受或拒绝零假设的程度。当我们对总体进行假设时,并非 100% 或所有总体实例都符合该假设,因此我们设定一个__显著性水平__(Level of Significance)作为截止程度,即,如果我们的显著性水平是 5%,且 (100-5)% = 95% 的数据符合假设,我们就接受该假设。
这意味着在 95% 的置信度下,该假设被接受

非拒绝区域称为__接受区域或 beta 区域__。拒绝区域称为__临界区域或 alpha 区域__。alpha 表示__显著性水平__。
如果显著性水平为 5%,则两个 alpha 区域包含 (2.5+2.5)% 的总体,beta 区域包含 95%。
接受和拒绝会产生两种类型的错误:
第一类错误(Type-I Error):零假设为真,但被错误地拒绝。
第二类错误(Type-II Error):零假设为假,但被错误地接受。

假设检验测试
单尾检验(One Tailed Test):

这是一种假设检验,其中拒绝区域仅位于抽样分布的一侧。拒绝区域可能在右尾端或左尾端。
其思路是,如果我们说显著性水平是 5%,并且考虑一个假设“班级里男孩的身高 <= 6 英尺”。如果至多 5% 的人口身高超过 6 英尺,我们就认为该假设成立。因此,这将是单尾的,因为测试条件仅限制了一端,即身高 > 6 英尺的那一端。

在这种情况下,拒绝区域延伸到分布的两端尾部。
其思路是,如果我们说显著性水平是 5%,并且考虑一个假设“班级里男孩的身高 != 6 英尺”。
在这里,仅当至多 5% 的人口身高小于或大于 6 英尺时,我们才能接受零假设。因此,显然临界区域将位于两端,且分布两端的区域各为 5% / 2 = 2.5%。
17_P 值
在我们深入探讨 P 值(P-value)之前,我们需要先看一下上下文中的另一个重要主题:Z 检验(Z-test)。
Z 检验
我们需要了解两个术语:总体(Population)和__样本__(Sample)。
__总体__描述了整个可用的数据分布。因此,它指的是数据集中提供的所有记录。
样本__是指从总体或给定分布中随机选取的一组数据点。样本的大小可以是任意数量的数据点,由__样本量(sample size)给出。
__Z 检验__简单地用于确定给定的样本分布是否属于给定的总体。
现在,对于 Z 检验,我们必须使用__标准正态形式__(Standard Normal Form)来进行标准化比较度量。

正如我们已经看到的,标准正态形式是一个均值为 0、标准差为 1 的正态形式。
标准差(Standard Deviation)是衡量点围绕均值分布差异程度的指标。

它指出,大约 68%、95% 和 99.7% 的数据分别位于正态分布的 1、2 和 3 个标准差范围内。
现在,为了将正态分布转换为标准正态分布,我们需要一个称为__Z 分数__(Z-Score)的标准分数。它由以下公式给出:

x = 我们要标准化的值
µ = x 分布的均值
σ = x 分布的标准差
我们需要了解另一个概念__中心极限定理__(Central Limit Theorem)。
中心极限定理
该定理指出,无论总体分布如何,只要样本量大于 30,样本均值的抽样分布的均值等于总体均值。
并且
样本均值的抽样分布也将遵循正态分布。
因此,它指出,如果我们要从一个大小超过 30 的分布中选择几个样本,并选择样本均值并使用样本均值创建一个分布,那么新创建的抽样分布的均值等于原始总体均值。
根据该定理,如果我们从具有总体均值 μ 和总体标准差 σ 的总体中抽取大小为 N 的样本,则条件如下:

即,样本均值分布的均值等于总体均值。
样本均值的标准差由以下公式给出:

上述项也称为__标准误__(standard error)。
我们使用上述理论进行 Z 检验。如果样本均值接近总体均值,我们说该样本属于该总体;如果它与总体均值相距甚远,我们说该样本取自不同的总体。
为此,我们使用一个公式并检查 z 统计量是否大于或小于 1.96(考虑双尾检验,显著性水平 = 5%)


上述公式给出 Z 统计量
z = z 统计量
X̄ = 样本均值
μ = 总体均值
σ = 总体标准差
n = 样本量
现在,由于 Z 分数用于标准化分布,它为我们提供了数据整体分布情况的概览。
P 值 (P-values)
它用于根据显著性水平检查结果是否具有统计显著性。
例如,我们进行一项实验并收集观察值或数据。现在,我们提出一个主要假设(零假设 (NULL hypothesis)),以及第二个与第一个相反的假设,称为备择假设 (alternative hypothesis)。
然后我们确定一个显著性水平 (significance level),作为零假设的阈值。P 值实际上给出了该陈述的概率。例如,如果我们备择假设的 p 值为 0.02,这意味着备择假设发生的概率是 2%。
现在,显著性水平发挥作用,决定我们是否允许 2% 或 0.02 的 p 值。这可以被视为零假设的耐受水平。如果使用双尾检验 (two tailed test),我们的显著性水平为 5%,我们可以允许分布两端的各 2.5%,我们接受零假设,因为显著性水平 > 备择假设的 p 值。
但如果 p 值大于显著性水平,我们就说结果是__具有统计显著性的 (statistically significant),并且我们拒绝零假设 (NULL hypothesis)。__。
资源:
https://towardsdatascience.com/p-values-explained-by-data-scientist-f40a746cfc8
https://medium.com/analytics-vidhya/z-test-demystified-f745c57c324c
18_ 卡方检验 (Chi2 test)
卡方检验 (Chi2 test) 广泛用于数据科学和机器学习问题中的特征选择 (feature selection)。
卡方检验 (chi-square test) 在统计学中用于测试两个事件的独立性。因此,它用于检查所使用的特征的独立性。经常使用相关的特征,这些特征没有传达太多信息,但增加了特征空间的维度。
它是检查两个或多个分类变量 (categorical variables) 之间关系的最常用方法之一。
它涉及计算一个数字,称为卡方统计量 (chi-square statistic) - χ2。它遵循卡方分布 (chi-square distribution)。
它被表示为期望值与观测值之差除以观测值的求和。

资源:
19_ 估计 (Estimation)
20_ 置信区间 (Confid Int (CI))
21_ 最大似然估计 (MLE)
22_ 核密度估计 (Kernel Density estimate)
在统计学中,核密度估计 (Kernel Density estimation, KDE) 是一种非参数 (non-parametric) 方法来估计随机变量的概率密度函数 (probability density function)。核密度估计是一个基本的数据平滑问题,基于有限的数据样本对总体进行推断。
核密度估计可以被视为表示概率分布的另一种方式。
![]()
它包括选择一个核函数 (kernel function)。主要有三种被使用。
高斯 (Gaussian)
箱型 (Box)
三角 (Tri)
核函数描绘了找到一个数据点的概率。因此,它在中心最高,随着远离该点而降低。
我们在所有数据点上分配一个核函数,最后计算函数的密度,以获得分布数据点的密度估计。它实际上是在轴上的某一点累加核函数的值。如下图所示。
![]()
现在,核函数由下式给出:
其中 K 是核——一个非负函数——h > 0 是一个称为带宽 (bandwidth) 的平滑参数。
'h' 或带宽是曲线变化的参数。
![]()
来自标准正态分布的 100 个点的随机样本的不同带宽的核密度估计 (KDE)。灰色:真实密度(标准正态)。红色:h=0.05 的 KDE。黑色:h=0.337 的 KDE。绿色:h=2 的 KDE。
资源:
23_ 回归 (Regression)
回归任务涉及从一组__自变量 (independent variables)__预测__因变量 (dependent variable)__的值。
例如,我们要预测汽车的价格。因此,它成为因变量,设为 Y,而特征如发动机容量、最高速度、类别和公司成为自变量,这有助于构建方程以获得价格。
如果有一个特征,设为 x。如果因变量 y 与 x 线性相关,那么它可以表示为__y=mx+c__,其中 m 是方程中自变量的系数,c 是截距或偏差 (bias)。
图片显示了回归的类型

24_ 协方差 (Covariance)
方差 (Variance)
方差是衡量集合分散或散布程度的指标。如果说方差为零,意味着数据集中的所有元素都相同。如果方差很低,意味着数据略有不同。如果方差非常高,意味着数据集中的数据在很大程度上是不同的。
数学上,它是衡量数据集中每个值与均值 (mean) 距离的指标。
方差 (sigma^2) 由每个点到均值的距离平方的总和除以点数给出。

协方差 (Covariance)
协方差 (Covariance) 让我们了解两个随机变量 (Random Variables) 之间的关联程度。现在,我们知道随机变量会形成分布 (Distributions)。分布是变量所取的一组值或数据点,我们可以很容易地在向量空间 (Vector Space) 中将其表示为向量 (Vectors)。
对于向量,协方差定义为两个向量的点积 (Dot Product)。协方差的值可以从正无穷 (Positive Infinity) 到负无穷 (Negative Infinity) 变化。如果两个分布或向量朝同一方向增长,则协方差为正,反之亦然。符号 (Sign) 给出变化的方向,大小 (Magnitude) 给出变化的幅度。
协方差由下式给出:

其中 Xi 和 Yi 表示两个分布的第 i 个点,X-bar 和 Y-bar 代表两个分布的均值 (Mean Values),n 代表分布中的数值或数据点的数量。
25_ 相关性 (Correlation)
协方差衡量变量的总体关系,即方向和幅度。相关性 (Correlation) 是协方差的缩放度量。它是无量纲的,且与尺度无关。它仅显示两个变量变化的强度。
从数学上讲,如果我们用向量表示分布,相关性被称为向量之间的夹角余弦 (Cosine Angle)。相关性的值在 +1 到 -1 之间变化。+1 被称为强正相关 (Strong Positive Correlation),-1 被称为强负相关 (Strong Negative Correlation)。0 意味着无相关性,或者两个变量相互独立 (Independent)。
相关性由下式给出:

其中:
ρ(X,Y) – 变量 X 和 Y 之间的相关性
Cov(X,Y) – 变量 X 和 Y 之间的协方差
σX – X 变量的标准差 (Standard Deviation)
σY – Y 变量的标准差
标准差是方差 (Variance) 的平方根。
26_ 皮尔逊系数 (Pearson coeff)
27_ 因果关系 (Causation)
28_ 最小二乘法拟合 (Least2-fit)
29_ 欧几里得距离 (Euclidian Distance)
欧几里得距离是最常用和标准的两点间距离度量。
它被定义为两点坐标之差的平方和的平方根。
欧几里得空间中的两点间的欧几里得距离是一个数,即两点之间线段的长度。它可以使用勾股定理从点的笛卡尔坐标 (Cartesian Coordinates) 计算得出,有时也被称为毕达哥拉斯距离 (Pythagorean Distance)。
在欧几里得平面中,设点 p 具有笛卡尔坐标 (p{1},p{2}),设点 q 具有坐标 (q_{1},q_{2})。那么 p 和 q 之间的距离由下式给出:__
3_ 编程
1_ Python 基础
简介
Python 是一种高级编程语言 (High-level Programming Language)。它可以用于广泛的工作领域。
常用于数据科学 (Data-science),Python 拥有庞大的库 (Libraries) 集合,有助于快速完成工作。
大多数信息系统已经支持 Python,无需安装任何内容。
执行脚本
- 将 .py 文件下载到你的计算机上
- 使其可执行(在 Linux 上使用 chmod +x file.py)
- 打开终端 (Terminal) 并进入包含 Python 文件的目录
- 使用 python file.py 运行 Python2 或使用 python3 file.py 运行 Python3
2_ 在 Excel 中工作
3_ R 设置 / R Studio
简介
R 是一门专门用于统计和数学可视化的编程语言。
它可以通过终端使用手动创建的脚本,也可以直接在 R 控制台 (R Console) 中使用。
安装
Linux
sudo apt-get install r-base
sudo apt-get install r-base-dev
Windows
下载 CRAN 网站上可用的 .exe 安装包。
R-studio
RStudio 是 R 的图形界面。它在 其网站 上免费提供。
该界面分为 4 个主要区域:

- 左上角是你正在编辑的脚本(高亮你想执行的代码并按 Ctrl + Enter)
- 左下角是控制台,用于即时执行某些代码行
- 右上角显示你的环境 (Environment)(变量、历史记录等)
- 右下角显示你绘制的图表、包 (Packages)、帮助... 代码执行的结果
4_ R 基础
R 是由 R 统计计算基金会支持的用于统计计算和图形的开源编程语言和软件环境。
R 语言在统计学家和数据挖掘者中被广泛用于开发统计软件和分析数据。
民意调查、数据挖掘者调查以及学术文献数据库研究表明,近年来 R 的受欢迎程度显著增加。
5_ 表达式 (Expressions)
6_ 变量 (Variables)
7_ IBM SPSS
8_ Rapid Miner
9_ 向量 (Vectors)
10_ 矩阵 (Matrices)
11_ 数组 (Arrays)
12_ 因子 (Factors)
13_ 列表 (Lists)
14_ 数据框 (Data frames)
15_ 读取 CSV 数据
CSV 是一种在数据科学中常用的__表格数据 (Tabular Data)__格式。大多数结构化数据都将以此格式呈现。
要在 Python 中__打开 CSV 文件__,只需像往常一样打开文件: raw_file = open('file.csv', 'r')
- 'r': 读取,无法修改文件
- 'w': 写入,每次修改都会擦除文件
- 'a': 追加,每次修改将在文件末尾进行
如何读取?
大多数情况下,你将逐行解析此文件并对该行执行任何操作。如果你想存储数据以便稍后使用,请构建列表或字典 (Dictionaries)。
要逐行读取此类文件,你可以使用:
16_ 读取原始数据
17_ 子集数据 (Subsetting data)
18_ 操作数据框
19_ 函数 (Functions)
函数有助于执行重复操作。
首先,定义函数:
def MyFunction(number):
"""This function will multiply a number by 9"""
number = number * 9
return number
20_ 因子分析 (Factor analysis)
21_ 安装包 (Install PKGS)
Python 实际上有两个主要使用的发行版。Python2 和 Python3。
安装 pip
Pip 是 Python 的库管理器。因此,你可以轻松地使用一行命令安装大多数包 (Packages)。要安装 pip,只需进入终端并执行: # python2 sudo apt-get install python-pip # python3 sudo apt-get install python3-pip You can then install a library with pip via a terminal doing:
# __python2__
sudo pip install [PCKG_NAME]
# __python3__
sudo pip3 install [PCKG_NAME]
You also can install it directly from the core (see 21_install_pkgs.py)
4_ 机器学习 (Machine learning)
1_ 什么是机器学习 (ML)?
定义
机器学习是人工智能研究的一部分。它涉及复杂方法的构思、开发及实现,使机器能够完成极其困难的任务,这些任务用经典算法几乎无法解决。
机器学习主要由三种算法组成:

应用示例
- 计算机视觉
- 搜索引擎
- 金融分析
- 文档分类
- 音乐生成
- 机器人技术 ...
2_ 数值变量
可以取连续整数或实数值的变量。它们可以取无限多个值。
这类变量主要用于涉及测量的特征。例如,班级中所有学生的身高。
3_ 类别变量
取有限离散值的变量。它们取一组固定值,用于对数据项进行分类。
它们类似于分配的标签。例如:根据性别标记班级学生:'Male' 和 'Female'
4_ 监督学习
监督学习是从__标记的训练数据__推断函数的机器学习任务。
训练数据由__一组训练示例__组成。
在监督学习中,每个示例是一个包含输入对象(通常是向量)和期望输出值(也称为监督信号)的对。
监督学习算法分析训练数据并生成一个推断函数,可用于映射新示例。
换句话说:
监督学习从一组标记的示例中学习。从实例和标签中,监督学习模型试图找到用于描述实例的特征之间的相关性,并学习每个特征如何贡献于对应实例的标签。当接收到未见过的实例时,监督学习的目标是根据其特征正确标记该实例。
最佳情况将允许算法正确确定未见实例的类别标签。
5_ 无监督学习
无监督机器学习是从__“未标记”数据__推断函数以描述隐藏结构的机器学习任务(观察中不包含分类或归类)。
由于提供给学习者的示例是未标记的,因此无法评估相关算法输出的结构的准确性——这是区分无监督学习与监督学习和强化学习的一种方式。
无监督学习仅处理数据实例。这种方法尝试根据特征的相似性对数据进行分组并形成聚类。如果两个实例具有相似的特征并在特征空间中彼此靠近,那么这两个实例属于同一聚类的可能性很高。当获得一个未见过的实例时,算法将尝试根据其特征找出该实例应属于哪个聚类。
资源:
6_ 概念、输入和属性
机器学习问题将数据集的特征作为输入。
对于监督学习,模型在数据上进行训练,然后准备执行。因此,对于监督学习,除了特征外,我们还需要输入数据点对应的标签,以便让模型在这些标签上进行训练。
对于无监督学习,模型只需引用数据项之间的复杂关系并相应地对它们进行分组即可执行。因此,无监督学习不需要标记的数据集。输入仅是数据集的特征部分。
7_ 训练和测试数据
如果我们使用数据集训练监督机器学习模型,模型会非常深入地捕捉该特定数据集的依赖关系。因此,模型在该数据上的表现总是很好,但这并不能正确衡量模型的实际表现。
为了了解模型的表现如何,我们必须使用不同的数据集来训练和测试模型。我们用来训练模型的数据集称为训练集,我们用来测试模型的数据集称为测试集。
我们通常分割提供的数据集以创建训练集和测试集。分割比例主要是:3:7 或 2:8,取决于数据,较大的是训练数据。
sklearn.model_selection.train_test_split 用于分割数据。
语法:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
8_ 分类器
分类是最重要的也是最常见的机器学习问题。分类问题既可以是监督问题也可以是无监督问题。
分类问题涉及根据特定数据点对应的特征集,将数据点标记为属于特定类别。
分类任务可以使用机器学习和深度学习技术执行。
机器学习分类技术包括:逻辑回归、SVM(支持向量机)以及分类树。用于执行分类的模型称为分类器。
9_ 预测
机器学习模型针对特定问题生成的输出称为其预测。
主要有两种类型的预测对应两种类型的问题:
分类
回归
在分类中,预测通常是一个类别或标签,数据点属于该类。
在回归中,预测是一个数字,一个连续的数值,因为回归问题涉及预测数值。例如,预测房屋价格。
10_ 提升
11_ 过拟合
我们经常过度训练模型或使模型过于复杂,导致模型与训练数据拟合得过于紧密。
训练数据通常包含异常值或代表数据中的误导模式。如此深度地拟合包含此类不规则性的训练数据会导致模型失去泛化能力。模型在训练集上表现非常好,但在测试集上表现不佳。

正如我们所见,随着训练进一步深入,训练误差减小而测试误差增加。
如果存在另一个假设 h,使得 h 在训练数据上的误差比 h1 大,而在测试数据上的误差比 h1 小,则称假设 h1 过拟合。
12_ 偏差与方差
偏差 (Bias) 是指模型的平均预测值与我们试图预测的正确值之间的差异。高偏差 (High Bias) 模型对训练数据关注很少,并且过度简化了模型。这总是导致在训练数据和测试数据上出现高误差。
方差 (Variance) 是给定数据点或值的模型预测的变异性,它告诉我们数据的分布情况。高方差 (High Variance) 模型非常关注训练数据,并且在未见过的数据上无法泛化。因此,这类模型在训练数据上表现很好,但在测试数据上的错误率很高。
基本上,高方差会导致过拟合 (Overfitting),高偏差会导致欠拟合 (Underfitting)。我们希望我们的模型具有低偏差和低方差,以表现完美。我们需要避免具有高方差和高偏差的模型。
我们可以看到,对于低偏差和低方差,我们的模型能正确预测所有数据点。同样,在最后那张图中,由于存在高偏差和高方差,模型没有正确预测任何数据点。

从图中可以看出,当模型过于复杂或过于简单时,误差都会增加。偏差随着模型变简单而增加,方差随着模型变复杂而增加。
这是机器学习 (Machine Learning) 中最重要的权衡之一。
13_ 树与分类
我们之前讨论过分类问题。我们看到最常用的方法是逻辑回归 (Logistic Regression)、支持向量机 (SVMs) 和决策树。现在,如果决策边界 (Decision Boundary) 是线性的,像逻辑回归和支持向量机这样的方法效果最好,但当决策边界是非线性时,这是一个完全不同的场景,这时就会使用决策树。

第一张图显示了线性决策边界,第二张图显示了非线性决策边界。
在这些情况下,对于非线性边界,基于条件的决策树方法在分类问题上工作得很好。该算法根据特征创建条件来驱动并做出决策,因此独立于函数形式。

用于分类的决策树方法
14_ 分类率
15_ 决策树
决策树是最常用的机器学习 (Machine Learning) 算法之一。它们既用于分类也用于回归。它们可用于线性和非线性数据,但主要用于非线性数据。顾名思义,决策树基于从数据及其行为中得出的一组决策进行工作。它不使用线性分类器或回归器,因此其性能独立于数据的线性性质。
使用树模型的另一个最重要原因是它们非常容易解释。
决策树既可用于分类也可用于回归。方法论略有不同,但原理相同。决策树使用 CART 算法(分类与回归树,Classification and Regression Trees)。
资源:
16_ Boosting(提升法)
集成学习 (Ensemble Learning)
这是一种通过组合多个模型或弱学习器 (weak learners) 来增强机器学习 (Machine learning) 模型性能的方法。它们提供了改进的效率。
集成学习主要有两种类型:
1. 并行集成学习 (Parallel ensemble learning) 或 Bagging 方法
2. 顺序集成学习 (Sequential ensemble learning) 或 Boosting 方法
在并行方法或 Bagging 技术中,多个弱分类器是并行创建的。训练数据集是基于自助采样法 (bootstrapping) 从原始数据集中随机创建的。用于训练和创建阶段的数据集是弱分类器。随后在预测期间,所有分类器的结果被打包在一起以提供最终结果。

示例:随机森林 (Random Forests)
在顺序学习或 Boosting 中,弱学习器是一个接一个创建的,并且数据样本集的权重被调整,以便在创建过程中,下一个学习器专注于前一个分类器错误预测的样本。因此,在每个步骤中,分类器都会改进并从其之前的错误或误分类中学习。

主要有三种 Boosting 算法:
1. Adaboost
2. 梯度提升 (Gradient Boosting)
3. XGBoost
Adaboost 算法的工作原理如下所述。它创建一个弱学习器,也称为桩 (stumps),它们不是完整的树,而是包含单个节点,基于该节点进行分类。观察误分类情况,并在训练下一个弱学习器时,给予它们比正确分类的更高的权重。
sklearn.ensemble.AdaBoostClassifier 用于在 Python 中将分类器应用于真实数据。

资源:
梯度提升 (Gradient Boosting) 算法从一个输出为 0.5 的节点开始,适用于分类和回归。它充当第一个桩或弱学习器。然后我们观察预测中的误差。现在,我们创建其他学习器或决策树,实际上根据条件预测误差。这些误差称为残差 (Residuals)。我们的最终输出是:
0.5(由第一个学习器提供)+ 第二个树或学习器提供的误差.
现在,如果我们使用这种方法,它会过于紧密地学习预测,并失去泛化能力 (generalization)。为了避免这种情况,梯度提升使用学习参数 alpha。
因此,两个学习器后的最终结果计算如下:
0.5(由第一个学习器提供)+ alpha X(第二个树或学习器提供的误差。)
我们可以看到,通过使用添加的部分,我们向正确结果迈出了一小步。我们继续添加学习器,直到非常接近训练集给出的实际值。
总体而言,方程变为:
0.5(由第一个学习器提供)+ alpha X(第二个树或学习器提供的误差。)+ alpha X(第三个树或学习器提供的误差。)+.............
sklearn.ensemble.GradientBoostingClassifier 用于在 Python 中应用梯度提升

资源:
17_ 朴素贝叶斯分类器 (Naive Bayes classifiers)
朴素贝叶斯分类器是一组基于 贝叶斯定理 (Bayes' Theorem) 的分类算法。
贝叶斯定理描述了一个事件发生的概率,基于可能与该事件相关的条件的先前知识。公式如下:
其中 P(A|B) 是在已知 B 已经发生的情况下 A 发生的概率,P(B|A) 是在已知 A 发生的情况下 B 发生的概率。
主要有两种类型的朴素贝叶斯:
1. 高斯朴素贝叶斯 (Gaussian Naive Bayes)
2. 多项式朴素贝叶斯 (Multinomial Naive Bayes).
多项式朴素贝叶斯 (Multinomial Naive Bayes)
该方法主要用于文档分类。例如,将文章分类为体育文章或电影杂志。它也用于区分真实邮件和垃圾邮件。它使用不同杂志中使用的单词频率来做决定。
例如,单词“亲爱的”和“朋友们”在实际邮件中使用很多,而“优惠”和“钱”在“垃圾”邮件中使用很多。它使用训练示例计算实际邮件和垃圾邮件中单词出现的概率。因此,“钱”在垃圾邮件中出现的概率要高得多,以此类推。
现在,我们使用其中单词的出现来计算邮件是垃圾邮件的概率。
高斯朴素贝叶斯 (Gaussian Naive Bayes)
当预测变量取连续值而不是离散值时,我们假设这些值是从高斯分布 (gaussian distribution) 中采样的。

它将高斯分布与贝叶斯定理联系起来。
资源:
18_ K-近邻算法 (K-Nearest Neighbor)
K-近邻算法是最基本且仍然重要的算法。它是一种基于内存的方法,而不是基于模型的方法。
KNN 既用于监督学习 (supervised learning) 也用于无监督学习 (unsupervised learning)。它简单地定位特征空间 (feature space) 中的数据点,并使用距离作为相似性度量标准 (similarity metrics)。
两个数据点之间的距离越小,点就越相似。
在 K-NN 分类算法中,要分类的点绘制在特征空间中,并根据其最近的 K 个邻居的类别进行分类。K 是用户参数。它给出了我们在决定相关点的标签时应考虑多少点的度量。如果 K 大于 1,我们考虑多数标签。
如果数据集非常大,我们可以使用较大的 k。较大的 k 受噪声影响较小,并生成平滑的边界。对于小数据集,必须使用较小的 k。较小的 k 有助于更好地注意边界的差异。

资源:
19_ 逻辑回归
回归是机器学习中最重要的概念之一。
逻辑回归是最常用于线性可分数据的分类算法。当因变量为分类变量时使用逻辑回归。
它使用线性回归方程:
Y= w1x1+w2x2+w3x3……..wkxk
以修改后的格式:
Y= 1/ 1+e^-(w1x1+w2x2+w3x3……..wkxk)
此修改确保值始终保持在 0 和 1 之间。因此,使其可用于分类。
上述方程被称为 Sigmoid(S 形) 函数。该函数的样子如下:

使用的损失函数称为 logloss 或二元交叉熵。
Loss= —Y_actual. log(h(x)) —(1 — Y_actual.log(1 — h(x)))
如果 Y_actual=1,第一部分给出误差,否则第二部分。

逻辑回归也用于多分类任务。它使用 Softmax 回归或一对多(One-vs-all)逻辑回归。
__sklearn.linear_model.LogisticRegression__ 用于在 Python 中应用逻辑回归。
20_ 排序
21_ 线性回归
回归任务涉及从一组自变量(即提供的特征)预测因变量的值。例如,我们想预测汽车的价格。那么,价格成为因变量(设为 Y),而像发动机排量、最高速度、车型和厂商等特征成为自变量,这有助于构建方程以获得价格。
现在,如果有一个特征,设为 x。如果因变量 y 与 x 线性相关,则可以用 y=mx+c 表示,其中 m 是方程中特征的系数,c 是截距或偏置。M 和 C 都是模型参数。
我们使用一种称为均方误差(MSE)的损失函数或代价函数。它由因变量的实际值与预测值之差的平方给出。
MSE=1/2m * (Y_actual — Y_pred)²
如果我们观察该函数,会发现它是一个抛物线,即该函数本质上是凸的。这种凸函数是 梯度下降(Gradient Descent) 中用于获取模型参数值的原理。

图片展示了损失函数。
为了获得模型参数的正确估计,我们使用 梯度下降(Gradient Descent) 方法。
__sklearn.linear_model.LinearRegression__ 用于在 Python 中应用线性回归。
22_ 感知机
感知机是 50 年代描述的第一个模型。
这是一个 二分类器(Binary Classifier),即它不能分离超过 2 个组,且这些组必须是 线性可分(Linearly Separable) 的。
感知机 的工作原理类似于生物神经元。它计算一个激活值,如果该值为正,则返回 1,否则返回 0。
23_ 层次聚类
层次算法之所以得名,是因为它们创建树状结构来形成簇。这些算法还使用基于距离的方法进行簇创建。
最流行的算法有:
凝聚式层次聚类(Agglomerative Hierarchical clustering)
分裂式层次聚类(Divisive Hierarchical clustering)
凝聚式层次聚类(Agglomerative Hierarchical clustering):在这种类型的层次聚类中,每个点最初作为一个簇开始,然后最近或最相似的簇逐渐合并形成一个簇。
分裂式层次聚类(Divisive Hierarchical Clustering):这种类型的层次聚类正好与凝聚式聚类相反。在这种类型中,所有点最初作为一个大簇开始,然后根据两个簇之间的距离大小或相似度高低,簇逐渐被划分为更小的簇。我们不断划分簇,直到所有点都成为单独的簇。
对于凝聚式聚类,我们不断合并最近或具有较高相似性得分的簇到一个簇中。因此,如果我们为合并定义一个截止或阈值得分,我们将得到多个簇而不是单个簇。例如,如果我们将阈值相似性指标得分设为 0.5,这意味着如果在找不到两个相似性得分低于 0.5 的簇时,算法将停止合并簇,该步骤存在的簇数量即为最终需要创建的簇的数量。
同样,对于分裂式聚类,我们根据最低相似性得分来划分簇。因此,如果我们将得分定义为 0.5,如果两个簇之间的相似性得分小于或等于 0.5,它将停止划分或分割。我们将剩下一些簇,而不会减少到分布中的每一个点。
过程如下图所示:

测量距离和应用截止的最常用方法之一是树状图(Dendrogram)方法。
上述聚类的树状图为:

24_ K-means 聚类算法
该算法最初使用 N 个数据点随机创建 K 个簇(clusters),并为每个簇计算簇内所有点值的平均值。因此,对于每个簇,我们通过计算簇中值的均值来找到一个中心点或质心(centroid)。然后,算法计算每个簇的平方误差和(Sum of Squared Error, SSE)。SSE 用于衡量簇的质量。如果一个簇中点与中心之间的距离较大,则 SSE 值会较高;如果检查其解释,它只允许在近距离范围内的点形成簇。
该算法基于这样一个原则:位于簇中心附近的点应该属于该簇。因此,如果点 x 比簇 B 更接近簇 A 的中心,那么 x 将属于簇 A。于是,一个点进入一个簇,即使只有一个点从一个簇移动到另一个簇,质心也会改变,SSE 也随之改变。我们不断重复此过程,直到 SSE 减小且质心不再发生变化。经过一定次数的移动后,找到最优簇,当质心不再变化时,移动停止。
初始簇的数量 'K' 是一个用户参数。
图片展示了该方法:

我们已经看到,对于这种类型的聚类技术,我们需要一个用户定义的参数 'K',它定义了需要创建的簇的数量。现在,这是一个非常重要的参数。为了找到这个参数,人们使用了多种方法。最重要和最常用的方法是肘部法则(Elbow Method)。 对于较小的数据集,k = (N/2)^(1/2),即分布中点数的一半的平方根。
25_ 神经网络
神经网络是一组相互连接的人工神经元或节点(Nodes)层。它们是框架,设计时考虑了人脑的结构和工作方式。它们旨在用于预测建模(predictive modeling)和应用,可以通过数据集进行训练。它们基于自学习算法(self-learning algorithms),并根据从训练信息集中得出的结论和复杂关系进行预测。
典型的神经网络具有多层。第一层称为输入层(Input Layer),最后一层称为输出层(Output Layer)。输入层和输出层之间的层称为隐藏层(Hidden Layers)。它基本上像一个黑盒(Black Box)用于预测和分类。所有层都是相互连接的,由许多称为节点的(Nodes)人工神经元组成。
神经网络过于复杂,无法直接在梯度下降(Gradient Descent)算法上工作,因此它基于反向传播(Backpropagation)和优化器(Optimizers)的原理工作。
26_ 情感分析
文本分类和情感分析是一个非常常见的机器学习问题,广泛应用于产品预测、电影推荐等多种活动。
像情感分析这样的文本分类问题可以通过多种方式实现,使用多种算法。这些主要分为两大类:
词袋模型(Bag of Words Model):在这种情况下,数据集中的所有句子都被分词化,形成一个表示词汇的词袋。现在,数据集中的每个单独的句子或样本都由该词袋向量表示。这个向量称为特征向量(feature vector)。例如,“今天阳光明媚”和“太阳从东方升起”是两个句子。词袋将是这两个句子中所有唯一的单词。
第二种方法基于时间序列方法(time series approach):这里每个单词都表示为一个单独的向量。因此,句子被表示为向量的向量。
27_ 协同过滤
我们都使用过 Netflix、Amazon 和 Youtube 等服务。这些服务使用非常复杂的系统来为用户推荐最佳项目,以提升他们的体验。
推荐系统主要由 3 个组件组成,其中主要组件之一是候选生成(Candidate generation)。该方法负责从数千个项目的巨大池中生成较小的候选子集以推荐给某个用户。
候选生成系统的类型:
基于内容的过滤系统
协同过滤系统
基于内容的过滤系统:基于内容的推荐系统试图根据用户积极反应的项目的特征,猜测用户的特征或行为。
协同过滤系统:协同过滤不需要给出项目的特征。每个用户和项目都由特征向量或嵌入(embedding)描述。
它为所有用户和项目创建嵌入。它将用户和项目嵌入到同一个嵌入空间中。
它在推荐特定用户时考虑其他用户的反应。它记录特定用户喜欢哪些项目,以及那些行为和喜好与该用户相似的用户喜欢哪些项目,从而向该用户推荐项目。
它收集用户对不同项目的反馈,并将其用于推荐。
28_ 标签
29_ 支持向量机
支持向量机(Support Vector Machine)既用于分类也用于回归(Regression)。
SVM 在其分类器或回归器周围使用间隔(Margin)。间隔为模型及其性能提供了额外的鲁棒性和准确性。
![]()
上图描述了一个 SVM 分类器。红线是实际分类器,虚线显示边界。位于边界上的点实际上决定了间隔。它们支撑分类器的间隔,因此被称为__支持向量__(Support Vectors)。
分类器与最近点之间的距离称为__间隔距离__(Marginal Distance)。
可能存在多个分类器,但我们选择具有最大间隔距离的那个。因此,间隔距离和支持向量有助于选择最佳分类器。
30_强化学习
“强化学习(Reinforcement Learning,简称 RL)是机器学习的一个领域,关注软件代理应如何在环境中采取行动,以最大化累积奖励的概念。”
为了赢得游戏,我们需要在游戏过程中做出多次选择和预测以取得成功,因此它们可以被称为多决策过程。这就是我们需要一种称为强化学习算法的算法类型的原因。这类算法基于决策链,使此类算法能够支持多决策过程。
强化算法可用于从起始状态到达目标状态,并据此做出决策。
强化学习涉及一个自我学习的智能体。如果它做出了正确或良好的移动使其朝向目标,它会得到正向奖励,否则不会。通过这种方式,智能体进行学习。

上图展示了强化学习的设置。
5_ 文本挖掘
1_ 语料库
2_ 命名实体识别
3_ 文本分析
4_ UIMA
5_ 词文档矩阵
6_ 词频与权重
7_ 支持向量机 (SVM)
8_ 关联规则
9_ 基于市场的分析
10_ 特征提取
11_ 使用 Mahout
12_ 使用 Weka
13_ 使用 NLTK
14_ 分类文本
15_ 词汇映射
6_ 数据可视化
在 Rstudio 中打开 .R 脚本以逐行执行。
有关安装信息,请参见 10_工具箱/3_R, Rstudio, Rattle。
1_ R 中的数据探索
在数学中,函数 f 的图像是所有有序对 (x, f(x)) 的集合。如果函数输入 x 是标量,则图像是一个二维图,对于连续函数则是一条曲线。如果函数输入 x 是实数的有序对 (x1, x2),则图像是所有有序三元组 (x1, x2, f(x1, x2)) 的集合,对于连续函数则是一个曲面。
2_ 单变量、双变量与多变量可视化
单变量
该术语常用于统计学中,以区分单个变量的分布与多个变量的分布,尽管它也可以在其他方面应用。例如,单变量数据由单个标量分量组成。在时间序列分析中,该术语应用于整个时间序列作为所指对象:因此,单变量时间序列指的是单一数量随时间变化的值集。
双变量
双变量分析是最简单的定量(统计)分析形式之一 [1]。它涉及对两个变量(通常表示为 X, Y)的分析,以确定它们之间的经验关系。
多变量
多变量分析(MVA)基于多变量统计学的统计原理,涉及同时观察和分析多个统计结果变量。在设计和分析中,该技术用于在考虑所有变量对感兴趣响应的影响的同时,跨多个维度执行权衡研究。
3_ ggplot2
简介
ggplot2 是 R 语言的绘图系统,基于图形语法(grammar of graphics),它试图吸取基础图形和 lattice 图形的优点,摒弃其缺点。它处理了许多使绘图变得繁琐的细节(如图例绘制),同时也提供了一种强大的图形模型,使得生成复杂的多层图形变得容易。
文档
示例
http://r4stats.com/examples/graphics-ggplot2/
4_ 直方图与饼图(单变量)
简介
直方图和饼图是两种用于可视化频率的图表类型。
直方图显示这些频率在各类别中的分布,而饼图显示这些频率在 100% 圆中的相对比例。
5_ 树图与树状地图
简介
树状地图 将分层(树形结构)数据显示为一组嵌套矩形。 树的每个分支都被分配一个矩形,然后该矩形被平铺以代表子分支的较小矩形。 叶节点的矩形面积与数据的指定维度成比例。 通常,叶节点会着色以显示数据的另一个维度。
何时使用?
- 分支少于 10 个。
- 正值。
- 可视化空间有限。
示例

此树状地图描述了每个产品宇宙的总体积及其对应的表面积。液体产品的销量高于其他产品。 如果您想进一步探索,我们可以进入“液体”产品类别,找出客户更偏好哪些货架。
更多信息
6_ 散点图
简介
散点图(也称为散点图、散点图、散点图或散点图)是一种使用笛卡尔坐标系来显示一组数据中通常两个变量值的图表或数学图。
何时使用?
当您想要显示两个变量之间的关系时使用散点图。 散点图有时被称为相关性图,因为它们显示了两个变量是如何相关的。
示例

该图描述了商店表面积与其营业额(千欧元)之间的正相关关系,这是合理的:对于商店来说,店面越大,能接受的客户越多,产生的营业额也就越高。
更多信息
Matplotlib Series 4: Scatter plot
7_ 折线图
简介
折线图 或线形图是一种图表类型,它以一系列称为“标记”的数据点的形式显示信息,并通过直线段连接。折线图通常用于可视化随时间间隔变化的趋势——即时间序列——因此线条通常是按时间顺序绘制的。
何时使用?
- 跟踪随时间的变化。
- X 轴显示连续变量。
- Y 轴显示测量值。
示例

假设上图描述了一年中冰淇淋销售额的营业额(千欧元)。 根据图表,我们可以清楚地发现销售额在夏季达到峰值,然后从秋季到冬季下降,这是合乎逻辑的。
更多信息
8_ 空间图表
9_ 调查图
10_ 时间线
11_ 决策树
12_ D3.js
关于
这是一个 JavaScript 库,允许您轻松创建大量不同的图表。
D3.js 是一个基于数据操作文档的 JavaScript 库。
D3 帮助您使用 HTML、SVG 和 CSS 让数据活起来。
D3 对网络标准的强调使您能够充分利用现代浏览器的全部功能,而无需绑定到专有框架,结合了强大的可视化组件和数据驱动的 DOM 操作方法。
示例
在 D3 的 Github 上有很多使用 D3.js 的图表示例。
13_ 信息可视化
14_ IBM ManyEyes
15_ Tableau
16_ 维恩图
关于
一个 维恩图 (Venn diagram)(也称为主要图、集合图或逻辑图)是一种显示有限个不同集合之间所有可能逻辑关系的图表。
何时使用?
显示不同组之间的逻辑关系(交集、差集、并集)。
示例

这种维恩图通常可用于零售交易。 假设我们需要研究奶酪和红葡萄酒的受欢迎程度,并且有 2500 位客户回答了我们的问卷。 根据上图,我们发现,在 2500 位客户中,900 位客户 (36%) 喜欢奶酪,1200 位客户 (48%) 喜欢红葡萄酒,400 位客户 (16%) 同时喜欢这两种产品。
更多信息
17_ 面积图
关于
一个 面积图 (Area chart) 或面积图以图形方式显示定量数据。 它基于折线图。轴和线之间的区域通常用颜色、纹理和阴影来强调。
何时使用?
显示或比较随时间变化的定量进展。
示例

此堆叠面积图显示了每个账户的金额变化,以及它们对总金额(按价值计算)的贡献。
更多信息
18_ 雷达图
关于
雷达图 (Radar chart) 是一种由一系列等角辐条(称为半径)组成的图表,每个辐条代表一个变量。辐条的数据长度与该数据点相对于所有数据点中该变量的最大幅度的变量幅度成正比。绘制一条线连接每个辐条的数据值。这使图表呈现出星形外观,这也是该图表流行名称之一的由来。
何时使用?
- 在各种特征或特性上比较两个或多个项目或组。
- 检查单个数据点的相对值。
- 在一个雷达图上显示少于十个因素。
示例

此雷达图显示了 2 位客户在 4 种产品中的偏好。 客户 c1 喜欢鸡肉和面包,不太喜欢奶酪。 然而,客户 c2 比其他 4 种产品更喜欢奶酪,不喜欢啤酒。 我们可以采访这 2 位客户,以找出那些不受青睐的产品的弱点。
更多信息
19_ 词云
关于
一个 词云 (Word cloud)(标签云,或视觉设计中的加权列表)是文本数据的创新视觉表示。标签通常是单个单词,每个标签的重要性通过字体大小或颜色显示。这种格式有助于快速感知最突出的术语,并按字母顺序定位术语以确定其相对突出程度。
何时使用?
- 描绘网站上的关键词元数据(标签)。
- 令人愉悦并提供情感连接。
示例

根据这个词云,我们可以总体上了解到,数据科学采用了从数学、统计学、信息科学和计算机科学等领域汲取的技术和理论。它可以用于商业分析,并被称为“21 世纪最性感的职业”。
更多信息
7_ 大数据 (Big Data)
1_ MapReduce (映射归约) 基础
2_ Hadoop 生态系统
3_ HDFS (Hadoop 分布式文件系统)
4_ 数据复制原则
5_ 设置 Hadoop
6_ NameNode 与 DataNode
7_ JobTracker 与 TaskTracker
8_ M/R/SAS 编程
9_ Sqop (Sqoop):将数据加载到 HDFS
10_ Flume, Scribe
11_ Pig SQL
12_ Hive DWH
13_ 用于 Weblog 的 Scribe, Chukwa
14_ 使用 Mahout
15_ Zookeeper, Avro
16_ Lambda 架构
17_ Storm:Hadoop 实时处理
18_ Rhadoop, RHIPE
19_ RMR
20_ NoSQL 数据库 (MongoDB, Neo4j)
21_ 分布式数据库和系统 (Cassandra)
8_ 数据摄入 (Data Ingestion)
1_ 数据格式总结
2_ 数据发现
3_ 数据源与获取
4_ 数据集成
5_ 数据融合
6_ 转换与增强
7_ 数据调查
8_ Google OpenRefine
9_ 多少数据?
10_ 使用 ETL
9_ 数据清洗 (Data Munging)
1_ 维度与数值降维 (Dim. and num. reduction)
2_ 标准化
3_ 数据清理
4_ 处理缺失值
5_ 无偏估计量
6_ 稀疏值分箱
7_ 特征提取
8_ 去噪
9_ 采样
10_ 分层采样
11_ PCA (主成分分析)
10_ 工具箱 (Toolbox)
1_ 带分析工具包的 MS Excel
2_ Java, Python
3_ R, Rstudio, Rattle
4_ Weka, Knime, RapidMiner
5_ 首选的 Hadoop 发行版
6_ Spark, Storm
7_ Flume, Scibe (Scribe), Chukwa
8_ Nutch, Talend, Scraperwiki
9_ Webscraper, Flume, Sqoop
10_ tm, RWeka, NLTK
11_ RHIPE
12_ D3.js, ggplot2, Shiny
13_ IBM Languageware
14_ Cassandra, MongoDB
13_ Microsoft Azure, AWS, Google Cloud
14_ Microsoft Cognitive API
15_ TensorFlow
TensorFlow 是一个开源软件库,用于使用数据流图 (data flow graphs) 进行数值计算。
图中的节点代表数学运算,而图的边代表它们之间通信的多维数据数组(张量 (tensors))。
灵活的架构允许你通过单一 API (应用程序编程接口) 将计算部署到桌面、服务器或移动设备中的一个或多个 CPU 或 GPU 上。
TensorFlow 最初由谷歌机器学习研究组织内的 Google Brain 团队的研究人员和工程师开发,旨在进行机器学习 (machine learning) 和深度神经网络 (deep neural networks) 研究,但该系统足够通用,可适用于各种其他领域。
其他免费课程
人工智能
- CS 188 - 人工智能导论,加州大学伯克利分校 - 2015 年春季
- 6.034 人工智能,麻省理工学院开放课程
- CS221: 人工智能:原理与技术 - 2019 年秋季 - 斯坦福大学
- 15-780 - 研究生人工智能,春季 14,卡内基梅隆大学
- CSE 592 人工智能应用,冬季 2003 - 华盛顿大学
- CS322 - 人工智能导论,冬季 2012-13 - 不列颠哥伦比亚大学 (YouTube)
- CS 4804: 人工智能导论,秋季 2016
- CS 5804: 人工智能导论,春季 2015
- 人工智能 - 印度理工学院卡拉格普尔分校
- 人工智能 - 印度理工学院马德拉斯分校
- 人工智能 (P. Dasgupta 教授) - 印度理工学院卡拉格普尔分校
- MOOC - 人工智能入门 - Udacity
- MOOC - 机器人学人工智能 - Udacity
- 研究生人工智能课程,秋季 2012 - 华盛顿大学
- 基于代理的系统 2015/16 - 爱丁堡大学
- 信息学 2D - 推理与代理 2014/15 - 爱丁堡大学
- 人工智能 - 拉文斯堡魏因加滕应用技术大学
- 演绎数据库与知识库系统 - 德国布伦瑞克工业大学
- 人工智能:知识表示与推理 - 印度理工学院马德拉斯分校
- 语义网技术 - Dr. Harald Sack - HPI
- 使用语义网技术的知识工程 - Dr. Harald Sack - HPI
机器学习
机器学习导论
大规模开放在线课程 (MOOC) 机器学习 (Machine Learning) Andrew Ng - Coursera/斯坦福大学 (笔记)
- 面向程序员的机器学习导论
- 大规模开放在线课程 (MOOC) - 统计学习,斯坦福大学
- 机器学习基础训练营,伯克利西蒙斯研究所
- CS155 - 机器学习与数据挖掘,2017 - 加州理工学院 (笔记) (2016 年)
- CS 156 - 从数据中学习,加州理工学院
- 10-601 - 机器学习导论 (硕士) - Tom Mitchell - 2015, 卡内基梅隆大学 (YouTube)
- 10-601 机器学习 | 卡内基梅隆大学 | 2017 年秋季
- 10-701 - 机器学习导论 (博士) - Tom Mitchell, 2011 年春季,卡内基梅隆大学 (2014 年秋季) (2015 年春季 Alex Smola)
- 10 - 301/601 - 机器学习导论 - 2020 年春季 - 卡内基梅隆大学
- CMS 165 机器学习与统计推断基础 - 2020 - 加州理工学院
- 微软研究院 - 机器学习课程
- CS 446 - 机器学习,2019 年春季,UIUC( 2016 年秋季讲座)
- UBC 2012 年本科机器学习,Nando de Freitas
- CS 229 - 机器学习 - 斯坦福大学 (2018 年秋季)
- CS 189/289A 机器学习导论,Jonathan Shewchuk 教授 - UC Berkeley
- CPSC 340: 机器学习与数据挖掘 (2018) - UBC
- CS4780/5780 机器学习,2013 年秋季 - 康奈尔大学
- CS4780/5780 机器学习,2018 年秋季 - 康奈尔大学 (YouTube)
- CSE474/574 机器学习导论 - 纽约州立大学布法罗分校
- CS 5350/6350 - 机器学习,2016 年秋季,犹他大学
- ECE 5984 机器学习导论,2015 年春季 - 弗吉尼亚理工大学
- CSx824/ECEx242 机器学习,Bert Huang, 2015 年秋季 - 弗吉尼亚理工大学
- STA 4273H - 大规模机器学习,2015 年冬季 - 多伦多大学
- CS 485/685 机器学习,Shai Ben-David, 滑铁卢大学
- STAT 441/841 分类 2017 年冬季,滑铁卢
- 10-605 - 大数据集机器学习,2016 年秋季 - 卡内基梅隆大学
- 信息论、模式识别与神经网络 - 剑桥大学
- Python 与机器学习 - 斯坦福大众课程计划
- 大规模开放在线课程 (MOOC) - 机器学习 Part 1a - Udacity/佐治亚理工学院 (Part 1b Part 2 Part 3)
- 机器学习与模式识别 2015/16- 爱丁堡大学
- 应用机器学习导论 2015/16- 爱丁堡大学
- 模式识别课程 (2012)- 海德堡大学
- 机器学习与模式识别导论 - CBCSL 俄亥俄州立大学
- 机器学习导论 - IIT 卡拉格普尔
- 机器学习导论 - IIT 马德拉斯
- 模式识别 - IISC 班加罗尔
- 模式识别与应用 - IIT 卡拉格普尔
- 模式识别 - IIT 马德拉斯
- 2013 年机器学习暑期学校 - 德国蒂宾根马克斯·普朗克智能系统研究所
- 机器学习 - Professor Kogan (2016 年春季) - 罗格斯大学
- CS273a: 机器学习导论 (YouTube)
- 2015 年机器学习速成课
- COM4509/COM6509 机器学习与自适应智能 2015-16
- 10715 机器学习高级导论
- 机器学习导论 - 2018 年春季 - 苏黎世联邦理工学院
- 机器学习 - Pedro Domingos- 华盛顿大学
- 高级机器学习 - 2019 - 苏黎世联邦理工学院
- 机器学习 (COMP09012)
- 概率机器学习 2020 - 蒂宾根大学
- 统计机器学习 2020 - Ulrike von Luxburg - 蒂宾根大学
- COMS W4995 - 应用机器学习 - 2020 年春季 - 哥伦比亚大学
数据挖掘 (Data Mining)
CSEP 546,数据挖掘 (Data Mining) - Pedro Domingos, 2016 年春季 - 华盛顿大学 (YouTube)
- CS 5140/6140 - 数据挖掘,2016 年春季,犹他大学 (Youtube)
- CS 5955/6955 - 数据挖掘,犹他大学 (YouTube)
- 统计学 202 - 数据挖掘的统计方面,2007 年夏季 - 谷歌 (YouTube)
- 慕课 (MOOC) - 文本挖掘与分析 by ChengXiang Zhai
- 信息检索 SS 2014, iTunes - HPI
- 慕课 (MOOC) - 使用 Weka 进行数据挖掘
- CS 290 数据挖掘讲座
- CS246 - 挖掘海量数据集,2016 年冬季,斯坦福大学 (YouTube)
- 数据挖掘:从大型数据集学习 - 2017 年秋季 - 苏黎世联邦理工学院
- 信息检索 - 2018 年春季 - 苏黎世联邦理工学院
- CAP6673 - 数据挖掘与机器学习 - FAU(视频讲座)
- 数据仓库与数据挖掘技术 - 德国不伦瑞克工业大学
数据科学 (Data Science)
- Data 8:数据科学基础 - 加州大学伯克利分校 (2017 年夏季)
- CSE519 - 数据科学 2016 年秋季 - Skiena, 石溪大学
- CS 109 数据科学,哈佛大学 (YouTube)
- 6.0002 计算思维与数据科学导论 - MIT OCW
- Data 100 - 2019 年夏季 - 加州大学伯克利分校
- 分布式数据分析 (2017/18 冬季学期) - 波茨坦大学哈恩研究所
- 统计学 133 - 数据计算概念,2013 年秋季 - 加州大学伯克利分校
- 数据概况与数据清洗 (2014/15 冬季学期) - 波茨坦大学哈恩研究所
- AM 207 - 数据分析、推断与优化的随机方法,哈佛大学
- CS 229r - 大数据算法,哈佛大学 (Youtube)
- 大数据算法 - 印度理工学院马德拉斯分校
概率图建模 (Probabilistic Graphical Modeling)
深度学习 (Deep Learning)
- 6.S191:深度学习导论 - MIT
- 深度学习 CMU
- 第一部分:面向程序员的实用深度学习,v3 - fast.ai
- 第二部分:从基础开始的深度学习 - fast.ai
- 2015 年牛津大学深度学习 - Nando de Freitas
- 6.S094:自动驾驶汽车的深度学习 - MIT
- CS294-129 设计、可视化与理解深度神经网络 (YouTube)
- CS230:深度学习 - 2018 年秋季 - 斯坦福大学
- STAT-157 深度学习 2019 - 加州大学伯克利分校
- 全栈深度学习训练营 2019 - 加州大学伯克利分校
- 深度学习,斯坦福大学
- 慕课 (MOOC) - 机器学习的神经网络,Geoffrey Hinton 2016 - Coursera
- 深度无监督学习 -- 伯克利 2020 年春季
- Stat 946 深度学习 - 滑铁卢大学
- 神经网络课程 - 舍布鲁克大学 (YouTube)
- CS294-158 深度无监督学习 SP19
- DLCV - 计算机视觉深度学习 - 巴塞罗那理工大学
- DLAI - 人工智能深度学习 @ 巴塞罗那理工大学
- 神经网络与应用 - 印度理工学院卡拉格普尔分校
- UVA 深度学习课程
- 英伟达机器学习课程
- 深度学习 - 2020-21 年冬季 - 蒂宾根机器学习
强化学习 (Reinforcement Learning)
- CS234:强化学习 - 2019 年冬季 - 斯坦福大学
- 强化学习导论 - 伦敦大学学院
- 高级深度学习与强化学习 - 伦敦大学学院
- 强化学习 - 印度理工学院马德拉斯分校
- CS885 强化学习 - 2018 年春季 - 滑铁卢大学
- CS 285 - 深度强化学习 - 加州大学伯克利分校
- CS 294 112 - 强化学习
- NUS CS 6101 - 深度强化学习
- ECE 8851:强化学习
- CS294-112,深度强化学习 Sp17 (YouTube)
- 2015 年大卫·希尔弗 (David Silver) 在 DeepMind 讲授的强化学习课程 - 伦敦大学学院 (YouTube)
- 深度强化学习训练营 - 伯克利 2017 年 8 月
- 强化学习 - 印度理工学院马德拉斯分校
高级机器学习 (Advanced Machine Learning)
基于机器学习的自然语言处理和计算机视觉
- CS 224d - 自然语言处理的深度学习,斯坦福大学 (讲座 - Youtube)
- CS 224N - 自然语言处理,斯坦福大学 (讲座视频)
- CS 124 - 从语言到信息 - 斯坦福大学
- 慕课 (MOOC) - 自然语言处理,Dan Jurafsky & Chris Manning - Coursera
- fast.ai 代码优先的自然语言处理入门 (Github)
- 慕课 (MOOC) - 自然语言处理 - Coursera, 密歇根大学
- CS 231n - 用于视觉识别的卷积神经网络,斯坦福大学
- CS224U:自然语言理解 - 2019 年春季 - 斯坦福大学
- 自然语言处理的深度学习,2017 - 牛津大学
- 机器人与计算机视觉的机器学习,2013/2014 冬季学期 - 慕尼黑工业大学 (YouTube)
- 信息学 1 - 认知科学 2015/16 - 爱丁堡大学
- 信息学 2A - 处理形式与自然语言 2016-17 - 爱丁堡大学
- 计算认知科学 2015/16 - 爱丁堡大学
- 加速自然语言处理 2015/16 - 爱丁堡大学
- 自然语言处理 - 印度理工学院孟买分校
- NOC:视觉计算的深度学习 - 印度理工学院卡拉格普尔分校
- CS 11-747 - 神经网路用于 NLP - 2019 - CMU
- 自然语言处理 - Michael Collins - 哥伦比亚大学
- 计算机视觉的深度学习 - 密歇根大学
- CMU CS11-737 - 多语言自然语言处理
时间序列分析
其他机器学习主题
- EE364a:凸优化 I - 斯坦福大学
- CS 6955 - 聚类,2015 年春季,犹他大学
- Info 290 - 使用 Twitter 分析大数据,加州大学伯克利分校信息学院 (YouTube)
- 10-725 凸优化,2015 年春季 - CMU
- 10-725 凸优化:2016 年秋季 - CMU
- CAM 383M - 科学计算的统计与离散方法,德克萨斯大学
- 9.520 - 统计学习理论与应用,2015 年秋季 - MIT
- 强化学习 - 伦敦大学学院
- 机器学习的正则化方法 2016 (YouTube)
- 大数据中的统计推断 - 多伦多大学
- 10-725 优化 2012 年秋季 - CMU
- 10-801 高级优化与随机方法 - CMU (YouTube)
- 强化学习 2015/16 - 爱丁堡大学
- 强化学习 - 印度理工学院马德拉斯分校
- 统计重构 2015 年冬季 - Richard McElreath
- 音乐信息检索 - 维多利亚大学,2014
- 普渡大学 2011 年机器学习暑期学校
- 机器学习基础 - Blmmoberg Edu
- 强化学习导论 - 伦敦大学学院
- 高级深度学习与强化学习 - 伦敦大学学院
- 网络信息检索 (Proff. L. Becchetti - A. Vitaletti)
- 大数据系统 (2019/20 冬季学期) - Prof. Dr. Tilmann Rabl - HPI
- 分布式数据分析 (2017/18 冬季学期) - Dr. Thorsten Papenbrock - HPI
概率与统计
- 6.041 概率系统分析与实用概率 - MIT OCW
- 统计学 110 - 概率论 - 哈佛大学
- 统计学 2.1x:描述性统计 | 加州大学伯克利分校
- 统计学 2.2x:概率论 | 加州大学伯克利分校
- MOOC - 统计学:理解数据,Coursera
- MOOC - 统计学基础 - Coursera
- 概率论与随机过程 - 印度理工学院卡拉格普尔分校
- MOOC - 统计推断 - Coursera
- 131B - 概率与统计导论,加州大学欧文分校
- 统计学 250 - 统计与数据分析导论,密歇根大学
- 集合、计数与概率 - 哈佛大学
- 观点鲜明的统计课程 (YouTube)
- 统计学 - Brandon Foltz
- 统计重构:使用 R 和 Stan 的贝叶斯课程 (讲座 - 阿尔托大学) (书籍)
- 02402 统计学导论 E12 - 丹麦技术大学 (F17)
线性代数
机器人学
- CS 223A - 机器人学导论,斯坦福大学
- 6.832 欠驱动机器人学 - MIT OCW
- CS287 伯克利高级机器人学 2019 秋季学期 -- 讲师:Pieter Abbeel
- CS 287 - 高级机器人学,2011 年秋季,UC Berkeley (视频)
- CS235 - 面向非机器人设计师的应用机器人设计 - 斯坦福大学
- 讲座:飞行机器人的视觉导航 (YouTube)
- CS 205A:机器人、视觉与图形的数学方法 (2013 年秋季)
- 机器人学 1,De Luca 教授,罗马大学 (YouTube)
- 机器人学 2,De Luca 教授,罗马大学 (YouTube)
- 机器人力学与控制,首尔大学
- 机器人学导论课程 - 北卡罗来纳大学夏洛特分校 (UNCC)
- SLAM(同步定位与建图)讲座
- 视觉与机器人学导论 2015/16 - 爱丁堡大学
- ME 597 – 自主移动机器人学 – 2014 年秋季
- ME 780 – 自动驾驶感知 – 2017 年春季
- ME780 – 机器人和计算机视觉的非线性状态估计 – 2017 年春季
- METR 4202/7202 -- 机器人学与自动化 - 昆士兰大学
- 机器人学 - 印度孟买理工学院 (IIT Bombay)
- 机器视觉导论
- 6.834J 认知机器人学 - MIT OCW
- Hello (真实) 世界与 ROS(机器人操作系统) - 代尔夫特理工大学
- 机器人编程 (ROS) - 苏黎世联邦理工学院
- 机电一体化系统设计 - 代尔夫特理工大学
- CS 206 进化机器人学课程 2020 年春季
- 机器人学基础 - UTEC 2018-I
- 机器人学 - YouTube
- 机器人学与控制:理论与实践 IIT 鲁尔基
- 机电一体化
- ME142 - 机电一体化 2020 年春季 - 加州大学默塞德分校
- 移动传感与机器人学 - 波恩大学
- MSR2 - 传感器与状态估计课程 (2020) - 波恩大学
- SLAM(同步定位与建图)课程 (2013) - 波恩大学
- ENGR486 机器人建模与控制 (2014 冬季)
- D K Pratihar 教授主讲的机器人学 - IIT 卡拉格普尔
- 移动机器人学导论 - SS 2019 - 弗赖堡大学
- 机器人地图构建 - WS 2018/19 - 弗赖堡大学
- 机构学与机器人运动学 - IIT 卡拉格普尔
- 自动驾驶汽车 - Cyrill Stachniss - 2020/21 冬季 - 波恩大学
- 移动传感与机器人学 1 – Stachniss 部分(与 PhoRS 联合授课) - 波恩大学
- 移动传感与机器人学 2 – Stachniss & Klingbeil/Holst - 波恩大学
500 + 人工智能项目列表(含代码)
500 个 AI(人工智能)、机器学习、深度学习、计算机视觉、NLP(自然语言处理)项目,均附带代码
此列表持续更新。 - 您可以提交 Pull Request(拉取请求)并参与贡献。
| 序号 | 名称 | 链接 |
|---|---|---|
| 1 | 180 个机器学习项目 | is.gd/MLtyGk |
| 2 | 12 个机器学习目标检测项目 | is.gd/jZMP1A |
| 3 | 20 个使用 Python 的 NLP (自然语言处理) 项目 | is.gd/jcMvjB |
| 4 | 10 个时间序列预测机器学习项目 | is.gd/dOR66m |
| 5 | 20 个使用 Python 解决并解释的深度学习项目 | is.gd/8Cv5EP |
| 6 | 20 个机器学习项目 | is.gd/LZTF0J |
| 7 | 30 个解决并解释的 Python 项目 | is.gd/xhT36v |
| 8 | 免费机器学习课程 | https://lnkd.in/ekCY8xw |
| 9 | 5 个使用 Python 的网络爬虫项目 | is.gd/6XOTSn |
| 10 | 20 个使用 Python 进行未来预测的机器学习项目 | is.gd/xDKDkl |
| 11 | 4 个使用 Python 的聊天机器人项目 | is.gd/LyZfXv |
| 12 | 7 个 Python GUI (图形用户界面) 项目 | is.gd/0KPBvP |
| 13 | 所有无监督学习项目 | is.gd/cz11Kv |
| 14 | 10 个用于回归分析的机器学习项目 | is.gd/k8faV1 |
| 15 | 10 个使用 Python 进行分类的机器学习项目 | is.gd/BJQjMN |
| 16 | 6 个使用 Python 的情感分析项目 | is.gd/WeiE5p |
| 17 | 4 个使用 Python 的推荐系统项目 | is.gd/pPHAP8 |
| 18 | 20 个使用 Python 的深度学习项目 | is.gd/l3OCJs |
| 19 | 5 个使用 Python 的 COVID-19 项目 | is.gd/xFCnYi |
| 20 | 9 个使用 Python 的计算机视觉项目 | is.gd/lrNybj |
| 21 | 8 个使用 Python 的神经网络项目 | is.gd/FCyOOf |
| 22 | 5 个用于医疗健康的机器学习项目 | https://bit.ly/3b86bOH |
| 23 | 5 个使用 Python 的 NLP 项目 | https://bit.ly/3hExtNS |
| 24 | 47 个 2021 年机器学习项目 | https://bit.ly/356bjiC |
| 25 | 2021 年 19 个人工智能项目 | https://bit.ly/38aLgsg |
| 26 | 2021 年 28 个机器学习项目 | https://bit.ly/3bguRF1 |
| 27 | 2021 年 16 个带源代码的数据科学项目 | https://bit.ly/3oa4zYD |
| 28 | 2021 年 24 个带源代码的深度学习项目 | https://bit.ly/3rQrOsU |
| 29 | 2021 年 25 个带源代码的计算机视觉项目 | https://bit.ly/2JDMO4I |
| 30 | 2021 年 23 个带源代码的 IoT (物联网) 项目 | https://bit.ly/354gT53 |
| 31 | 2021 年 27 个带源代码的 Django 项目 | https://bit.ly/2LdRPRZ |
| 32 | 2021 年 37 个带代码的趣味 Python 项目 | https://bit.ly/3hBHzz4 |
| 33 | 500+ 顶级深度学习方法代码 | https://bit.ly/3n7AkAc |
| 34 | 500+ 机器学习代码 | https://bit.ly/3b32n13 |
| 35 | 20+ 机器学习数据集与项目创意 | https://bit.ly/3b2J48c |
| 36 | 1000+ 计算机视觉代码 | https://bit.ly/2LiX1nv |
| 37 | 300+ 按行业划分的真实世界带代码项目 | https://bit.ly/3rN7lVR |
| 38 | 1000+ Python 项目代码 | https://bit.ly/3oca2xM |
| 39 | 363+ 带代码的 NLP 项目 | https://bit.ly/3b442DO |
| 40 | 50+ 代码 ML 模型 (适用于 iOS 11) 项目 | https://bit.ly/389dB2s |
| 41 | 180+ 图像、文本、音频和视频的预训练模型项目 | https://bit.ly/3hFyQMw |
| 42 | 50+ 图分类项目列表 | https://bit.ly/3rOYFhH |
| 43 | 100+ 句子嵌入 (NLP 资源) | https://bit.ly/355aS8c |
| 44 | 100+ 生产级机器学习项目 | https://bit.ly/353ckI0 |
| 45 | 300+ 机器学习资源合集 | https://bit.ly/3b2LjIE |
| 46 | 70+ 精彩 AI 资源 | https://bit.ly/3hDIXkD |
| 47 | 150+ 带代码的机器学习项目创意 | https://bit.ly/38bfpbg |
| 48 | 100+ 带代码的 AutoML (自动机器学习) 项目 | https://bit.ly/356zxZX |
| 49 | 100+ 机器学习模型可解释性代码框架 | https://bit.ly/3n7FaNB |
| 50 | 120+ 多模型机器学习代码项目 | https://bit.ly/38QRI76 |
| 51 | 精彩的聊天机器人项目 | https://bit.ly/3rQyxmE |
| 52 | 带 iOS 的精美 ML 演示项目 | https://bit.ly/389hZOY |
| 53 | 100+ 基于 Python 的机器学习应用项目 | https://bit.ly/3n9zLWv |
| 54 | 100+ 机器学习和深度学习 (ML 和 DL) 的可复现研究项目 | https://bit.ly/2KQ0J8C |
| 55 | 25+ Python 项目 | https://bit.ly/353fRpK |
| 56 | 8+ OpenCV 项目 | https://bit.ly/389mj0B |
| 57 | 1000+ 精彩深度学习合集 | https://bit.ly/3b0a9Jj |
| 58 | 200+ 精彩 NLP 学习合集 | https://bit.ly/3b74b9o |
| 59 | 200+ 超级 NLP 仓库 | https://bit.ly/3hDNnbd |
| 60 | 100+ 用于你项目的 NLP 数据集 | https://bit.ly/353h2Wc |
| 61 | 364+ 机器学习项目定义 | https://bit.ly/2X5QRdb |
| 62 | 300+ Google Earth Engine Jupyter 笔记本用于分析地理空间数据 | https://bit.ly/387JwjC |
| 63 | 1000+ 机器学习项目信息 | https://bit.ly/3rMGk4N |
| 64. | 11 个带代码的计算机视觉项目 | https://bit.ly/38gz2OR |
| 65. | 13 个带代码的计算机视觉项目 | https://bit.ly/3hMJdhh |
| 66. | 13 个激发灵感的酷炫计算机视觉 GitHub 项目 | https://bit.ly/2LrSv6d |
| 67. | 开源计算机视觉项目 (含教程) | https://bit.ly/3pUss6U |
| 68. | 使用 Python 的 OpenCV 计算机视觉项目 | https://bit.ly/38jmGpn |
| 69. | 100+ 计算机视觉算法实现 | https://bit.ly/3rWgrzF |
| 70. | 80+ 计算机视觉学习代码 | https://bit.ly/3hKCpkm |
| 71. | 深度学习宝藏 | https://bit.ly/359zLQb |
所有荣誉均归于各自的创作者,这些资源经过整合,旨在为数据科学爱好者打造一个精彩且紧凑的学习资源库。
第一部分:路线图
第二部分:免费在线课程
第三部分:500 个数据科学项目
第四部分:100+ 本免费机器学习书籍
第五部分:10 本面向初学者的机器学习书籍
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。