自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個開源機器學(xué)習(xí)框架新手入門,Scikit-learn的那些事兒

人工智能 機器學(xué)習(xí)
對Python語言有所了解的科研人員可能都知道SciPy——一個開源的基于Python的科學(xué)計算工具包?;赟ciPy,目前開發(fā)者們針對不同的應(yīng)用領(lǐng)域已經(jīng)發(fā)展出了為數(shù)眾多的分支版本,它們被統(tǒng)一稱為Scikits,即SciPy工具包的意思。而在這些分支版本中,最有名,也是專門面向機器學(xué)習(xí)的一個就是Scikit-learn。

對Python語言有所了解的科研人員可能都知道SciPy——一個開源的基于Python的科學(xué)計算工具包?;赟ciPy,目前開發(fā)者們針對不同的應(yīng)用領(lǐng)域已經(jīng)發(fā)展出了為數(shù)眾多的分支版本,它們被統(tǒng)一稱為Scikits,即SciPy工具包的意思。而在這些分支版本中,最有名,也是專門面向機器學(xué)習(xí)的一個就是Scikit-learn。

Scikit-learn項目最早由數(shù)據(jù)科學(xué)家 D**id Cournapeau 在 2007 年發(fā)起,需要NumPy和SciPy等其他包的支持,是Python語言中專門針對機器學(xué)習(xí)應(yīng)用而發(fā)展起來的一款開源框架。

和其他眾多的開源項目一樣,Scikit-learn目前主要由社區(qū)成員自發(fā)進行維護??赡苁怯捎诰S護成本的限制,Scikit-learn相比其他項目要顯得更為保守。這主要體現(xiàn)在兩個方面:一是Scikit-learn從來不做除機器學(xué)習(xí)領(lǐng)域之外的其他擴展,二是Scikit-learn從來不采用未經(jīng)廣泛驗證的算法。

本文將簡單介紹Scikit-learn框架的六大功能,安裝和運行Scikit-learn的大概步驟,同時為后續(xù)各更深入地學(xué)習(xí)Scikit-learn提供參考。原文來自infoworld網(wǎng)站的特約撰稿人Martin Heller,他曾在1986-2010年間做過長達20多年的數(shù)據(jù)庫、通用軟件和網(wǎng)頁開發(fā),具有豐富的開發(fā)經(jīng)驗。

Scikit-learn的六大功能

Scikit-learn的基本功能主要被分為六大部分:分類,回歸,聚類,數(shù)據(jù)降維,模型選擇和數(shù)據(jù)預(yù)處理。

分類是指識別給定對象的所屬類別,屬于監(jiān)督學(xué)習(xí)的范疇,最常見的應(yīng)用場景包括垃圾郵件檢測和圖像識別等。目前Scikit-learn已經(jīng)實現(xiàn)的算法包括:支持向量機(SVM),最近鄰,邏輯回歸,隨機森林,決策樹以及多層感知器(MLP)神經(jīng)網(wǎng)絡(luò)等等。

需要指出的是,由于Scikit-learn本身不支持深度學(xué)習(xí),也不支持GPU加速,因此這里對于MLP的實現(xiàn)并不適合于處理大規(guī)模問題。有相關(guān)需求的讀者可以查看同樣對Python有良好支持的Keras和Theano等框架。

回歸是指預(yù)測與給定對象相關(guān)聯(lián)的連續(xù)值屬性,最常見的應(yīng)用場景包括預(yù)測藥物反應(yīng)和預(yù)測股票價格等。目前Scikit-learn已經(jīng)實現(xiàn)的算法包括:支持向量回歸(SVR),脊回歸,Lasso回歸,彈性網(wǎng)絡(luò)(Elastic Net),最小角回歸(LARS ),貝葉斯回歸,以及各種不同的魯棒回歸算法等??梢钥吹?,這里實現(xiàn)的回歸算法幾乎涵蓋了所有開發(fā)者的需求范圍,而且更重要的是,Scikit-learn還針對每種算法都提供了簡單明了的用例參考。

聚類是指自動識別具有相似屬性的給定對象,并將其分組為集合,屬于無監(jiān)督學(xué)習(xí)的范疇,最常見的應(yīng)用場景包括顧客細分和試驗結(jié)果分組。目前Scikit-learn已經(jīng)實現(xiàn)的算法包括:K-均值聚類,譜聚類,均值偏移,分層聚類,DBSCAN聚類等。

數(shù)據(jù)降維是指使用主成分分析(PCA)、非負矩陣分解(NMF)或特征選擇等降維技術(shù)來減少要考慮的隨機變量的個數(shù),其主要應(yīng)用場景包括可視化處理和效率提升。

