人工智能和機器學習領域有哪些有趣的開源項目?
投遞人 itwriter 發佈於 2014-12-02 11:21 評論(0) 有20人閱讀 原文連接 [收藏] « php
本文簡要介紹了 10 款 Quora 上網友推薦的 人工智能和機器學習領域方面的開源項目。 html
GraphLab前端
GraphLab 是一種新的面向機器學習的並行框架。GraphLab 提供了一個完整的平臺,讓機構可使用可擴展的機器學習系統創建大數據以分析產品,該java
公司客戶包括 Zillow、Adobe、Zynga、Pandora、Bosch、ExxonMobil 等,它們從別的應用程序或者服務中抓取數據,經過推薦系統、欺詐監測系統、情感python
及社交網絡分析系統等系統模式將大數據理念轉換爲生產環境下可使用的預測應用程序。( 詳情)程序員
項目主頁: http://graphlab.org/正則表達式
Vowpal Wabbit算法
Vowpal Wabbit (Fast Online Learning)最初是由雅虎研究院建設的一個機器學習平臺,目前該項目在微軟研究院。它是由 John Langford 啓動並主數據庫
導的項目。 apache
項目地址: http://hunch.net/~vw/
scikits.learn
scikit-learn 是一個開源的、構建在 SciPy 之上用於機器學習的 Python 模塊。它包括簡單而高效的工具,可用於數據挖掘和數據分析,適合於任何
人,可在各類狀況下重複使用、構建在 NumPy、SciPy 和 matplotlib 之上,遵循 BSD 協議。(詳情)
項目地址: http://scikit-learn.org/stable
Theano
Theano 是一個 python 庫,用來定義、優化和模擬數學表達式計算,用於高效的解決多維數組的計算問題。它使得寫深度學習模型更加容易,同時也
給出了一些關於在 GPU 上訓練它們的選項。( 詳情)
項目地址: http://deeplearning.net/software/theano/
Mahout
Mahout 是 Apache Software Foundation(ASF) 旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便
快捷地建立智能應用程序。Mahout 包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。此外,經過使用 Apache Hadoop 庫,Mahout 能夠有效地
擴展到雲中。
項目主頁: http://mahout.apache.org/
pybrain
pybrain 是 Python 的一個機器學習模塊,它的目標是爲機器學習任務提供靈活、易應、強大的機器學習算法。pybrain 包括神經網絡、強化學習(及
兩者結合)、無監督學習、進化算法。以神經網絡爲核心,全部的訓練方法都以神經網絡爲一個實例。
項目主頁: http://pybrain.org/
OpenCV
OpenCV 是一個基於(開源)發行的跨平臺計算機視覺庫,能夠運行在 Linux、Windows 和 Mac OS 操做系統上。它輕量級並且高效——由一系列 C 函
數和少許 C++ 類構成,同時提供了 Python、Ruby、MATLAB 等語言的接口,實現了圖像處理和計算機視覺方面的不少通用算法。( 詳情)
項目主頁: http://opencv.org/
Orange
Orange 是一個基於組件的數據挖掘和機器學習軟件套裝,它的功能即友好,又很強大,快速而又多功能的可視化編程前端,以便瀏覽數據分析和可視
化,基綁定了 Python 以進行腳本開發。它包含了完整的一系列的組件以進行數據預處理,並提供了數據賬目,過渡,建模,模式評估和勘探的功能。
項目主頁: http://orange.biolab.si/
NLTK
NLTK(natural language toolkit)是 python 的天然語言處理工具包。2001 年推出,至今發展很是活躍。它的主要做用是爲了教學,至今已經在 20
多個國家 60 多所高校使用,裏面包括了大量的詞料庫,以及天然語言處理方面的算法實現:分詞, 詞根計算, 分類, 語義分析等。
項目主頁: http://nltk.org/
Nupic
Nupic 是一個開源的人工智能平臺。該項目由 Grok(原名 Numenta)公司開發,其中包括了公司的算法和軟件架構。 NuPIC 的運做接近於人腦,「當
模式變化的時候,它會忘掉舊模式,記憶新模式」。如人腦同樣,CLA 算法可以適應新的變化。( 詳情)
項目主頁: http://numenta.org/nupic.html
--------------------------------------------------------------------------------
以上是小編整理的 10 款人工智能和機器學習領域的開源項目。更多項目可參看這個列表:http://deeplearning.net/software_links/,或查看
Quora 中更多網友的精彩回答。
C++在「商業應用」方面,曾經是天下第一的開發語言,但這一桂冠已經被java搶走多年。由於當今商業應用程序類型,已經從桌面應用迅速轉移成
Web應用。當Java橫行天下以後,MS又忽然發力,搞出C#語言,有大片的曾經的C++程序員,覺得C++要就此沉淪,未料,這三年來,C++的生命力忽然被嚴重
地加強了。主力緣由就是開源的軟件、基礎軟件(好比並發原生支持,好比Android一定要推出原生的SDK)、各類跨平臺應用的出現。
開源C++庫必須具備如下特色:必須是成熟的產品、跨平臺的產品、相對通用的庫。
1、通用標準類
STL:C++標準模板庫,也是開源的。
boost:C++準標準庫,它是強大地,江湖稱之「千錘百煉」。
-------若掌握,必橫行世界。
deelx (輕量級的正則表達式解析類庫,國產),boost裏有強大的正則表達式解析庫,但若是你只想要一個表達式解析,不想要拖上龐大的boost
庫時……支持一下國貨。
iconv /iconvpp : (C形式的編碼轉換函數庫,
2、XML解析庫
C++的XML相關庫很多,可是大部分其實都是C庫,使用起來天然不那麼輕便。其中基於DOM的有TinyXml,基於SAX的固然是Xerces。前者小巧快捷
,便於使用,適合作數據交換。後者則是全功能的XML解析器。
xerces-c :最強大的XML解析庫了,不是僅僅在開源庫裏,你儘管把商業的算在內。固然,它的變體,被IBM拿去賣錢的那個版本,多了數百兆的
東東來支持各國編碼轉換,是更強大,但我以爲有小小的,開源的iconv在前不就夠了?
對三個輕型xml解析開源庫:SlimXml、TinyXml、RapidXml,對好比下:
解析這個3.3萬行,1.5M大小的xml,三個庫分別花了
· SlimXml: 22ms
· TinyXml: 54ms
· RapidXml: 4ms!
結論是,RapidXml果真很強悍,竟然比SlimXml快5倍多。
比較欣慰的是,在沒有很關注效率的狀況下,SlimXml仍然比TinyXml快 2.5倍。SlimXml走的是簡單小巧路線,源代碼只有 32k,而TinyXml和
RapidXml的源碼分別是147k和141k,有這樣的效率能夠滿意了。由於這個庫主要仍是針對幾十上百行的小文件,解析特別大的xml不在我考慮的範圍以內。
還有irrlicht(鬼火引擎)的irrXMl解析器。
xsd (XML 與 C++數據結構的綁定工具)。
3、數據庫
我比較喜歡OTL(用於鏈接數據庫)。其餘的沒用過
4、多媒體類
SDL (Simple DirectMedia Layer/多媒體直接訪問層,用於遊戲編程)。
相應的c開源庫有ffmpeg、mpeg四、aac、avc、libmad、mpeg一、flac、ac三、ac三、matroska著名的多媒體播放器 TCPMP 天下聞名的跨平臺、嵌入式
手持設備視頻播放器,
5、網絡開發類
一、gSOAP SOAP協議的C++支持庫及代碼生成工具。
二、ACE 網絡編程研究首選。
ACE適合於研究,大型網絡編程上效率不足,大型網遊裏面幾乎沒有用到ACE的,不少用了ACE的項目也被證實了效率不高。
除了ACE以外,還有不少系統和網絡編程方面的程序庫。好比在線程庫方面,還有ZThread、boost::thread,若是放大到C/C++ 領域, 還有APR,還
有CII。在文件和目錄操做方面,boost也有相應的組件,而在網絡編程方面有socket++,還有boost::asio,將來的C++0X中幾乎確定有一個網絡編程和一個
線程庫。然而目前看來,ACE仍然是進行系統和高性能網絡編程的首選,其地位在一段時間內不會被撼動。它不可是 一個實用的程序庫、框架集,仍是一個
典範的設計模式應用範例,很是值得學習。
三、開源C++庫,稱爲POCO(POrtable COmponents – 可移植元件),很是方便好用。
特性:
* 線程,程序同步及多線程編程高級抽象
* 流及文件系統訪問
* 共享庫將類加載
* 功能強大的日誌和錯誤報告
* 安全及加密
* 網絡編程 (TCP/IP 套接字, HTTP客戶端和HTTP服務器, FTP, SMTP, POP3, 等)
* XML解析 (SAX2 和 DOM) 及生成
* 配置文件及選項處理
* SQL數據庫訪問(ODBC, MySQL, SQLite)
能夠運行的平臺包括:
* Windows
* Mac OS X
* iPhone OS
* (embedded) Linux
* HP-UX
* Tru64
* Solaris
* QNX
6、GUI庫
BCG Windows平臺下界面設計的第三方庫,可讓你的界面更美好,更具時 代感。
wxWidgets :使用wxWidgets ,開發者能夠基於同一套代碼,爲Win32, Mac OS X, GTK+, X11, Motif, WinCE等平臺開發應用程序。wxWidgets庫可
以被C++, Python, Perl, and C#/.NET等開發語言使用。跟其它有些一樣支持跨平臺GUI開發工具不一樣,基於wxWidgets的應用,擁有真實本地化的視覺及使
用效果——因 爲,wxWidgets使用(各)平臺原生的控件,而不是簡單經過貼圖去模擬。wxWidgets是使用普遍的,自由的,開源的,成熟的。
QT-------------界面(GUI)開發,支持C++/Java/Python/...多種語言。跨平臺。最主要的好處是,API很是優 美!Qt自己也不只僅只是作GUI編
程,實際它基本上能夠作OS-API能夠作的任何事情。象網絡/數據庫/OpenGL/...都提供完美的支持。
傳統上Qt被認爲是可移植的GUI庫,但實際上Qt如今已是一個比較完整的可移植應用程序框架了,其中包含了大量的工具,好比正則表達式、
Web和 Socket類、2D和3D圖形、XML解析、SQL類等,甚至還包括了一個完整的容器類庫,不過其王牌仍是GUI。在目前的跨平臺GUI框架中,Qt成 熟度最高
,已經被一些大公司應用在關鍵產品中。因爲Trolltech對Qt採用的dual license模式,該產品既能夠從開源社區得到支持,又可以賺取足夠的商業利潤,
所以其前景也使人比較有信心。
Qt的主要技術特點是其元對象模型。Qt實際上使用的並非標準的C++,而是標準C++的一個擴展。它經過元對象模型擴展,實現了著名的
signal/slot機制,而這一機制也成爲Qt的最大特點和優點。
與Qt相似的可移植GUI框架還有wxWidget、FOX等
六. 計算機視覺
OpenCV,因特爾自主的開源庫。支持C/C++/Python接口。這個感興趣的朋友能夠玩一下。若是結合OpenCV,你能夠作一些外行人以爲很酷的程序。好比
說用它的人臉識別函數,來對你的攝像頭進行處理,判斷人的動做等。
七. 圖形圖像處理
GDAL,處理大圖像。要是GIS專業的人確定會語言到很是大的tif影像,動則幾個GB的航空影像。GDAL對大圖像的讀寫支持是很是棒的(像多波段的圖像均可
以搞定)。支持C++/Java/Python...
國外開源的GIS軟件QGIS就是用了gdal
c的圖形圖像庫較多,libjpeg、libpng、zlib、tiff、JBIG、最著名的開源形圖像處理軟件Cximage
8、內存管理:boost::smart_ptr,Hans-Boehm GC
C/C++的內存管理是一個永恆的話題。通常來講,C++的開發者傾向於本身管理內存。然而,出乎不少C++開發者意料的是,近期C++的一些領袖人物
已 經公開宣稱,若是不配備自動內存管理機制,用C++編寫安全可靠的大型程序是很是困難的。 而Bjarne Stroustrup也曾對中國開發者建議,若是沒
有特別的理由,應該在大型項目中使用自動內存管理工具。所以,今天的C++開發者應當積極地學習和應用 自動內存管理設施。
說到自動內存管理,比較輕量級的作法是boost::smart_ptr,而激進的作法是引入完整的GC機制。目前開源而又比較可靠的GC中,Hans- Boehm GC
無疑是最受信賴的。做爲一個保守的GC,Hans-Boehm GC在性能和功能方面都算是卓越。特別是,使用這個GC,你仍然能夠delete、free來本身管理內存,
對於咱們編程習慣的衝擊比較小。
9、密碼及安全:OpenSSL
安全是今天進行C/C++編程沒法迴避和必須重視的問題。然而編寫安全的應用程序,特別是跟網絡相關的C/C++應用程序,是一件十分困難的事情。
特別是涉及到大量的安全、密碼學相關的算法、規範,若是讓開發者本身摸索,其工做量和難度達到了不現實的程度。所以必須藉助可靠的相關程序庫纔有
可能提升程序的安全性。藉助第三方安全保護平臺,給程序作加密保護。在安全庫這方面,OpenSSL是目前最好的選擇,其內容之全面可靠,已經成爲業界
標杆。在應用程序加密保護這塊,愛加密是很是專業的。然而,因爲安全編程固有的複雜性,即便使用penSSL,開發工做仍然是很是繁瑣的。所以咱們也希
望可以儘快看到更簡單、更易用的C/C++安全程序庫。
10、矩陣計算:MTL
自1995年以來,C++在科學計算領域當中取得了巨大的突破。這主要歸功於template技術的高級應用,使得C++在科學計算的性能方面取得了巨大
的進步,一大批優秀的C++科學計算庫涌現出來。好比Blitz++、POOMA、MTL、Boost::uBLAS。而這其中,MTL就功能豐富程度、 性能、開發支持和成熟程度
來說,是比較突出的一個,所以能夠優先考慮。值得一提的是,2002年,MTL與後來被Intel收購的KAI C++配合,曾經在性能評測中擊敗了FORTRAN。
11、中間件
一、分佈式對象中間件:ICE
ICE是分佈式對象中間件領域裏的後起之秀,能夠大體地將其視爲「改進版」的CORBA。目前應用在一些大型項目當中,其中包括波音公司主持的下
一代陸軍做戰系統。
ICE的一個特別價值是其代碼的範例意義。因爲ICE的出現較晚,開發者比較系統地應用了新的C++編程風格,因此成爲了研讀C++代碼的良好目標。
二、消息中間件:ZeroMQ,總結的幾種特性以下:
1) 消息系統中,它差很少是最簡潔的,只是個簡潔的API,有n多種語言的綁定,沒有專門的服務器;
2) 性能很是優越,遠遠高於RabbitMQ、ActiveMQ、MSMQ等;
3) 適合作分佈式和併發應用。
12、正則表達式:boost::regex
正則表達式是編程工做中最強有力的工具之一。C++的正則表達式支持一直以來是一個軟肋。大約在2001年左右,boost中出現了regex庫,初步解
決了這個問題。可是最初的regex不管在效率上仍是可靠性方面都有一些問題,後來通過一次大規模的翻修以後,達到了比較完善的程度。其餘能夠選擇的
替代品還有C語言的pcre庫,Qt中的QRegExp類等。
十3、配置管理:Lua
隨着軟件系統愈來愈複雜,對軟件的可配置型提出了愈來愈高的要求。傳統上只要經過命令行參數來配置的系統,如今可能須要愈來愈多的方式和
機制。目前愈來愈 受歡迎、而且獲得愈來愈多證明的作法,是將Lua嵌入到C/C++程序中,而用Lua程序做爲配置腳本。這種作法的優點是,Lua語言強大靈
活,能夠適應 複雜的配置要求。同時,Lua便於嵌入C/C++程序,並且編譯執行速度很是快,能夠說是目前解決C/C++程序配置管理問題的一個出色方案。
十4、3D遊戲引擎:
1. Irrlicht http://irrlicht.sourceforge.net/
始於2003,次年即被評爲最佳開源遊戲引擎。官方支持C++和.Net,拓展語言綁定包含java,perl,ruby,python.跨平臺支持,使用D3D,OpenGL以及自
帶API.
優勢:容易上手;跨平臺;自帶XML解析器;大的社區;
缺點:最近開發慢下來了
2. Panda3D http://www.panda3d.org/
由迪斯尼開發,卡耐基-梅隆娛娛樂科技中心支持。Python是官方推薦語言。也支持C++。
優勢:有用的社區;大量功能;按期開發;
缺點:缺少工具支持;極差的文檔;
3. OGRE http://www.ogre3d.org/
圖像引擎中最好的一個。2000年立的項。推薦使用C++語言。須要很是熟悉編程才行。初學者不宜。
優勢:大量功能;優異的文檔;大規模的社區;活躍的開發
缺點:不適合初哥;只有圖像引擎
4. Crystal Space http://www.crystalspace3d.org/main/Main_Page
1997年發行,用C++編寫的開源遊戲引擎。推薦使用C++
優勢:不錯的社區支持;大量功能;
缺點:難學;
五、Delta3d ?http://www.delta3d.org/index.php
Delta3D是一款由美國海軍研究學院(Naval Postgraduate School)開發的全功能遊戲與仿真引擎,獲得美國軍方巨大的支持與豐厚的投資。該引
擎應用領域極爲普遍,如開發在培訓、教育、娛樂行業和科學計算可視化領域等方面建模與仿真的軟件。
它的標準化設計把一些知名開源軟件和引擎 如 Open Scene Graph(OSG), OpenDynamicsEngine (ODE), Character Animation Library
(CAL3D), 還有 OpenAL融爲一體。Delta3D經過對這些底層模塊進行隱藏封裝,整合在一塊兒從而造成了一個使用更加方便的高級API 函數庫,使得開發者在
必要的時候可以使用底層函數進行二次開發。Delta3D在軟件系列中,處於中間層(Middle layer)的位置上。
優勢:適合各類3D遊戲,仿真,很全面。一直在作更新。
缺點:參考資料比較少。中文文檔也比較少。官方參考資料比較少。可是讀源代碼能夠加快理解,應用。