機器學習演算法庫推薦?

我不想深入研究機器學習的核心演算法,只是想做一些應用,解決我研究中的一些問題。之前用過神經網路、支撐向量機,現在還想用一下隨機森林。以前用都是在Matlab中,不知道是否還有更好的選擇?如python?R語言?還是一些開源的
Weka 等?我的需求就是儘快上手,相關資源比較多,不需要具體編寫,不知道大家有什麼建議。


http://accord-framework.net/ 這個不錯的。

C#版本的的機器學習庫

Classification.

Support Vector Machines, Logistic Regression,Decision Trees, Neural Networks, Deep Learning (Deep Neural Networks), Levenberg-Marquardt with Bayesian Regularization, Restricted Boltzmann Machines, Sequence classification, Hidden Markov Classifiers and Hidden Conditional Random Fields.

Regression.

Multiple linear regression, Multivariate linear regression, polynomial regression, logarithmic regression. Logistic regression, multinomial logistic regression (softmax) and generalized linear models. L2-regularized L2-loss logistic regression,L2-regularized logistic regression, L1-regularized logistic regression, L2-regularized logistic regression in the dual form and regression support vector machines.

Clustering.

K-Means, K-Modes, Mean-Shift, Gaussian Mixture Models, Binary Split, Deep Belief Networks,Restricted Boltzmann Machines. Clustering algorithms can be applied in arbitrary data,including images, data tables, videos and audio.

Distributions.

Parametric and non-parametric estimation of more than 40 distributions. Univariate distributions such as Normal, Cauchy, Hypergeometric, Poisson,Bernoulli, and specialized distributions such as theKolmogorov-Smirnov, Nakagami, Weibull, andVon-Mises distributions. Multivariate distributions such as the multivariate Normal, Multinomial,Independent, Joint and Mixture distributions.

Hypothesis Tests.

More than 35 statistical hypothesis tests, includingone way and two-way ANOVA tests, non-parametric tests such as the Kolmogorov-Smirnov test and the Sign Test for the Median, contingency table tests such as the Kappa test, with variations for multiple tables, as well as the Bhapkar andBowker tests; and the more traditional Chi-Square,Z, F , T and Wald tests.

Kernel Methods.

Kernel Support Vector Machines, Multi-class andMulti-label machines, Sequential Minimal Optimization, Least-Squares Learning, probabilistic learning, including special methods for linear machines such as LIBLINEAR"s methods for Linear Coordinate Descent, Linear Newton Method,Probabilistic Coordinate Descent, Probabilistic Coordinate Descent in the Dual, Probabilistic Newton Method for L1 and L2 machines in both the dual and primal formulations.

Imaging.

Interest and feature point detectors such as Harris,FREAK, SURF, and FAST. Grey-level Co-occurrence matrices, Border following, Bag-of-Visual-Words (BoW), RANSAC-based homography estimation,integral images, haralick textural feature extraction, and dense descriptors such as histogram of oriented gradients (HOG) and Local Binary Pattern (LBP). Several image filters for image processing applications such as difference of Gaussians,Gabor, Niblack and Sauvola thresholding.

Audio and Signal.

Load, parse, save, filter and transform audio signals, such as applying audio processing filters in both space and frequency domain. WAV files,audio capture, time-domain filters such asenvelope, high-pass, low-pass, wave rectificationfilters. Frequency-domain operators such asdifferential rectification filter and comb filter with Dirac"s delta functions. Signal generators forCosine, Impulse, Square signals.

Vision.

Real-time face detection and tracking, as well as general methods for detecting, tracking andtransforming objects in image streams. Containscascade definitions, Camshift and Dynamic Template Matching trackers. Includes pre-created classifiers for human faces and some facial features such as noses.


機器學習演算法集錦-博客-雲棲社區-阿里雲

機器學習