模型選擇是指對于給定參數(shù)和模型的比較、驗證和選擇,其主要目的是通過參數(shù)調(diào)整來提升精度。目前Scikit-learn實現(xiàn)的模塊包括:格點搜索,交叉驗證和各種針對預(yù)測誤差評估的度量函數(shù)。

數(shù)據(jù)預(yù)處理是指數(shù)據(jù)的特征提取和歸一化,是機器學(xué)習(xí)過程中的***個也是最重要的一個環(huán)節(jié)。這里歸一化是指將輸入數(shù)據(jù)轉(zhuǎn)換為具有零均值和單位權(quán)方差的新變量,但因為大多數(shù)時候都做不到精確等于零,因此會設(shè)置一個可接受的范圍,一般都要求落在0-1之間。而特征提取是指將文本或圖像數(shù)據(jù)轉(zhuǎn)換為可用于機器學(xué)習(xí)的數(shù)字變量。

需要特別注意的是,這里的特征提取與上文在數(shù)據(jù)降維中提到的特征選擇非常不同。特征選擇是指通過去除不變、協(xié)變或其他統(tǒng)計上不重要的特征量來改進機器學(xué)習(xí)的一種方法。

總結(jié)來說,Scikit-learn實現(xiàn)了一整套用于數(shù)據(jù)降維,模型選擇,特征提取和歸一化的完整算法/模塊,雖然缺少按步驟操作的參考教程,但Scikit-learn針對每個算法和模塊都提供了豐富的參考樣例和詳細的說明文檔。

安裝和運行Scikit-learn

如前所述,Scikit-learn需要NumPy和SciPy等其他包的支持,因此在安裝Scikit-learn之前需要提前安裝一些支持包,具體列表和教程可以查看Scikit-learn的官方文檔: http://scikit-learn.org/stable/install.html ,以下僅列出Python、NumPy和SciPy等三個必備包的安裝說明。

Python:https://www.python.org/about/gettingstarted/

NumPy:http://www.numpy.org/

SciPy:http://www.scipy.org/install.html

假定已經(jīng)完整安裝了所有支持包,那么利用安裝Scikit-learn只需要簡單的一條簡單的pip命令(也可以用conda命令,詳見官方文檔):

  1. $ sudo pip install -U scikit-learn 

這里加上sudo是為了避免安裝過程中出現(xiàn)一些權(quán)限問題,如果用戶已經(jīng)確保了管理員權(quán)限也可以省略。

當(dāng)然,開發(fā)者也可以選擇自己到GitHub開源平臺上下載Scikit-learn的源代碼,解壓后在根目錄鍵入make自行編譯和連接可執(zhí)行文件,效果是一樣的。另外,為了確保測試方便,高級用戶還可以選擇安裝針對Python的測試框架nose,安裝方法詳見其官方說明: http://nose.readthedocs.io/en/latest/ 。

通過Jupyter Notebook工具運行Scikit-learn樣例的過程也很簡單,用戶只需要在官方給出的樣例庫: http://scikit-learn.org/stable/auto_examples/index.html#general-examples 選擇一個樣例,然后在頁面中下載其Python源碼和IPython notebook文件,借著通過Jupyter Notebook工具運行就可以了。假如選擇了交叉驗證預(yù)測的樣例,那么其運行情況的截圖如下所示。

原作者在這里表示,Scikit-learn是他測試過的最簡單易用的機器學(xué)習(xí)框架。他表示,Scikit-learn樣例的運行結(jié)果和文檔描述一模一樣,API接口的設(shè)計合理且一致性高,而且?guī)缀醪淮嬖?ldquo;阻抗不匹配”的數(shù)據(jù)結(jié)構(gòu),使用這種功能完善且?guī)缀鯖]有Bug的開源框架進行機器學(xué)習(xí)研究,無疑是一件值得高興的事。

更深入地學(xué)習(xí)Scikit-learn

如前所述,Scikit-learn針對每個算法和模塊都提供了豐富的參考樣例和詳細的說明文檔,據(jù)官方的統(tǒng)計大約有200多個。而且為了清晰明白,絕大多數(shù)樣例都至少給出了一張由Matplotlib繪制的數(shù)據(jù)圖表。這些都是官方提供的學(xué)習(xí)Scikit-learn框架最直接有效的學(xué)習(xí)材料。

針對科學(xué)數(shù)據(jù)處理的應(yīng)用場景,官方還給出了一個更為詳細和全面的參考教程:A tutorial on statistical-learning for scientific data processing,其中包括統(tǒng)計學(xué)習(xí)、監(jiān)督學(xué)習(xí)、模型選擇和無監(jiān)督學(xué)習(xí)等若干部分,內(nèi)容覆蓋全面,講解細致,并且使用了真實的數(shù)據(jù)、代碼和圖表。

