学习资源 | 推荐一份Github热门机器学习项目

简介: 在机器学习的过程中,我们会去不同的平台寻找一些学习资源,对于很多人来说,GitHub是一个非常好用的开源项目托管社区。GitHub上的确有很多热门受欢迎的开源项目,但是我个人认为大多数项目比较浅显,而且形式类似,且内容过于繁多,当学习时却无从下手,或者无法理解这些算法背后的原理。近期GitHub开源了一个热门开源项目,在一段时间学习之后发现的确非常不错,在这里推荐给大家。

介绍

18.jpg


最近几年人工智能异常火热,随之而来的就是各种针对入门者的学习资源,其中不乏很多经典的教程,例如吴恩达的《机器学习》、《深度学习工程师》,但是也有很多千篇一律、照本宣科的学习资源。在学习进阶过程中很多人会到GitHub寻找一些可以动手实践的机器学习项目,会发现GitHub上会有和机器学习相关的各种awesome,恨不得把所有和机器学习、深度学习的资源都囊括进去。这样虽然全面,但是我认为它的价值并不高。我们之所以希望有经验者推荐学习资源,就是因为时间、精力有限,希望能够在鱼龙混杂的学习资源里筛选出真正有价值,或者与众不同的,能够让我们利用有限的精力和时间内真正学会一些东西。近期GitHub有一个关于机器学习的热门开源项目,homemade-machine-learning,目前已经11k+个star,近一周增加1.1k+,经过一段时间的学习发现这的确一个不错的学习项目,下面就详细介绍一下这个项目。

Homemade Machine Learning

19.jpg


开门见山,这个开源项目主要有以下几个优点:

  • 少而精
  • 不依赖python第三方库
  • 详细解释它们背后的数学原理
  • 交互式Jupyter notebook演示程序
  • 丰富易懂的示例

这个项目用Python实现了目前热门、使用的一些机器学习算法,而不是像很多开源项目那样,从头至尾把每个机器学习算法都实现一遍。换句话说,这个开源项目追求“少而精”,它分别从监督学习、非监督学习、神经网络、异常检测、回归、分类这些类别中选择一种算法进行详细阐述算法背后的数学原理,然后使用jupyter notebook交互式的演示,随后会用多个示例进行实现,动手操作不依赖集成的python第三方库,更容易理解机器学习算法的原理。

项目概括

该项目主要包括如下几个方面的机器学习算法:

  • 监督学习
  • 无监督学习
  • 异常检测
  • 神经网络

20.jpg

其中监督学习又分为回归分类,回归算法选取的是比较常用的线性回归,分类算法选取的是比较实用的逻辑回归。无监督学习中主要针对聚类进行讲解,项目中选取的是热门的k-means异常检测是指通过大多数数据来检测出有显著差异的事件、观测结果,在数据处理、图像处理都有应用。神经网络中选择的是多层感知机

安装

首先要保证电脑上正确的安装了Python,然后安装一些项目依赖,

$ pip install -r requirements.txt

requirements:

jupyter==1.0.0
matplotlib==3.0.1
numpy==1.15.3
pandas==0.23.4
plotly==3.4.1
pylint==2.1.1
scipy==1.1.0

如果要使用jupyter notebook,需要在命令行输入下面命令,

jupyter notebook

然后会在浏览器中打开如下窗口,

22.jpg


详细介绍

数学原理

23.jpg

我认为这是这个项目吸引人的地方,也是它与众不同的地方,它和很多项目不同,浮于表面,把很多环节都认为是既定的去阐述,有一些初学者会看的云里雾里,不明白“为什么是这样?”这个项目则不同,它详细、深入的阐述每个算法背后的数学原理,循序渐进,配合可视化很容易让人理解。

详细编码过程

该项目不过多依赖tensorflow、pytorch、keras这些高度集成的机器学习平台,它从梯度下降到损失函数、从训练到预测都是一步一步实现,尽量减少对高度集成第三方库的依赖。

@staticmethod
def gradient_descent(data, labels, initial_theta, lambda_param, max_iteration):
    """Gradient descent function.
    Iteratively optimizes theta model parameters.
    :param data: the set of training or test data.
    :param labels: training set outputs (0 or 1 that defines the class of an example).
    :param initial_theta: initial model parameters.
    :param lambda_param: regularization parameter.
    :param max_iteration: maximum number of gradient descent steps.
    """
    # Initialize cost history list.
    cost_history = []
    # Calculate the number of features.
    num_features = data.shape[1]
    # Launch gradient descent.
    minification_result = minimize(
        # Function that we're going to minimize.
        lambda current_theta: LogisticRegression.cost_function(
            data, labels, current_theta.reshape((num_features, 1)), lambda_param
        ),
        # Initial values of model parameter.
        initial_theta,
        # We will use conjugate gradient algorithm.
        method='CG',
        # Function that will help to calculate gradient direction on each step.
        jac=lambda current_theta: LogisticRegression.gradient_step(
            data, labels, current_theta.reshape((num_features, 1)), lambda_param
        ),
        # Record gradient descent progress for debugging.
        callback=lambda current_theta: cost_history.append(LogisticRegression.cost_function(
            data, labels, current_theta.reshape((num_features, 1)), lambda_param
        )),
        options={'maxiter': max_iteration}
    )
    # Throw an error in case if gradient descent ended up with error.
    if not minification_result.success:
        raise ArithmeticError('Can not minimize cost function: ' + minification_result.message)
    # Reshape the final version of model parameters.
    optimized_theta = minification_result.x.reshape((num_features, 1))
    return optimized_theta, cost_history