機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的性能。
嚴格的定義:機器學習是一門研究機器獲取新知識和新技能,並識別現有知識的學問。這裡所說的「機器」,指的就是計算機,電子計算機,中子計算機、光子計算機或神經計算機等等。

機器學習概論

由上圖所示:機器學習分為四大塊: classification (分類)clustering (聚類), regression (回歸), dimensionality reduction (降維)
classification regression
舉一個簡單的例子:
給定一個樣本特徵 x, 我們希望預測其對應的屬性值 y, 如果 y 是離散的, 那麼這就是一個分類問題,反之,如果 y 是連續的實數, 這就是一個回歸問題。

如果給定一組樣本特徵 S={x∈RD}, 我們沒有對應的 y, 而是想發掘這組樣本在 D 維空間的分布, 比如分析哪些樣本靠的更近,哪些樣本之間離得很遠, 這就是屬於聚類問題。

如果我們想用維數更低的子空間來表示原來高維的特徵空間, 那麼這就是降維問題。
無論是分類還是回歸,都是想建立一個預測模型 H,給定一個輸入 x, 可以得到一個輸出 y:
y=H(x)
不同的只是在分類問題中, y 是離散的; 而在回歸問題中 y 是連續的。所以總得來說,兩種問題的學習演算法都很類似。所以在這個圖譜上,我們看到在分類問題中用到的學習演算法,在回歸問題中也能使用。分類問題最常用的學習演算法包括 SVM (支持向量機) , SGD (隨機梯度下降演算法), Bayes (貝葉斯估計), Ensemble, KNN 等。而回歸問題也能使用 SVR, SGD, Ensemble 等演算法,以及其它線性回歸演算法。
clustering
聚類也是分析樣本的屬性, 有點類似classification, 不同的就是classification 在預測之前是知道 y 的範圍, 或者說知道到底有幾個類別, 而聚類是不知道屬性的範圍的。所以 classification 也常常被稱為 supervised learning, 而clustering就被稱為 unsupervised learning。
clustering 事先不知道樣本的屬性範圍,只能憑藉樣本在特徵空間的分布來分析樣本的屬性。這種問題一般更複雜。而常用的演算法包括 k-means (K-均值), GMM (高斯混合模型) 等。

dimensionality reduction
降維是機器學習另一個重要的領域, 降維有很多重要的應用, 特徵的維數過高, 會增加訓練的負擔與存儲空間, 降維就是希望去除特徵的冗餘, 用更加少的維數來表示特徵. 降維演算法最基礎的就是PCA了, 後面的很多演算法都是以PCA為基礎演化而來。

機器 學習常見演算法

機器學習領域涉及到很多的演算法和模型,這裡遴選一些常見的演算法:

  • 正則化演算法(Regularization Algorithms)
  • 集成演算法(Ensemble Algorithms)
  • 決策樹演算法(Decision Tree Algorithm)
  • 回歸(Regression)
  • 人工神經網路(Artificial Neural Network)
  • 深度學習(Deep Learning)
  • 支持向量機(Support Vector Machine)
  • 降維演算法(Dimensionality Reduction Algorithms)
  • 聚類演算法(Clustering Algorithms)
  • 基於實例的演算法(Instance-based Algorithms)
  • 貝葉斯演算法(Bayesian Algorithms)
  • 關聯規則學習演算法(Association Rule Learning Algorithms)
  • 圖模型(Graphical Models) ### 正則化演算法(Regularization Algorithms) 正則化演算法是另一種方法(通常是回歸方法)的拓展,這種方法會基於模型複雜性對其進行懲罰,它喜歡相對簡單能夠更好的泛化的模型。 正則化中我們將保留所有的特徵變數,但是會減小特徵變數的數量級(參數數值的大小θ(j))。這個方法非常有效,當我們有很多特徵變數時,其中每一個變數都能對預測產生一點影響。 演算法實例:
  • 嶺回歸(Ridge Regression)
  • 最小絕對收縮與選擇運算元(LASSO)
  • GLASSO
  • 彈性網路(Elastic Net)
  • 最小角回歸(Least-Angle Regression) 詳解鏈接:機器學習之正則化演算法

