史上最強:numpy 實現全部機器學習算法

2021-01-15 騰訊網

來源:SOTOM數據科學

來自於加州伯克利大學的David Bourgin 使用Numpy實現了幾乎全部的機器學習算法,真正實現了手擼ML的願景。多少「調包俠」的願望都被這位小哥實現了!

該項目超過3萬行代碼,除了算法本身,還有很多的數據預處理代碼!

地址:https://github.com/ddbourgin/numpy-ml

手擼算法的目的在於能夠更好的學習和深入理解算法,而不是要替代已有的框架,畢竟成熟的框架在效率和精準度上都已經得到驗證。

我們來看下已經實現的算法:

1. 高斯混合模型

EM 訓練

2. 隱馬爾可夫模型

維特比解碼

似然計算

通過 Baum-Welch/forward-backward 算法進行 MLE 參數估計

3. 隱狄利克雷分配模型(主題模型)

用變分 EM 進行 MLE 參數估計的標準模型

用 MCMC 進行 MAP 參數估計的平滑模型

4. 神經網絡

4.1 層/層級運算

Add

Flatten

Multiply

Softmax

全連接/Dense

稀疏進化連接

LSTM

Elman 風格的 RNN

最大+平均池化

點積注意力

受限玻爾茲曼機 (w. CD-n training)

2D 轉置卷積 (w. padding 和 stride)

2D 卷積 (w. padding、dilation 和 stride)

1D 卷積 (w. padding、dilation、stride 和 causality)

4.2 模塊

雙向 LSTM

ResNet 風格的殘差塊(恆等變換和卷積)

WaveNet 風格的殘差塊(帶有擴張因果卷積)

Transformer 風格的多頭縮放點積注意力

4.3 正則化項

Dropout

歸一化

批歸一化(時間上和空間上)

層歸一化(時間上和空間上)

4.4 優化器

SGD w/ 動量

AdaGrad

RMSProp

Adam

4.5 學習率調度器

常數

指數

Noam/Transformer

Dlib 調度器

4.6 權重初始化器

Glorot/Xavier uniform 和 normal

He/Kaiming uniform 和 normal

標準和截斷正態分布初始化

4.7 損失

交叉熵

平方差

Bernoulli VAE 損失

帶有梯度懲罰的 Wasserstein 損失

4.8 激活函數

ReLU

Tanh

Affine

Sigmoid

Leaky ReLU

4.9 模型

Bernoulli 變分自編碼器

帶有梯度懲罰的 Wasserstein GAN

4.10 神經網絡工具

col2im (MATLAB 埠)

im2col (MATLAB 埠)

conv1D

conv2D

deconv2D

minibatch

5. 基於樹的模型

決策樹 (CART)

[Bagging] 隨機森林

[Boosting] 梯度提升決策樹

6. 線性模型

嶺回歸

Logistic 回歸

最小二乘法

貝葉斯線性回歸 w/共軛先驗

7.n 元序列模型

最大似然得分

Additive/Lidstone 平滑

簡單 Good-Turing 平滑

8. 強化學習模型

使用交叉熵方法的智能體

首次訪問 on-policy 蒙特卡羅智能體

加權增量重要採樣蒙特卡羅智能體

Expected SARSA 智能體

TD-0 Q-learning 智能體

Dyna-Q / Dyna-Q+ 優先掃描

9. 非參數模型

Nadaraya-Watson 核回歸

k 最近鄰分類與回歸

10. 預處理

離散傅立葉變換 (1D 信號)

雙線性插值 (2D 信號)

最近鄰插值 (1D 和 2D 信號)

自相關 (1D 信號)

信號窗口

文本分詞

特徵哈希

特徵標準化

One-hot 編碼/解碼

Huffman 編碼/解碼

詞頻逆文檔頻率編碼

11. 工具

相似度核

距離度量

優先級隊列

Ball tree 數據結構

傳送門:https://github.com/ddbourgin/numpy-ml

- EOF -

介紹一本非常經典的入門PDF,它講解的是程式設計師必知的硬核基礎知識,看完能讓你對計算機有一個基礎的了解和入門,是培養你 的基礎,我們看下目錄大綱

