学习资源 | 推荐一份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路径里,可以获取对应的数据进行实现,这样对算法的理解和应用会有更加清晰而深入的认识。


相关文章
|
4月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
124 3
|
3月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
60 6
|
3月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
45 1
|
3月前
|
机器学习/深度学习 数据采集 Python
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
228 1
|
5月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
204 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
4月前
|
JSON JavaScript 前端开发
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
27 0
|
4月前
|
Unix Shell 网络安全
git学习六:(bug总结)git@github.com: Permission denied (publickey).等
本文是关于解决在使用Git和GitHub时遇到的“git@github.com: Permission denied (publickey)”错误的指南。文章提供了详细的步骤,包括确认SSH Agent运行状态、检查密钥配置、确保密钥匹配、验证仓库URL、检查权限和代理设置,以及配置SSH文件。这些步骤帮助用户诊断并解决SSH认证问题。
472 0
|
6月前
|
机器学习/深度学习 人工智能 数据处理
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
探测外太空中的系外行星是天文学和天体物理学的重要研究领域。随着望远镜观测技术的进步和大数据的积累,科学家们已经能够观测到大量恒星的光度变化,并尝试从中识别出由行星凌日(行星经过恒星前方时遮挡部分光线)引起的微小亮度变化。然而,由于数据量巨大且信号微弱,传统方法难以高效准确地识别所有行星信号。因此,本项目旨在利用机器学习技术,特别是深度学习,从海量的天文观测数据中自动识别和分类系外行星的信号。这要求设计一套高效的数据处理流程、构建适合的机器学习模型,并实现自动化的预测和验证系统。
115 1
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
|
6月前
|
机器学习/深度学习 数据处理 定位技术
构建您的首个机器学习项目:从理论到实践
【8月更文挑战第28天】本文旨在为初学者提供一个简明的指南,通过介绍一个基础的机器学习项目——预测房价——来揭示机器学习的神秘面纱。我们将从数据收集开始,逐步深入到数据处理、模型选择、训练和评估等环节。通过实际操作,你将学会如何利用Python及其强大的科学计算库来实现自己的机器学习模型。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你打开一扇通往机器学习世界的大门。
|
6月前
|
数据采集 数据可视化 Ruby
GitHub星标破万!Python学习教程(超详细),真的太强了!
Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。 Python 的设计哲学之一就是简单易学,体现在两个方面: 1. 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。 2. 切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。