@staticmethod
def gradient_step(data, labels, theta, lambda_param):
    """GRADIENT STEP function.
    It performs one step of gradient descent for theta parameters.
    :param data: the set of training or test data.
    :param labels: training set outputs (0 or 1 that defines the class of an example).
    :param theta: model parameters.
    :param lambda_param: regularization parameter.
    """
    # Initialize number of training examples.
    num_examples = labels.shape[0]
    # Calculate hypothesis predictions and difference with labels.
    predictions = LogisticRegression.hypothesis(data, theta)
    label_diff = predictions - labels
    # Calculate regularization parameter.
    regularization_param = (lambda_param / num_examples) * theta
    # Calculate gradient steps.
    gradients = (1 / num_examples) * (data.T @ label_diff)
    regularized_gradients = gradients + regularization_param
    # We should NOT regularize the parameter theta_zero.
    regularized_gradients[0] = (1 / num_examples) * (data[:, [0]].T @ label_diff)
    return regularized_gradients.T.flatten()
@staticmethod
def cost_function(data, labels, theta, lambda_param):
    """Cost function.
    It shows how accurate our model is based on current model parameters.
    :param data: the set of training or test data.
    :param labels: training set outputs (0 or 1 that defines the class of an example).
    :param theta: model parameters.
    :param lambda_param: regularization parameter.
    """
    # Calculate the number of training examples and features.
    num_examples = data.shape[0]
    # Calculate hypothesis.
    predictions = LogisticRegression.hypothesis(data, theta)
    # Calculate regularization parameter
    # Remember that we should not regularize the parameter theta_zero.
    theta_cut = theta[1:, [0]]
    reg_param = (lambda_param / (2 * num_examples)) * (theta_cut.T @ theta_cut)
    # Calculate current predictions cost.
    y_is_set_cost = labels[labels == 1].T @ np.log(predictions[labels == 1])
    y_is_not_set_cost = (1 - labels[labels == 0]).T @ np.log(1 - predictions[labels == 0])
    cost = (-1 / num_examples) * (y_is_set_cost + y_is_not_set_cost) + reg_param
    # Let's extract cost value from the one and only cost numpy matrix cell.
    return cost[0][0]

丰富示例

理解了算法背后的数学原理,跟着作者一步一步实现了算法,要想更加深入的理解就需要把算法应用到不同方面,本项目提供了丰富的示例,其中不乏MNIST这类经典的演示样例。其中每个项目后面都包含至少一个示例,可以获取对应的数据进行实现,这样对算法的理解和应用会有更加清晰而深入的认识。

25.png

其中每个项目后面都包含至少一个示例,数据已经放在根目录下data路径里,可以获取对应的数据进行实现,这样对算法的理解和应用会有更加清晰而深入的认识。


相关文章
|
3月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
101 3
|
2月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
40 6
|
2月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
31 1
|
2月前
|
机器学习/深度学习 数据采集 Python
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
149 1
|
4月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
158 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
5月前
|
存储 安全 Java
【事故】记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私
在一次意外中,作者因三年前将测试代码遗忘在GitHub上而遭遇了代码被他人fork的问题。为解决这一危机,作者详细介绍了如何通过GitHub的DMCA下架通知流程安全删除敏感代码,包括处理私人信息和商标侵权的具体步骤。本文不仅提供了实用的操作指南,还强调了及时响应的重要性,帮助读者避免类似风险
88 1
【事故】记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私
|
5月前
|
SQL JavaScript 前端开发
Github 2024-08-05 开源项目周报 Top15
根据 Github Trendings 的统计,本周(2024年8月5日统计)共有15个项目上榜。以下是根据开发语言汇总的项目数量: - Go 项目:4个 - JavaScript 项目:3个 - Python 项目:3个 - Java 项目:2个 - TypeScript 项目:2个 - C 项目:1个 - Shell 项目:1个 - Dockerfile 项目:1个 - 非开发语言项目:1个
161 2
|
5月前
|
人工智能 Rust JavaScript
Github 2024-08-26 开源项目周报Top15
根据Github Trendings的统计,本周共有15个项目上榜。以下是按开发语言汇总的项目数量:Python项目8个,TypeScript、C++ 和 Rust 项目各2个,Jupyter Notebook、Shell、Swift 和 Dart 项目各1个。其中,RustDesk 是一款用 Rust 编写的开源远程桌面软件,可作为 TeamViewer 的替代品;Whisper 是一个通用的语音识别模型,基于大规模音频数据集训练而成;初学者的生成式人工智能(第2版)则是由微软提供的18门课程,教授构建生成式AI应用所需的知识。
158 1
|
5月前
|
Rust Dart 前端开发
Github 2024-08-19 开源项目周报Top15
根据Github Trendings的统计,本周(2024年8月19日统计)共有15个项目上榜。按开发语言分类,上榜项目数量如下:Python项目最多,有7项;其次是JavaScript和TypeScript,各有3项;Dart有2项;HTML、PowerShell、Clojure和C++各1项。此外,还介绍了多个热门项目,包括Bootstrap 5、RustDesk、ComfyUI、易采集、Penpot等,涵盖了Web开发、远程桌面、自动化测试、设计工具等多个领域。
129 1
|
5月前
|
JavaScript 前端开发 Go
Github 2024-08-12 开源项目周报 Top14
本周Github Trendings共有14个项目上榜,按开发语言汇总如下:Python项目7个,TypeScript项目5个,C项目2个,JavaScript项目2个,Go和Batchfile项目各1个。其中亮点包括开发者职业成长指南、Windows激活工具、ComfyUI图形界面、AFFiNE知识库、易采集可视化爬虫等项目,涵盖多种实用工具和开源平台。
165 1

热门文章

最新文章