集成演算法(Ensemble algorithms)

集成方法是由多個較弱的模型集成模型組,其中的模型可以單獨進行訓練,並且它們的預測能以某種方式結合起來去做出一個總體預測。這類演算法又稱元演算法(meta-algorithm)。最常見的集成思想有兩種bagging和boosting。

boosting
基於錯誤提升分類器性能,通過集中關注被已有分類器分類錯誤的樣本,構建新分類器並集成。
bagging
基於數據隨機重抽樣的分類器構建方法。

演算法實例:

  • Boosting
  • Bootstrapped Aggregation(Bagging)
  • AdaBoost
  • 層疊泛化(Stacked Generalization)(blending)
  • 梯度推進機(Gradient Boosting Machines,GBM)
  • 梯度提升回歸樹(Gradient Boosted Regression Trees,GBRT)
  • 隨機森林(Random Forest) 總結:當先最先進的預測幾乎都使用了演算法集成。它比使用單個模型預測出來的結果要精確的多。但是該演算法需要大量的維護工作。 詳細講解:機器學習演算法之集成演算法 ### 決策樹演算法(Decision Tree Algorithm) 決策樹學習使用一個決策樹作為一個預測模型,它將對一個 item(表徵在分支上)觀察所得映射成關於該 item 的目標值的結論(表徵在葉子中)。 決策樹通過把實例從艮節點排列到某個葉子結點來分類實例,葉子結點即為實例所屬的分類。樹上的每一個結點指定了對實例的某個屬性的測試,並且該結點的每一個後繼分支對應於該屬性的一個可能值。分類實例的方法是從這棵樹的根節點開始,測試這個結點的屬性,然後按照給定實例的屬性值對應的樹枝向下移動。然後這個過程在以新結點的根的子樹上重複。 演算法實例:
  • 分類和回歸樹(Classification and Regression Tree,CART)
  • Iterative Dichotomiser 3(ID3)
  • C4.5 和 C5.0(一種強大方法的兩個不同版本) 詳解:機器學習演算法之決策樹演算法

回歸(Regression)演算法

回歸是用於估計兩種變數之間關係的統計過程。當用於分析因變數和一個 多個自變數之間的關係時,該演算法能提供很多建模和分析多個變數的技巧。具體一點說,回歸分析可以幫助我們理解當任意一個自變數變化,另一個自變數不變時,因變數變化的典型值。最常見的是,回歸分析能在給定自變數的條件下估計出因變數的條件期望。

演算法實例:

  • 普通最小二乘回歸(Ordinary Least Squares Regression,OLSR)
  • 線性回歸(Linear Regression)
  • 邏輯回歸(Logistic Regression)
  • 逐步回歸(Stepwise Regression)
  • 多元自適應回歸樣條(Multivariate Adaptive Regression Splines,MARS)
  • 本地散點平滑估計(Locally Estimated Scatterplot Smoothing,LOESS)

回歸演算法詳解:機器學習演算法之回歸演算法

人工神經網路

人工神經網路是受生物神經網路啟發而構建的演算法模型。它是一種模式匹配,常被用於回歸和分類問題,但擁有龐大的子域,由數百種演算法和各類問題的變體組成。
人工神經網路(ANN)提供了一種普遍而且實際的方法從樣例中學習值為實數、離散值或向量函數。人工神經網路由一系列簡單的單元相互連接構成,其中每個單元有一定數量的實值輸入,併產生單一的實值輸出。
演算法實例:

  • 感知器
  • 反向傳播
  • Hopfield 網路
  • 徑向基函數網路(Radial Basis Function Network,RBFN)

詳細鏈接:機器學習演算法之人工神經網路

深度學習(Deep Learning)