相關焦點

  • 小白學數據:教你用Python實現簡單監督學習算法
    在監督學習中,我們首先導入包含有訓練屬性和目標屬性的數據集。監督學習算法會從數據集中學習得出訓練樣本和其目標變量之間的關係,然後將學習到的關係對新樣本(未被標記的樣本)進行分類。C表示隨機誤差監督學習算法的終極目標是給出新的輸入X,使得預測結果Y的準確率最大。
  • Numpy學習打卡task01
    今天帶來的是Datawhale自主學習Numpy下學習打卡筆記第一部分—輸入輸出(為什麼沒有上,別問,問就是numpy.tan(90))。本文大致介紹了numpy的相關背景知識。本文素材來自網絡及datawhale,糾錯指正、深入探討,咱們評論區見。
  • 電子郵件分類的最佳機器學習算法
    通過瀏覽電子郵件的文本,我們將使用機器學習算法來預測電子郵件是由一個人寫的還是另一個人寫的。我們將使用scikit學習庫中的Gaussian-naivebayes算法對兩位作者的郵件進行分類。下面是你可以在任何python的ide上實現的python代碼,確保你的系統上安裝了所需的庫。
  • 驚為天人,NumPy手寫全部主流機器學習模型,代碼超3萬行
    機器之心報導參與:思源、一鳴、張倩用 NumPy 手寫所有主流 ML 模型,普林斯頓博士後 David Bourgin 最近開源了一個非常剽悍的項目。超過 3 萬行代碼、30 多個模型,這也許能打造「最強」的機器學習基石?
  • 基於機器學習的入侵檢測系統
    主要目的是讓計算機在沒有人工協助的情況下學習,並相應的進行調整。機器學習算法可大致分為:監督機器學習算法:可以應用過去學到的東西來使用標記示例預測未來事件。算法分析稱為訓練數據集,用於生成推斷函數以對輸出值進行預測。經過充分的訓練,系統可以為新的輸入提供目標。
  • 使用Numpy進行深度學習中5大反向傳播優化算法的性能比較
    在本文中,我們將通過計算二次凸函數的最優點來數值比較主要的深度學習優化算法的性能。簡介深度學習被稱為人工智慧的未來。現在,神經網絡被稱為通用函數逼近器,也就是說,它們有能力表示這個宇宙中任何複雜的函數。計算這個具有數百萬個參數的通用函數的想法來自優化的基本數學。優化可以通過多種方式完成,但在本文中,我們將重點討論基於梯度下降的優化技術。
  • 資源|用Python和NumPy學習《深度學習》中的線性代數基礎
    本文系巴黎高等師範學院在讀博士 Hadrien Jean 的一篇基礎學習博客,其目的是幫助初學者/高級初學者基於深度學習和機器學習來掌握線性代數的概念。掌握這些技能可以提高你理解和應用各種數據科學算法的能力。
  • D03 Numpy排序、篩選、統計
    在生活中最為常見的數據存放形式是二維表,我們將二維表數據轉換為ndarray之後對應的即為二維數組,下面以二維數組為例,講述numpy的排序、篩選、統計。排序關於排序,numpy的開發者們一早就為我們準備好了方法函數供我們使用,並且提供了多種不同的排序算法例如最常用的quicksort以及穩定性最強的mergesort。
  • Reddit年度盤點:2019年最佳機器學習項目
    用於機器學習的最大數據集列表(499⬆️️)在這裡,作者整理了一個機器學習數據集列表,可以用於機器學習實驗它通過自己和自己遊戲來教自己如何取勝,沒有任何戰略方面的學習例子或指導。實現(388⬆️)從項目頁面來看:numpy-ml 是一個不斷增長的機器學習模型、算法和工具的集合,下面這些都是專門用 numpy 和 Python 標準庫編寫的。
  • 教程| 基礎入門:深度學習矩陣運算的概念和代碼實現
    本文由機器之心編輯,「機器之心」專注生產人工智慧專業性內容,適合開發者和從業者閱讀參考。點擊右上角即刻關注。本文從向量的概念與運算擴展到矩陣運算的概念與代碼實現,對機器學習或者是深度學習的入門者提供最基礎,也是最實用的教程指導,為以後的機器學習模型開發打下基礎。
  • Numpy學習打卡task02
    今天帶來的是Datawhale零基礎入門Numpy的學習打卡筆記第二部分—隨機抽樣。本文大致介紹了隨機數的相關背景知識。本文素材來自網絡及datawhale。雖然密碼學和某些數字算法需要非常高的表觀隨機性,但許多其他操作只需要適度的不可預知性。一些簡單的例子可能是向用戶提供 "每日隨機報價",或決定計算機控制的對手在計算機遊戲中的移動方式。較弱形式的隨機性被用於哈希算法和創建攤牌搜索和排序算法。一些乍看起來適合隨機化的應用,其實並不那麼簡單。
  • numpy庫學習總結(基礎知識)
    最近在學習Python中OpenCV庫,學習花了很多時間,發現基礎知識很重要,尤其是numpy這個庫,在進行程序開發時,處理大量類似數組這種數據結構時,它的重要性等同於Python中的列表,像前篇我們寫的《使用Python中OpenCV庫創建一幅圖片的RGB通道圖片》中,對於圖片的處理,大部分時間我們是在跟類似數組這種數據結構在打交道
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    原標題:機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用高級研修班通信和信息技術創新人才培養工程項目辦公室 通人辦〔2018〕 第5號 機器學習、深度學習算法原理與案例實踐暨Python
  • OpenAI提出Reptile:可擴展的元學習算法
    近日,OpenAI發布了簡單元學習算法Reptile,該算法對一項任務進行重複採樣,執行隨機梯度下降,更新初始參數直到習得最終參數。該方法的性能可與MAML(一種廣泛應用的元學習算法)媲美,且比後者更易實現,計算效率更高。
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    一、核心庫與統計1.NumPynumpy(Numerical Python extensions)是一個第三方的Python包,用於科學計算。其前身是1995年就開始開發的一個用於數組運算的庫。經過了長時間的發展,基本上成了絕大部分Python科學計算的基礎包,當然也包括所有提供Python接口的深度學習框架。
  • 算法之「算法」:所有機器學習算法都可以表示為神經網絡
    隨後出現了一個又一個新算法,從邏輯回歸到支持向量機。但是眾所周知,神經網絡是算法的算法及機器學習的巔峰。我們可以說,神經網絡是對機器學習的普遍概括,而不是僅僅一次嘗試。支持向量機(SVM)算法試圖通過所謂的「核技巧」將數據投影到一個新的空間,從而優化數據的線性可分性。數據轉換完成後,該算法繪製出沿組界最佳分離數據的超平面。超平面簡單定義為現有維度的線性結合,很像是二維的直線和三維的平面。這樣說來,可以將SVM算法看成是將數據投影到一個新的空間,隨後進行多元回歸。神經網絡的輸出可以通過某種有界輸出函數來實現概率結果。
  • 深度學習中的NumPy基礎
    與機器學習和深度學習應用工作涉及複雜的數字操作與大量的數據集。與純 Python 實現相比,NumPy 使得實現這些操作相對簡單和有效。從核心上說,NumPy 實現了Python(n 維數組)數據結構,類似於常規的 Python 列表。大多數程式語言只有數組的概念。Python 實現了列表,它作為數組工作,但是有區別。
  • Science封面:AlphaZero達成終極進化體,史上最強棋類AI降臨!
    David Sliver、哈薩比斯等人親自撰文解讀這一棋類終極算法,以及實現通用學習系統的重要一步。史上最強棋類AI降臨!今天,DeepMind的通用棋類算法,也是迄今最強的棋類AI——AlphaZero,經過同行評議,被頂級期刊 Science 以封面論文的形式,正式引入學界和公眾的視野。
  • 人工智慧大顯神通,實現用機器學習算法:簡化粒子加速器的操作!
    SLAC國家加速器實驗室人工智慧機器學習計劃負責人、開發這項新技術的團隊成員丹尼爾·拉特納(Daniel Ratner)說:即使是電子束密度的微小差異,也會對最終釋放出的X射線量產生巨大影響。
  • 好程式設計師Python培訓分享numpy簡介
    好程式設計師Python培訓分享numpy簡介:一、numpy簡介:NumPy是一個功能強大的Python庫,主要用於對多維數組執行計算。NumPy這個詞來源於兩個單詞-- Numerical和Python。NumPy提供了大量的庫函數和操作,可以幫助程式設計師輕鬆地進行數值計算。