10 KiB
Note
本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
Homemade Machine Learning
🇺🇦 乌克兰 正遭受攻击,俄罗斯军队正在发动袭击。平民正在遇害,居民区正在遭受轰炸。
其他语言版本: Español
你可能还会感兴趣:
如需 Octave/MatLab 版本,请查看 machine-learning-octave 项目。
本仓库包含用 Python 实现的流行机器学习算法示例,并附有背后的数学原理说明。每个算法都配有交互式 Jupyter Notebook 演示,让你可以调整训练数据与算法配置,并立即在浏览器中查看结果、图表和预测。多数讲解基于 Andrew Ng 的 这门优秀的机器学习课程。
本仓库的目的 并非 借助第三方库的一行代码来实现机器学习算法,而是 从零开始练习实现这些算法,从而更深入理解每种算法背后的数学原理。因此,所有算法实现都称为“homemade”(自制),并不打算用于生产环境。
监督学习(Supervised Learning)
在监督学习中,我们有一组训练数据作为输入,以及对应每组训练数据的标签或“正确答案”作为输出。随后我们训练模型(机器学习算法的参数),使其能够正确地将输入映射到输出(做出正确预测)。最终目标是找到这样的模型参数,使其即使面对新的输入样本,也能持续正确地进行 输入→输出 映射(预测)。
回归(Regression)
在回归问题中,我们进行实数值预测。本质上,我们尝试沿着训练样本拟合一条直线、一个平面或 n 维超平面。
使用示例:股价预测、销售分析、任意数值之间的依赖关系等。
🤖 线性回归(Linear Regression)
- 📗 Math | Linear Regression - 理论与延伸阅读链接
- ⚙️ Code | Linear Regression - 实现示例
- ▶️ Demo | Univariate Linear Regression - 根据
economy GDP预测country happiness分数 - ▶️ Demo | Multivariate Linear Regression - 根据
economy GDP和freedom index预测country happiness分数 - ▶️ Demo | Non-linear Regression - 使用带有 多项式 和 正弦 特征的线性回归来预测非线性依赖关系
分类(Classification)
在分类问题中,我们根据某种特征将输入样本划分到不同类别。
使用示例:垃圾邮件过滤、语言检测、查找相似文档、手写字符识别等。
🤖 逻辑回归(Logistic Regression)
- 📗 Math | Logistic Regression - 理论与延伸阅读链接
- ⚙️ Code | Logistic Regression - 实现示例
- ▶️ Demo | Logistic Regression (Linear Boundary) - 根据
petal_length和petal_width预测鸢尾花class - ▶️ Demo | Logistic Regression (Non-Linear Boundary) - 根据
param_1和param_2预测芯片validity - ▶️ Demo | Multivariate Logistic Regression | MNIST - 从
28x28像素图像中识别手写数字 - ▶️ Demo | Multivariate Logistic Regression | Fashion MNIST - 从
28x28像素图像中识别服装类型
无监督学习(Unsupervised Learning)
无监督学习是机器学习的一个分支,它从未标注、未分类或未归类的测试数据中学习。与响应反馈不同,无监督学习会识别数据中的共性,并根据每条新数据中是否存在此类共性来做出反应。
聚类(Clustering)
在聚类问题中,我们根据未知特征将训练样本划分到不同群组。算法本身会决定使用哪种特征进行划分。
使用示例:市场细分、社交网络分析、计算集群组织、天文数据分析、图像压缩等。
🤖 K-means 算法
- 📗 Math | K-means Algorithm - 理论与延伸阅读链接
- ⚙️ Code | K-means Algorithm - 实现示例
- ▶️ Demo | K-means Algorithm - 根据
petal_length和petal_width将鸢尾花划分为不同簇
异常检测(Anomaly Detection)
异常检测(也称离群点检测)用于识别与数据中大多数样本显著不同、因而值得怀疑的罕见项、事件或观测值。
使用示例:入侵检测、欺诈检测、系统健康监控、从数据集中移除异常数据等。
🤖 基于高斯分布的异常检测(Anomaly Detection using Gaussian Distribution)
- 📗 Math | Anomaly Detection using Gaussian Distribution - 理论与延伸阅读链接
- ⚙️ Code | Anomaly Detection using Gaussian Distribution - 实现示例
- ▶️ Demo | Anomaly Detection - 在服务器运行参数(如
latency和threshold)中查找异常
神经网络(Neural Network, NN)
神经网络本身并非一种算法,而是一种框架,让多种不同的机器学习算法协同工作,以处理复杂的输入数据。
使用示例:总体上可替代其他各类算法、图像识别、语音识别、图像处理(应用特定风格)、语言翻译等。
🤖 多层感知机(Multilayer Perceptron, MLP)
- 📗 Math | Multilayer Perceptron - 理论与延伸阅读链接
- ⚙️ Code | Multilayer Perceptron - 实现示例
- ▶️ Demo | Multilayer Perceptron | MNIST - 从
28x28像素图像中识别手写数字 - ▶️ Demo | Multilayer Perceptron | Fashion MNIST - 从
28x28像素图像中识别服装类型
机器学习图谱
以下机器学习主题图谱的来源是这篇精彩的博客文章
前置要求
安装 Python
请确保你的机器上已安装 Python on your machine.
你可能想使用 venv standard Python library
来创建虚拟环境,让 Python、pip 以及所有依赖包从本地项目目录安装并运行,
从而避免干扰系统级软件包及其版本。
安装依赖
运行以下命令来安装项目所需的全部依赖:
pip install -r requirements.txt
在本地启动 Jupyter
项目中的所有演示都可以直接在浏览器中运行,无需在本地安装 Jupyter。但若要在本地启动 Jupyter Notebook locally you may do it by running the following command from the root folder of the project:
jupyter notebook
之后,可通过 http://localhost:8888 访问 Jupyter Notebook。
远程启动 Jupyter
每个算法章节都包含指向 Jupyter NBViewer. 的演示链接。这是一款快速的 Jupyter 笔记本(Jupyter notebooks)在线预览工具,你可以在浏览器中直接查看演示代码、图表和数据,而无需在本地安装任何内容。如果你想_修改_代码并在演示笔记本上_实验_,则需要在 Binder. 中启动该笔记本。只需点击 NBViewer 右上角的 "Execute on Binder" 链接即可。
数据集
Jupyter Notebook 演示所使用的数据集列表可在 data 文件夹 中找到。
支持本项目
你可以通过 ❤️️ GitHub 或 ❤️️ Patreon. 支持本项目。