另外,教程中還調(diào)用了與文本相關(guān)的樣例,例如下圖所示的四個不同SVM分類器的比較。

這里需要指出的是,雖然運行Scikit-learn官方給出的樣例后通常都能得到一致的結(jié)果,但大多數(shù)情況下系統(tǒng)都會拋出警告信息。作者認為拋出警告信息的原因來自兩個方面:一是蘋果vecLib框架本身對Scikit-learn支持不好(作者用的是MacOS),二是樣例中使用的Python版本可能是早期的版本,而實際運行中是***的版本。例如下圖中是使用Python 2.7.10版本拋出的警告信息,而Scikit-learn官方頁面上并沒有出現(xiàn)。

總體上來說,作為專門面向機器學(xué)習(xí)的Python開源框架,Scikit-learn可以在一定范圍內(nèi)為開發(fā)者提供非常好的幫助。它內(nèi)部實現(xiàn)了各種各樣成熟的算法,容易安裝和使用,樣例豐富,而且教程和文檔也非常詳細。

另一方面,Scikit-learn也有缺點。例如它不支持深度學(xué)習(xí)和強化學(xué)習(xí),這在今天已經(jīng)是應(yīng)用非常廣泛的技術(shù),例如準確的圖像分類和可靠的實時語音識別和語義理解等。此外,它也不支持圖模型和序列預(yù)測,不支持Python之外的語言,不支持PyPy,也不支持GPU加速。

看到這里可能會有人擔(dān)心Scikit-learn的性能表現(xiàn),這里需要指出的是:如果不考慮多層神經(jīng)網(wǎng)絡(luò)的相關(guān)應(yīng)用,Scikit-learn的性能表現(xiàn)是非常不錯的。究其原因,一方面是因為其內(nèi)部算法的實現(xiàn)十分高效,另一方面或許可以歸功于Cython編譯器:通過Cython在Scikit-learn框架內(nèi)部生成C語言代碼的運行方式,Scikit-learn消除了大部分的性能瓶頸。

應(yīng)該明確的一點是:雖然概括地說Scikit-learn并不適合深度學(xué)習(xí)問題,但對于某些特殊場景而言,使用Scikit-learn仍然是明智的選擇。例如要創(chuàng)建連接不同對象的預(yù)測函數(shù)時,或者在未標(biāo)記的數(shù)據(jù)集中為了訓(xùn)練模型對不同的對象進行分類時,面對這些場景Scikit-learn只通過普通的舊機器學(xué)習(xí)模型就能很好地解決,而并不需要建立數(shù)十層的復(fù)雜神經(jīng)網(wǎng)絡(luò)。

就好像喜歡Scala語言的人會選擇Spark ML,喜歡繪制圖表和偶爾編寫少量Python/R語言代碼的人會選擇微軟Cortana和Azure一樣,對于那些Python語言的死忠粉而言,Scikit-learn可能是各種機器學(xué)習(xí)庫中的***選擇。

責(zé)任編輯:武曉燕 來源: 與非網(wǎng)
相關(guān)推薦

2015-07-22 16:16:47

PythonScikit-Lear機器學(xué)習(xí)

2017-01-05 10:07:33

大數(shù)據(jù)TheanoCaffe

2023-05-26 12:45:22

predict?方法數(shù)據(jù)

2022-04-15 10:11:03

機器學(xué)習(xí)scikit-lea

2018-09-06 08:00:00

深度學(xué)習(xí)TensorFlowPython

2017-11-03 12:57:06

機器學(xué)習(xí)文本數(shù)據(jù)Python

2024-02-01 09:43:32

模型人工智能

2013-12-24 10:04:01

PostgreSQL

2011-02-21 17:51:39

Zimbra入門新手

2009-06-17 14:36:02

學(xué)習(xí)Java心得

2011-04-01 10:18:22

NoSQLCouchDB

2021-05-12 09:58:09

PythonXGBoostscikit-lear

2011-03-22 11:06:52

Nagios安裝

2011-01-10 14:36:00

新手linux基礎(chǔ)

2011-05-31 16:47:47

SEO

2023-09-14 15:42:39

ArkTS鴻蒙

2015-07-30 09:53:57

新手入門

2018-10-15 09:10:09

Python編程語言數(shù)據(jù)科學(xué)

2023-02-13 15:00:13

機器學(xué)習(xí)scikit-leaPyTorch

2010-06-08 16:22:20

點贊
收藏

51CTO技術(shù)棧公眾號