深度學習是人工神經網路的最新分支,它受益於當代硬體的快速發展。
眾多研究者目前的方向主要集中於構建更大、更複雜的神經網路,目前有許多方法正在聚焦半監督學習問題,其中用於訓練的大數據集只包含很少的標記。

演算法實例:

  • 深玻耳茲曼機(Deep Boltzmann Machine,DBM)
  • Deep Belief Networks(DBN)
  • 卷積神經網路(CNN)
  • Stacked Auto-Encoders

深度學習詳解:機器學習演算法之深度學習

支持向量機(Support Vector Machines)

支持向量機是一種監督式學習 (Supervised Learning)的方法,主要用在統計分類 (Classification)問題和回歸分析 (Regression)問題上。支持向量機屬於一般化線性分類器,也可以被認為是提克洛夫規範化(Tikhonov Regularization)方法的一個特例。這族分類器的特點是他們能夠同時最小化經驗誤差與最大化幾何邊緣區,因此支持向量機也被稱為最大邊緣區分類器。現在多簡稱為SVM。
給定一組訓練事例,其中每個事例都屬於兩個類別中的一個,支持向量機(SVM)訓練演算法可以在被輸入新的事例後將其分類到兩個類別中的一個,使自身成為非概率二進位線性分類器。
SVM 模型將訓練事例表示為空間中的點,它們被映射到一幅圖中,由一條明確的、儘可能寬的間隔分開以區分兩個類別。

演算法詳解:機器學習演算法之支持向量機

降維演算法(Dimensionality Reduction Algorithms)

所謂的降維就是指採用某種映射方法,將原高維空間中的數據點映射到低維度的空間中。降維的本質是學習一個映射函數 f : x-&>y,其中x是原始數據點的表達,目前最多使用向量表達形式。 y是數據點映射後的低維向量表達,通常y的維度小於x的維度(當然提高維度也是可以的)。f可能是顯式的或隱式的、線性的或非線性的。
這一演算法可用於可視化高維數據或簡化接下來可用於監督學習中的數據。許多這樣的方法可針對分類和回歸的使用進行調整。

演算法實例:

  • 主成分分析(Principal Component Analysis (PCA))
  • 主成分回歸(Principal Component Regression (PCR))
  • 偏最小二乘回歸(Partial Least Squares Regression (PLSR))
  • Sammon 映射(Sammon Mapping)
  • 多維尺度變換(Multidimensional Scaling (MDS))
  • 投影尋蹤(Projection Pursuit)
  • 線性判別分析(Linear Discriminant Analysis (LDA))
  • 混合判別分析(Mixture Discriminant Analysis (MDA))
  • 二次判別分析(Quadratic Discriminant Analysis (QDA))
  • 靈活判別分析(Flexible Discriminant Analysis (FDA))

詳解鏈接:降維演算法

聚類演算法(Clustering Algorithms)

聚類演算法是指對一組目標進行分類,屬於同一組(亦即一個類,cluster)的目標被劃分在一組中,與其他組目標相比,同一組目標更加彼此相似。
優點是讓數據變得有意義,缺點是結果難以解讀,針對不同的數據組,結果可能無用。
演算法實例:

  • K-均值(k-Means)
  • k-Medians 演算法
  • Expectation Maximi 封層 ation (EM)
  • 最大期望演算法(EM)
  • 分層集群(Hierarchical Clstering)

聚類演算法詳解:機器學習演算法之聚類演算法

貝葉斯演算法(Bayesian Algorithms)

貝葉斯定理(英語:Bayes" theorem)是概率論中的一個定理,它跟隨機變數的條件概率以及邊緣概率分布有關。在有些關於概率的解說中,貝葉斯定理(貝葉斯更新)能夠告知我們如何利用新證據修改已有的看法。貝葉斯方法是指明確應用了貝葉斯定理來解決如分類和回歸等問題的方法。

演算法實例:

  • 樸素貝葉斯(Naive Bayes)
  • 高斯樸素貝葉斯(Gaussian Naive Bayes)
  • 多項式樸素貝葉斯(Multinomial Naive Bayes)
  • 平均一致依賴估計器(Averaged One-Dependence Estimators (AODE))
  • 貝葉斯信念網路(Bayesian Belief Network (BBN))
  • 貝葉斯網路(Bayesian Network (BN))

貝葉斯演算法鏈接:貝葉斯演算法詳解

關聯規則學習演算法(Association Rule Learning Algorithms)

關聯規則學習方法能夠提取出對數據中的變數之間的關係的最佳解釋。比如說一家超市的銷售數據中存在規則 {洋蔥,土豆}=&> {漢堡},那說明當一位客戶同時購買了洋蔥和土豆的時候,他很有可能還會購買漢堡肉。有點類似於聯想演算法。

演算法實例:

  • Apriori 演算法(Apriori algorithm)
  • Eclat 演算法(Eclat algorithm)
  • FP-growth

關聯規則學習演算法:關聯規則學習演算法

圖模型(Graphical Models)

圖模型(GraphicalModels)在概率論與圖論之間建立起了聯姻關係。它提供了一種自然工具來處理應用數學與工程中的兩類問題——不確定性(Uncertainty)和複雜性(Complexity)問 題,特別是在機器學習演算法的分析與設計中扮演著重要角色。圖模型的基本理念是模塊化的思想,複雜系統是通過組合簡單系統建構的。概率論提供了一種粘合劑使 系統的各個部分組合在一起,確保系統作為整體的持續一致性,提供了多種數據介面模型方法。

圖模型或概率圖模型(PGM/probabilistic graphical model)是一種概率模型,一個圖(graph)可以通過其表示隨機變數之間的條件依賴結構(conditional dependence structure)。

演算法實例:

  • 貝葉斯網路(Bayesian network)
  • 馬爾可夫隨機域(Markov random field)
  • 鏈圖(Chain Graphs)
  • 祖先圖(Ancestral graph)


python 的 http://scikit-learn.org/stable/

演算法還比較全,也有隨機森林。

MATLAB 工具箱包含隨機森林演算法,如果感覺不好用,也可以用這個:randomforest-matlab -

Random Forest (Regression, Classification and Clustering) implementation for MATLAB (and Standalone)


XGBoost 最好能夠了解並使用一下,非常好,fregata也是不錯的支持大規模特徵的演算法庫


只推薦R。

對於新手來說,只有你想不到或者不知道的演算法,沒有R上面沒有的演算法。

用了R,再也不用造車輪了。

上手成本很低,基本都有非常詳細的tutorial和manual。

R的畫圖也很方便,既可以用來分析,又可以用來彙報。

(好吧,各種奇奇怪怪的演算法還是要造車輪的,尤其是各種Bayesian Models)


Python不二話,scikit-learn,想要的都有了


必須是我大scikit-learn啊,隨機森林有,而且還有自動調參的工具。。上手快,文檔全。。

另外scikit-learn適合單機跑一些小的數據集玩玩。。


theano不好在windows下面使用


我們將機器學習中最突出、最常用的演算法分為三類:線性模型、基於樹的模型、神經網路,用一張圖表簡明地指出了每一類的優勢和劣勢。

  在機器學習中,我們的目標要麼是預測(prediction),要麼是聚類(clustering)。本文重點關注的是預測。預測是從一組輸入變數來預估輸出變數的值的過程。例如,得到有關房子的一組特徵,我們可以預測它的銷售價格。預測問題可以分為兩大類:

  回歸問題:其中要預測的變數是數字的(例如房屋的價格);

  分類問題:其中要預測的變數是「是/否」的答案(例如,預測某個設備是否會故障)

  了解了這點,接下來讓我們看看機器學習中最突出、最常用的演算法。

  我們將這些演算法分為3類:線性模型、基於樹的模型、神經網路。

線性模型方法  線性模型使用簡單的公式,通過一組數據點找到「最佳擬合」的行。這一方法可以追溯到200多年前,在統計學和機器學習領域都得到廣泛應用。由於它的簡單性,它對統計學很有用。你想要預測的變數(因變數)被表示為你已經知道的變數(自變數)的方程,因此預測只是一個輸入自變數,然後算出方程的答案的問題。

  線性回歸

  線性回歸,或更準確的說法「最小二乘回歸」,是線性模型的最標準形式。對於回歸問題,線性回歸是最簡單的線性模型。其缺點是模型容易過擬合,也就是說,模型完全適應已進行訓練的數據,而犧牲了推廣到新數據的能力。因此,機器學習中的線性回歸(以及我們接下來將談到的邏輯回歸)通常是「正則化」的,這意味著模型有一定的懲罰來防止過擬合。

  線性模型的另一個缺點是,由於它們非常簡單,所以當輸入變數不獨立時,他們不容易預測更複雜些的行為。

  邏輯回歸

  邏輯回歸是線性回歸對分類問題的適應。邏輯回歸的缺點與線性回歸相同。邏輯函數對分類問題非常好,因為它引入了閾值效應。

基於樹的模型  決策樹

  決策樹是使用分支方法顯示決策的每一個可能的結果的圖示。比如說,你決定要點一份沙拉,你的第一個決策是可能是生菜的種類,然後是配菜,然後是沙拉醬的種類。我們可以在一個決策樹中表示所有可能的結果。

  為了訓練決策樹,我們需要使用訓練數據集並找出那個屬性對目標最有用。例如,在欺詐檢測用例中,我們可能發現對預測欺詐風險影響最大的屬性是國家。在以第一個屬性進行分支後,我們得到兩個子集,這是假如我們只知道第一個屬性時最能夠準確預測的。接著,我們再找出可以對這兩個子集進行分支的第二好的屬性,再次進行分割,如此往複,直到使用足夠多的屬性後能滿足目標的需求。

  有關決策樹,新智元對一篇經典文章做過介紹:【經典】機器學習可視化演示

  隨機森林

  隨機森林是許多決策樹的平均,其中每個決策樹都用隨機的數據樣本進行訓練。隨機森林中的每個樹都比一個完整的決策樹弱,但是將所有樹放在一起,由於多樣性的優勢,我們可以獲得更好的整體性能。

  隨機森林是當今機器學習中非常流行的演算法。隨機森林的訓練很容易,而且表現相當好。它的缺點是相對於其他演算法,隨機森林輸出預測可能會很慢,所以在需要快速預測時,可能不會選擇隨機森林。

  梯度提升

  梯度提升(GradientBoosting),像隨機森林那樣,也是由「弱」決策樹組成的。梯度提升與隨機森林最大的區別是,在梯度提升中,樹是一個接一個被訓練的。每個後面的樹主要由前面的樹識別錯誤的數據來訓練。這令梯度提升較少關注易於預測的情況,而更多地關注困難的情況。

  梯度提升的訓練也很快,表現也非常好。但是,訓練數據集的小小變化可以令模型發生根本性的變化,因此它產生的結果可能不是最可行的。


之前用Java做隨即森林的時候,用過WEKA庫,挺好用的,可以試試~


快速上手必須要有R的package啊

randomforest

rpart

discretization

FSelector

LVQ

svm

等等


用的較多有穩定維護基於python(底層基本都有C優化,不需要過分擔心性能問題)

基本演算法: scikit-learn

深度學習: theano(支持GPU),還有基於theano的Pylearn2

其他各種語言見 josephmisiti/awesome-machine-learning · GitHub

深度學習見 Ashara12/awesome-deep-learning · GitHub


Go 語言

sjwhitworth/golearn · GitHub


推薦閱讀:

程序語言中的取余是如何實現的?
怎樣快速求出前1到n中某一個素因子x出現的次數?
為什麼很多程序無法計算負數的立方根?

TAG:演算法 | 數據挖掘 | 機器學習 |