通用術語表和API元素?
該通用術語表盡可能準確地呈現在Scikit-learn及其API中使用的默認和隱式約定,同時為Scikit-learn用戶和貢獻者提供參考。該術語表旨在描述概念、詳細說明與此概念相對應的API、或提供鏈接至文檔的其他相關部分。通過鏈接到《API參考和用戶指南》中的術語表條目,我們可以最大程度地減少表達中冗余和不一致。
我們從列出通用概念(以及那些不能被用于Scikit-learn環境之外的概念)開始,不過在下面我們還列出了更具體的相關術語表,他們分別是:類API和估算器類型,目標類型,方法,參數,屬性,數據和樣本屬性。
通用概念
(譯者注:原文中的通用概念使用alphabet字母表方式排序,因此譯者在翻譯時保留原順序及部分英文注釋,以供參考)
1d
1d array
一維數組。一個使用.shape命令后返回的長度為1的NumPy數組。一個向量。
2d 2d array
二維數組。一個使用.shape命令后返回的長度為2的NumPy數組。通常代表一個矩陣。
應用程式界面 API/Application Programming Interface
既指在Scikit-learn中用以實現的估計器的特定接口,又指本術語表中所述、且在《貢獻者文檔》(contributor document)中描述的各種估計器類型之間的通用約定。
在《API參考》中,我們詳細記錄了構成Scikit-learn的公共API的特定接口。但是,如果訪問某個接口所需的所有標識符都不以符號_(單下劃線)開頭,那么我們就不會正式將該接口視為公共API。我們通常會嘗試維護公共API中所有對象的向后兼容性。
相對的,我們不能確保私有API,包括函數、模塊和以_(單下劃線)開頭的方法是穩定的。
類數組 array-like
類數組是用來輸入Scikit-learn學習估計器和函數的最常見數據格式,它代表numpy.asarray會生成的任何類型對象。通常,numpy.asarray會生成具有適當數據類型(通常為數字)的適當結構(通常為1或2維)的數組。
類數組包括:
任意numpy數組
任意由數字組成的列表
由數字組成的列表組成的長度為k的列表,其中k是一個固定的長度
所有列均為數字的pandas.DataFrame結構
任意由數字組成的pandas.Seires結構
類數組不包括:
稀疏矩陣 任意迭代器 任意生成器
請注意,scikit-learn的估算器和函數(例如預測函數)的輸出通常應為數組、稀疏矩陣或數組及稀疏矩陣組成的列表(比如說,在多輸出的類tree.DecisionTreeClassifier中,接口predict_proba的輸出結果就是一個數組的列表)。若一個估算器的預測接口predict()返回單獨的列表或pandas.Series結構,則這個估算器是無效的。
屬性 attribute/attributes
我們主要使用屬性來說明擬合期間模型的信息是如何存儲在估算器上的。我們規定,在過程fit或partial_fit中,估算器實例上存儲的任何公共屬性都必須以字母字符開頭,且以單個下劃線(_)結束。全部內容已經被記錄在估算器的”屬性”文檔。存儲在屬性中的信息通常為:預測或轉換所必須的統計或數字信息、轉導輸出結果例如labels_或embedding_、或診斷數據,例如feature_importances_。常用屬性在下文中均有列出。
公共屬性的名稱可能與構造函數中參數的名稱相同,并帶有單個下劃線_作為后綴。這些公共屬性被用于存儲用戶輸入數據的經過驗證或估計的版本。例如,參數n_components被用于構造類decomposition.PCA,根據此參數,PCA與其他參數和數據一起估計出了屬性n_components_。
更多被用于預測、轉換等功能中的私有屬性可以在擬合時同時被設定。這些屬性都以一個下劃線開頭,scikit-learn官方并不能保證其對公眾訪問的穩定性。
估算器實例中那些不以下劃線結尾的公共屬性應該是同名的__init__參數中存儲的下來的、未修改的值。由于存在這種等效關系,因此這些公共屬性都記錄在估算器的“參數”文檔中。
向后兼容 backwards compatibility 我們通常會嘗試在各個發行版之間保持向后兼容性(即,接口和行為可以擴展,但不能更改或刪除),但這有一些例外:
僅針對公共API
通過專用標識符(以_開頭的對象)訪問的對象的行為可能在版本之間被任意更改。
與文件保持一致
通常,我們將假定用戶(貢獻者或使用者)遵守官方文件中聲明的參數類型和范圍。如果文檔中要求提供列表,但用戶給出了元組,我們不能保證版本之間的行為一致。
棄用(Deprecation)
當決定棄用scikit-learn中某些類的行為時,會存在一個棄用期,棄用期通常會覆蓋兩個版本。棄用期過后,類的行為可能會發生變化。棄用警告是通過Python的警告模塊發布。
關鍵字實參(Keyword arguments)
有時我們可能會假設所有可選參數(除了X和y以及其他相似的方法)僅作為關鍵字實參傳遞,并且可能在位置上重新排序。
(譯者注:實參是指實際傳入函數或類的參數,輸出函數或類后可以得出具體結果,與之對比的是在編寫函數或類的時候設置的一系列參數名稱,被稱為形參。在編程世界中,實參的英文是arguments,形參的英文是parameters,在未說明的情況下,兩者可混用且都指代形參parameters。)
錯誤修復和功能增強
錯誤修復和(較少見)增強功能可能會更改估算器的行為,包括對使用相同數據和random_state訓練的估算器的預測。發生這種情況時,我們嘗試在變更日志中清楚地注明。
序列化
在一個版本中序列化一個估算器后,我們無法保證這個估算器在反序列化過程中不被反序列化成后續版本中的等效模型(譯者注:即無法保證序列化后的估算器在版本更新后一定能夠被保留)。對于sklearn程序包中的估算器,若發現反序列化時版本不符的情況,我們會發出警告,即便反序列化后的模型可能沒有被新版本中的等效模型替代。具體內容請參閱《安全性和可維護性限制》文檔(Security & maintainability limitations)。
utils.estimator_checks.check_estimator
我們為估算器檢查提供了有限的向后兼容性保證:我們可能會對使用此功能測試的估算器增加額外的要求,通常是在非正式假設但未正式測試的情況下。
盡管存在這份與用戶之間的非正式合同,我們依然會按照許可證中的說明提供整個scikit-learn的軟件服務。當發行版無意中引入了不向后兼容的更改時,我們把這些更改稱為軟件回歸(software regressions)。
可調用的 callable
能夠使用__call__方法的函數、類或對象;作為方法callable()的參數會使callable()返回true的任何對象。
分類特征 Categorical feature
分類特征或名義特征(又稱為名義變量)是指在整個數據總體上具有有限的一組離散值的特征。這些通常表示為整數或字符串列。字符串通常被scikit-learn估算器拒絕,并且整數將被視為有序數值或計數值。為了與大多數估計器一起使用,分類變量應進行獨熱編碼(one-hot)。值得注意的例外包括基于樹的模型,例如隨機森林和梯度增強模型,這些模型結合整數編碼的分類變量后可以更好、更快地工作。 OrdinalEncoder可幫助將字符串值的分類特征編碼為有序的整數,OneHotEncoder可用于對分類特征進行獨熱編碼。另請參閱編碼分類特征和分類編碼包,以獲取與編碼分類特征相關的工具。
克隆 clone 克隆的 cloned
當需要復制一個估算器實例,以創造一個具有完全相同參數、但沒有任何擬合屬性的新估算器,使用工具克隆。
調用fit時,元估算器通常會在擬合克隆的實例之前先克隆包裝的估算器實例。(出于歷史遺留原因,Pipeline和FeatureUnion屬于例外。)
普通測試 common tests
這指的是在Scikit-learn中幾乎每個估計器類上都要運行的、以檢查估算器是否符合基本的API約定的測試。它們可通過utils.estimator_checks.check_estimator外部使用,大多數實現在文件sklearn/utils/estimator_checks.py中。
注意:目前,常見測試機制的一些例外情況現在已硬編碼到庫中,但是我們希望通過使用語義估算器標簽來標注這些估算器上的異常行為,以此代替硬編碼。
棄用 Deprecation
我們使用棄用來慢慢違反我們的向后兼容性保證,通常是為了:
更改參數的默認值;或
刪除參數,屬性,方法,類等。
通常,當準備棄用的元素被使用的時候,我們會發出警告,盡管警告可能會被限制。例如,當某人設置了已棄用的參數時,我們會發出警告,但是當他們訪問estimator實例上的參數屬性時,可能不會發出警告。
具體請參閱《貢獻者指南》(Contributors' Guide)。
維度 dimensionality
可用于表示特征的數量(即n_features)或二維特征矩陣中的列的數量。但是,尺寸也用于指代NumPy矩陣形狀的長度,比如,將1d陣列與2d矩陣區分開。
文檔說明 docstring
模塊,類,函數等的嵌入式文檔,通常以字符串的形式被寫入對象定義的代碼中,并出現在對象定義的開頭,同時,這個文檔可以通過對象的__doc__屬性進行訪問。
我們嘗試遵守Python的PEP257約定(《如何規范書寫文檔說明》),同時也遵循NumpyDoc中的約定。
雙下劃線 double underscore 雙下劃線符號 double underscore notation
在為嵌套的估算器指定參數名稱時,在某些情況下,雙下劃綫__可用于在部分內容中區分父估算器和子估算器。最常見的用途是通過帶有set_params的元估算器設置參數,從而在參數搜索中指定搜索網格。更多可參見《參數》(Parameter)。雙下劃線也用在類pipeline.Pipeline.fit中,用于將樣本屬性傳入管道中數個估算器的擬合方法(fit)中。
數據類型 dtype 數據類型 data type
NumPy數組始終假整個數組由相同數據類型構成,這個數據類型可在數組(或稀疏矩陣)的.dtype屬性找到。我們通常假定scikit-learn數據的簡單數據類型為:浮點數或整數。在編碼或向量化之前,我們也支持以數組形式存在的對象或字符串數據類型。需要注意的是,我們的估算器不適用于結構數組(struct array)。
待辦事項:提及效率和精度問題;投放政策。
鴨子類型 Duck typing
(譯者注:鴨子類型是計算機編程中常用的概念。它有一個形象的解釋:當看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。當計算機需要確認某個變量的類型時,我們可以嘗試調用這個變量的某些屬性來幫助判斷。例如,產出離散值的估算器是分類器,所以如果我們能夠對某個變量調用離散的預測結果,則可以認為這個變量是分類器。Scikit-learn中大規模使用了鴨子類型,用以對輸入和輸出結果進行判斷。)
我們嘗試應用鴨子類型來幫助確定如何處理一些輸入值(例如,檢查給定的估算器是否為分類器)。也就是說,我們盡可能地避免使用isinstance來進行判斷,而是依靠屬性的存在或不存在來確定對象的行為。使用此方法時,則需要注意一些細微差別:
對于某些估算器,一些屬性僅在擬合后才可以被調用。例如,我們無法先驗確定在網格搜索中是否可使用predict_proba,因為在網格搜索流水線的最后一步中包括概率和非概率預測變量之間的交替。在下文中,我們僅在將clf擬合到某些數據后才能確定clf是否是概率性的:
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import SGDClassifier
clf = GridSearchCV(SGDClassifier(),
param_grid={'loss': ['log', 'hinge']})
這意味著我們只能在擬合后再檢查鴨子類型的屬性,并且必須小心地讓元估算器僅根據擬合后基礎估算器的狀態來呈現屬性。
通常,檢查屬性是否存在(使用函數hasattr)與獲取屬性(使用getattr或點表示法 dot notation)的計算成本是類似的。在某些情況下,獲取屬性的成本的確會非常昂貴(比如,對于feature_importances_的某些實現,這可能表明這是API設計上的缺陷)。因此,應避免在hasattr()后跟getattr()的代碼,并首選try-except模塊中的getattr功能。
為了確定估算器對某些功能的期望或支持的某些方面,我們使用估算器標簽而不是鴨子類型。
提前停止 early stopping
這指的是在訓練損失收斂之前停止迭代優化方法,以避免過度擬合。這通常是通過監視驗證集上的概括分數(generalization score)來完成的。當提前停止選項可用時,可通過參數Early_stopping或設置正的n_iter_no_change參數來激活它。
估計實例 estimator instance
我們使用此術語區別估計器類與構造后的實例。例如,在下面的示例中,cls是一個估計器類,而est1和est2是實例:
cls = RandomForestClassifier
est1 = cls()
est2 = RandomForestClassifier()
示例 examples
我們嘗試提供API中大多數函數和類的基本用法示例:
作為文檔測試中所需的文檔說明(即在sklearn/庫代碼本身內)。
作為示例庫中的示例,這些示例庫是通過examples/目錄中的腳本繪制的(使用獅身人面像畫廊sphinx-gallery),舉例說明了估算器/函數的關鍵功能或參數。這里的內容都可以從《用戶指南》中被引用出來。
有時將示例用于用戶指南(從doc /構建)中、以及估算器的技術說明旁邊
評估指標 evaluation metric/evaluation metrics
評估指標可以衡量模型的表現有多好,即衡量模型的效果。我們可能專門使用此術語來指代評估指標中的各類功能(不考慮metrics.pairwise),這與API中使用的score方法及交叉驗證中使用的評分方法都不相同。具體請參閱《指標和評分:量化預測的質量》(Metrics and scoring: quantifying the quality of predictions)。
我們通常向這些函數中輸入基本事實和預測結果。基本事實即真實標簽,或在沒有基本事實/真實標簽的情況下進行聚類評估所需要的原始數據。而預測結果包括預測接口predict的輸出值(y_pred)、預測概率接口predict_proba的輸出值(y_proba)、和任意評分函數(包括decision_function)的輸出(y_score)。如果分數越高表示模型越好,這些函數通常以_score結尾;如果分數越小表示模型越好,函數通常以_loss來表示。評估接口的多樣性激發了評分API的誕生。
請注意,某些估算器可以計算未包含在模型評估指標中、且特定被一些估算器使用的衡量指標,尤其是模型的似然性(likelihoods)。
估算器標簽 estimator tags
估算器標簽是一個建議的特征(例如#8022,詳見github頁面 https://github.com/scikit-learn/scikit-learn/pull/8022),這個特征通過一組語義標簽來描述估算器的功能。這將使基于估計器檢查的某些運行時行為成為可能。同時,這個特征也允許在不進行其他普通測試的情況下,對每個估算器的適當不變性(appropriate invariances)進行單獨測試。
當前,估算器標簽的某些值是通過鴨子類型(例如predict_proba)以及估算器對象上的一些特殊屬性來確定的:
_estimator_type
這個字符串類型屬性將估算器標識為分類器,回歸器等。它由諸如base.ClassifierMixin之類的混合(mixins)進行設置,但需要明確地被應用到某個元估算器上。通常,我們通過諸如base.is_classifier之類的幫助程序來檢查這個屬性的值。
_pairwise
此布爾值屬性指的是,在fit或相似方法中輸入的數據(X)是否由樣本的成對度量而不是每個樣本的特征表示組成。當估算器中存在某個評估指標、或親緣性(affinity)、或核參數(kernel parameter)的值為“預計算”時,該布爾值屬性通常為Ture。該布爾值屬性存在的主要目的是,當我們從元估算器提取計劃用于成對估算器的數據子樣本時,需要在兩個軸上對數據進行索引,而其他數據僅僅需要第一軸上進行索引。
有關更多詳細信息,請參見《估算器標簽》(Estimator Tags)。
特征 feature/features 特征向量 feature vector
概括地說,就數學意義上而言,特征是將采樣對象映射到數值或分類數量的函數。 “特征”通常也用于指代這些數值或數量本身的值,即表示代表樣本一個向量所對應的某個元素的值。在數據矩陣中,特征也表示為列:每列表示將一個特征函數應用于一組樣本的結果。
在其他地方,特征也被稱為屬性,預測變量,回歸變量或自變量。
在scikit-learn中,幾乎所有估算器都假定特征是以數字形式表示的、是有限的且沒有缺失值的,即使數據在語義上具有不同的域和分布(例如分類,有序,計數值,實值,區間)也是如此。更多詳細內容,請參見《分類特征和缺失值》(categorical feature and missing values)。
屬性n_features指的是數據集中的特征數量。
擬合 fitting
在估算器上調用fit(或fit_transform,fit_predict等功能)的動作。
擬合完畢 fitted
擬合后的估算器的狀態。
沒有約定俗成的流程來檢查一個估算器是否已經被擬合完畢了。但是,沒有擬合的估算器:
當調用預測方法(如預測predict,轉換transform等功能)時,會引發exception.NotFittedError錯誤(sciki-learn內部使用utils.validation.check_is_fitted來表示此錯誤。)
不應具有任何以字母字符開頭和以下劃線結尾的屬性。(請注意,屬性的描述符可能仍存在于類中,但調用hasattr方法應該返回False)
函數 function
我們為許多算法提供了臨時函數接口,為估算器類提供了更加一致的接口。
特別的,Scikit-learn可以提供一個函數接口,該函數接口可以使模型適合某些數據并返回學習的模型參數,如linear_model.enet_path所示。對于轉導模型,函數接口還將返回嵌入標簽或簇標簽,如manifold.spectral_embedding或cluster.dbscan中的接口。許多預處理轉換器還提供類似于調用fit_transform的功能接口,如preprocessing.maxabs_scale。使用這些與fit_transform等效的功能時,用戶應注意避免數據泄漏。
對于何時提供或不提供估計器的功能形式,我們沒有嚴格的政策,但是維護者應考慮與現有接口的一致性,以及提供功能是否會導致用戶誤解使用scikit-learn時的最佳實踐方式(如關于數據泄漏等)。
畫廊 Gallery
參見示例(examples)。
超參數 hyperparameter/hyper-parameter
參見參數(parameter)。
輸入 Impute/Imputation
大多數機器學習算法都要求其輸入的數據不能存在缺失值,并且當有缺失值存在時,這些機器學習類將無法工作。嘗試填充(或估算)缺失值的算法稱為輸入算法(imputation algorithms)。
可索引的 Indexable
一個類數組對象、稀疏矩陣、pandas DataFrame或序列(通常是列表)都是可索引的對象。
歸納 Induction/Inductive
歸納機器學習(與轉導機器學習相反)建立一系列可以被應用于新實例的數據模型。在Scikit-learn中的大多數估算器都是歸納式的,他們都有預測predict和/或變換transform的方法。
joblib
一個在Scikit-learn中使用的Python庫(https://joblib.readthedocs.io),這個庫有助于簡單的并行運算和處理緩存。Joblib旨在有效地使用numpy數組,例如通過使用內存映射。有關更多信息,請參見并行(Parallelism)。
標簽指標矩陣 label indicator matrix 多標簽指標矩陣 multilabel indicator matrix/matrices
用于表示多標簽數據的格式,其中2d數組或稀疏矩陣的每一行對應一個樣本,每一列對應一個標簽類別,對于任意樣本,若屬于該標簽類別則該列下的值為1,否則為0。
泄漏 leakage 數據泄漏 data leakage
數據泄露是交叉驗證中存在的一個問題。模型的泛化能力可能被高估,因為測試數據的知識會無意中被包含在訓練模型所用的數據中,所以模型會提前得知一部分測試集的真相。例如,當將轉換器應用到整個數據集而不是交叉驗證拆分中的每個訓練部分時,就會存在數據泄露的風險。
我們旨在提供使用戶免于數據泄漏的接口(例如管道和model_selection)。
內存映射 MemMapping/memory map/memory mapping
內存映射是一種內存效率策略,這種策略將數據保留在磁盤上,而不是將其復制到計算機的主內存中。通過numpy.memmap,我們可以為可讀、可寫入或既可讀又可寫入的數組創建內存映射。當使用joblib并行化Scikit-learn中的操作時,它可能會自動對大型數組進行內存映射,以減少多處理中的內存復制開銷。
缺失值 Missing values
大多數Scikit-learn估算器都無法在數據存在缺失值的情況下使用。當這些估算器可以對存在缺失值的數據使用時(例如在impute.SimpleImputer中的眾多類),NaN是浮點數組中缺失值的首選表示形式。如果數組具有整數類型,缺失值就不能表示為NaN。因此,當可以在整數空間中進行插補或學習時,我們支持指定一個具體的missing_values值作為缺失值的表示。缺少標簽的數據(Unlabelled data)是標簽或目標中存在缺少值的特殊情況。
n_features
特征的數量。
n_outputs
在本次建模中,輸出的數量。
n_samples
樣本量。
n_targets
n_outputs的同義詞。
敘述性文檔 narrative docs/narrative documentation
用戶指南的別名,例如編寫在doc/modules/目錄下的文檔。與通過文檔說明(docstrings)提供的API參考不同,用戶指南旨在:
以專題為單位、或以使用指南為引導,打包由Scikit-learn提供的工具
通過比較的方式,促進人們在某種特定情況下選擇使用某種特定的工具
對工具提供直觀的、技術性的描述
提供或鏈接到使用工具關鍵功能的示例
np
在導入NumPy時約定速成的NumPy包的簡寫。導入代碼如下:
import numpy as np
流式學習 Online Learning
(譯者注:這里的在線學習是一種模型訓練方法,與之對應的是offline learning。Online Learning強調訓練過程是實時的、流式的,常被用于梯度下降中作用于最優化問題。其含義與日常用語中的在線學習存在較大差異,故沒有使用“在線學習”的譯名,而翻譯為流式學習。實際在學術圈與技術圈中,并沒有對該概念形成統一的中文譯名。)
在對一批數據進行預測后,通過接收這里數據的真實標簽來迭代更新模型的學習方法。本質上,該模型每訓練一批數據,就可以被用于預測。更多內容參見partial_fit。
核外 out-of-core
一種不把所有數據一次性存儲在主存儲器中中的效率策略,通常是通過對數據進行分批學習來實現的。更多內容參見partial_fit。
輸出 outputs
每個樣本所對應標簽下輸出的單個標量或類別變量。例如,在多標簽分類中,每個可能的標簽都對應一個二分類輸出(即1或0)。輸出也被稱為響應,任務或目標。更多內容,請參見多標簽多輸出(multiclass multioutput)和連續多輸出(continuous multioutput)。
對 pair
一個長度為二的元組。
參數 parameter/parameters/param/params
我們主要使用參數來表示那些可以在構造估算器時指定的各個方面的值。例如,max_depth和random_state是類RandomForestClassifier的參數。對任意估算器,構造估算器時的參數都被無刪改地儲存在估算器實例的屬性(attributes)中,并通常以字母字符開頭,以字母或數字字符結尾。估算器的文檔說明中描述了每個估算器構造函數時所需的參數。
我們不使用統計學意義上的“參數”概念。在統計學中,參數是定義某個具體模型的一系列值,并且可以根據數據將參數估算出來。在機器學習里,我們所謂的參數可能是統計學家所謂的模型超參數:并非從數據中學習獲得,而是自行配置模型結構的各個方面的值。不過,我們也使用參數這個術語來指代一些不影響學習模型的建模操作,例如用于控制并行性的n_jobs。
在討論元估算器的參數時,我們可能會將被元估計器包裹(wrapped)在內的估計器的參數都考慮在內。通常,我們使用雙下劃線(__)來表示這些嵌套參數,并得以區分作為參數的估算器(estimator-as-parameter)本身與它的參數。來看以下代碼:
clf = BaggingClassifier(
base_estimator = DecisionTreeClassifier(max_depth = 3))
在這段代碼中,clf具有值為3的深參數base_estimator__max_depth,這個參數可通過clf.base_estimator.max_depth或者clf.get_params()['base_estimator__max_depth']進行訪問。
我們可以使用一個估算器示例的get_params方法從這個估算器中檢索出參數列表以及這些參數當前對應的值。
在構筑估算器后,擬合估算器之前,可以使用set_params修改參數。為此,在構造估算器或設置每個參數時,通常不對參數進行驗證或更改。參數驗證將在調用fit,開始擬合的時候進行。
常用參數可見連接:https://scikit-learn.org/stable/glossary.html#glossary-parameters
成對度量 pairwise metric/pairwise metrics
從廣義上講,成對度量定義了一個函數,該函數被用于測量兩個樣本(通常表示為兩個特征向量)之間的相似性或不相似性。我們特別通過metrics.pairwise_distances提供了實現距離度量標準的功能(盡管其中包括一些不太規范的度量標準,例如余弦距離),并在metrics.pairwise_kernels中提供了內核函數(一個受限的、用來衡量相似性的類)。這些可以計算對稱的成對距離矩陣,因此可以飽和地存儲數據。
更多細節,另請參見《預計算和度量》(precomputed and metric)。
請注意,對于大多數距離度量,我們依賴于scipy.spatial.distance庫來實現,但可能會在我們的代碼為了效率而重新實現一些功能。在最近鄰(neighbors module)模塊中,我們還復制了一些度量實現用于與有效的二叉樹搜索數據結構集成。
pd
在導入Pandas時約定速成的Pandas包的簡寫。導入代碼如下:
import pandas as pd
預計算 precomputed
當算法依賴于成對度量標準(pairwise metrics),并且能夠只基于成對度量標準進行計算時,我們通常允許用戶指定所提供的數據X所在的數據空間,通常用戶可指定X已經在成對(而非相似性)的空間中,而不是在特征空間中。也就是說,當數據被用于擬合時,它是一個正方形的、對稱的矩陣,且其中的每個向量表示與每個樣本之間的相似或比相似性。當數據被用于預測predict或轉化transform的方法時,每一行對應一個測試樣本,每一列對應一個訓練樣本。
通常,我們將評估指標,親緣性或核參數設置為字符串“precomputed”來明確使用預計算的數據X。在這種情況下,估算器應將自己標記為_pairwise。
矩形 rectangular
對于任意矩陣,若它在一個軸上具有樣本,在在第二個軸上具有固定的、有限的特征,則這個矩陣可以被稱為矩形。
該術語不包括具有非矢量結構的樣本,例如文本,任意大小的圖像,任意長度的時間序列,一組矢量等。矢量化的目的是產生這些非結構化數據的矩形形式。
(譯者注:矩形只能是二維的,二維也是scikit-learn中的算法類可接受的數據集的最高維度)
樣本 sample/samples
我們通常將此術語用作名詞來表示單個特征向量。在別的地方,樣本也被稱為實例、數據點或觀測值。n_samples表示數據集中的樣本數,即數據數組X中的行數。
樣本屬性 sample property/sample properties
樣本屬性與樣本的性質有關的數據,常常表示為長度為n_samples的一個數組。當樣本屬性傳遞給估算器的各類方法或類似函數時,這些數據與特征(X)和目標(y)并排顯示,但與特征(X)和目標(y)的性質不同。最突出的例子是sample_weight(譯者注:代表了每個樣本所占權重的參數)。更多內容請參考《數據和樣本屬性》(Data and sample properties)。
從版本0.19開始,盡管我們經常使用fit_params參數,但我們還沒有一致的方法來處理元估算器中的樣本屬性及其路由。
scikit-learn貢獻者社區 scikit-learn-contrib
一個發布Scikit-learn兼容庫的場所,該庫得到了核心開發人員和contrib社區的廣泛授權,但未由核心開發人員團隊維護。更多詳情參見https://scikit-learn-contrib.github.io
scikit-learn增強建議 scikit-learn enhancement proposals/SLEP/SLEPS
對API原則的更改以及對其依賴項或受支持版本的更改都是通過SLEP進行的,并且任何更改都需要遵循Scikit-learn治理和決策文檔中概述的決策過程。對于所有投票行為,提案必須已經公開并在投票之前進行了充分討論。這樣的提議必須是一個綜合性文件,并以“ Scikit-Learn增強提議”(SLEP)的形式呈現,而不是就一個問題進行長時間的討論。任意增強提議必須遵循SLEP模板,并作為增強建議發起文件進行提交。
半監督學習 semi-supervised/semi-supervised learning/semisupervised
當僅有部分樣本的預期預測值(如標簽或基本事實)可以被作為訓練數據進行擬合時,我們稱這樣的學習為半監督學習。我們通常將標簽-1應用于半監督分類中的未標記樣品。
稀疏矩陣 sparse matrix 稀疏圖 sparse graph
系數矩陣是二維數值數據的一種表現形式,它由幾乎所有元素均為零的密集numpy數組組成,因此其內存存儲效率更高。我們使用scipy.sparse框架,該框架提供了幾種基礎的稀疏數據表示形式或格式。對于某些特定任務,某些格式要比其他格式更有效,并且當特定格式提供特殊好處時,我們嘗試在Scikit-learn參數描述中記錄這一事實。
一些稀疏矩陣格式(特別是CSR,CSC,COO和LIL)區分隱式零和顯式零。顯式零存儲在數據結構中(即它們以數據數組的方式消耗內存),而隱式零則對應到顯式存儲中未定義的每個元素。
Scikit-learn中使用了兩種稀疏矩陣的語義:
矩陣語義 matrix semantics
稀疏矩陣被解釋為一個包含隱式和顯式零的數組,其中隱式和顯式零又被解釋(interpreted)為數字0。這是最常用的解釋,例如當稀疏矩陣用于特征矩陣或多標簽指示符矩陣時。
圖語義 graph semantics
與scipy.sparse.csgraph一樣,顯式零被解釋為數字0,但是隱式零表示被掩蓋或不存在的值,例如圖形的兩個頂點之間不存在邊,其中顯式值指示邊的權重。這種解釋常備用來表示表示聚類中的連接性、表示最近鄰域(例如neighbors.kneighbors_graph),以及表示僅需要每個點附近的距離的預計算距離。
當使用稀疏矩陣時,我們假設總是有充分的理由支持我們這么做(即,如果我們沒有一個充分的理由,我們就不使用稀疏矩陣)。我們并且避免編寫讓用戶提供的稀疏矩陣的代碼,而不是盡可能保持數據稀疏性、或在不能使用稀疏矩陣的時候報錯(比如,在估算器不支持/不支持稀疏矩陣的時候報錯)。
有監督學習 Supervised
使用每個樣本對應的預期預測值(如標簽或基本事實)作為訓練數據中的y進行擬合,這種方式被稱為有監督學習。這是在估算器中的分類器或回歸器中采用的方法。
目標 targets
監督(和半監督)學習中的因變量,作為y傳遞給估算器的擬合方法。也稱為因變量,結果變量,響應變量,基本事實或標簽。 Scikit-learn適用于最小結構的目標:有限集中的一個類別,一個有限的實數值,多個類別或多個數字。具體請參閱《目標類型》(Target Types)。
轉導 transduction/transudative
轉導機器學習(與歸納機器學習相反)是一種對特定數據集進行建模、但不將該模型應用于模型未曾見過的數據(即,新實例)的學習方法。典型的例子包括:manager.TSNE,cluster.AgglomerativeClustering和neighbors.LocalOutlierFactor。
未標記的數據 unlabelled/unlabelled data
擬合時基本事實未知(標簽未知)的樣本,即是說,樣本對應的目標中缺少值。另請參見半監督學習和無監督學習。
無監督學習 Unsupervised/unsupervised learning
全部部分樣本的預期預測值(如標簽或基本事實)都無法獲得、且無法被作為訓練數據進行擬合時,我們稱這樣的學習為無監督學習。典型的例子是在聚類算法、離群值檢測等。無監督學習的估算器會忽略任何傳遞給擬合方法fit的y值。
類API和估算器類型
分類器 Classifier/Classifiers
輸出一組有限的離散值的監督(或半監督)預測器。
分類器支持對二分類,多分類,多標簽或多分類多標簽問題進行建模。在scikit-learn中,所有分類器都支持多分類,默認情況下,對二分類問題使用“一對多”策略(one-vs-rest)。
分類器必須在擬合后存儲classes_屬性,并且通常繼承自base.ClassifierMixin庫,這個庫也設置分類器的_estimator_type屬性。
使用is_classifier功能可以將分類器與其他估算器類型區分開。
分類器必須實現:
擬合 fit 預測 predict 打分 score
對一些分類器而言,實現decision_function,predict_proba和predict_log_proba功能也是需要的。
聚類器 clusterer/clusterers
輸出一組有限的離散值的無監督預測器。
聚類器通常在擬合后儲存屬性labels_,如果這個聚類器是轉導型則必須進行儲存。
聚類器必須實現:
擬合 fit
擬合預測 fit_predict,如果聚類器是轉導型
預測 predict,如果聚類器是歸納型
密度估計器 density estimator
即將去做。
估算器 estimator/estimators
管理模型的估計和解碼的對象,這里的模型被估計為以下元素的一個確定性函數:
在構建估算器類對象時提供的、或使用set_params提供的參數;
估算器的random_state參數被設置為None時的全局隨機狀態,該隨機狀態由numpy.random處理;以及,
最近一次調用fit,fit_transform或fit_predict時傳入的任何數據或樣本屬性,或類似地在對partial_fit的調用序列中傳遞的數據。
估算出的模型被存儲在估算器實例的公共和私有屬性中,從而有助于通過預測和變換方法進行解碼。
任何估算器都必須提供一個fit方法,并應提供set_params和get_params,盡管這些參數通常是從base.BaseEstimator的繼承中提供的。
一些估算器的核心功能也可以作為單獨的函數使用。
特征提取器 feature extractor/feature extractors
當一個轉換器接受樣本沒有被呈現為固定長度的類數組對象作為輸入,并為每個樣本生成類數組樣的特征矩陣(因此,對一組樣本,會生成二維數組),我們則稱它為特征提取器。特征提取器(有損)地將非矩陣數據表示映射成矩陣數據。
特征提取器必須至少實現:
擬合 fit
轉化 transform
獲得新生成的特征的名字 get_feature_names
元估算器 meta-estimator/meta-estimators/metaestimator/metaestimators
一個可以將另一個估算器作為參數的預測器。典型的例子包括pipeline.Pipeline,model_selection.GridSearchCV,feature_selection.SelectFromModel和ensemble.BaggingClassifier。(譯者注:在包含關系中,包含多個估算器的估算器是元估算器,被包含的估算器被稱為基估算器,base estimators)
在元估算器的擬合方法(fit)中,所有被包含的估算器都應在擬合之前被克隆(盡管FIXME: Pipeline和FeatureUnion當前并不這樣做)。對此有一個例外,那就是估算器本身已經明確說明:自己接受預先擬合好估算器(例如,在feature_selection.SelectFromModel中令參數prefit = True)。一個已知的問題是,如果克隆了元估算器,則預擬合的估算器將丟失其模型。即使所有被包含的估算器都已預先擬合,元估算器也應在預測之前先進行擬合。
如果元估算器的主要行為(例如,預測predict或轉換transform放入實現)是所包含的基估算器(或多個基估算器)的預測/轉換方法,則元估算器應至少提供被包含的基估算器本來就提供的一系列方法。在使用meta-estimator擬合之前,可能無法確定基估算器都提供了哪些方法(另請參閱鴨子類型),utils.metaestimators.if_delegate_has_method模塊可能對此有所幫助。這個模塊還應提供(或修改)基估算器提供的估算器標簽(estimator tags)和classes_屬性。
元估計器在將數據傳遞給基估算器之前,應盡量謹慎、盡可能少地對數據進行驗證。這節省了計算時間,并且可以,比如說,允許基估計器輕松處理非矩形數據。
離群值檢測器/異常值檢測器 outlier detector/outlier detectors
一種無監督的二分類預測器,可對核心樣本與外圍樣本之間的區別進行建模。
離群檢測器必須實現:
擬合fit
擬合預測 fit_predict,如果檢測器是是轉導型
預測 predict,如果檢測器是歸納型
歸納離群值檢測器還可以實現Decision_function以給出歸一化的離群值,其中離群值的得分低于0。score_samples可以為每個樣本提供非歸一化的得分。
預測器 predictor/predictors
支持預測predict和/或fit_predict方法的估算器。這包括分類器,回歸器,離群值檢測器和聚類器。
在統計數據中,單詞“predictors”是指特征。
回歸器 regressor
具有連續輸出值的監督(或半監督)預測器。
回歸器通常繼承自類base.RegressorMixin,在這個類中設置了_estimator_type屬性。
我們可以使用is_regressor工具將回歸器與其他估算器區別開來。
回歸器必須實現:
擬合 fit
預測 predict
打分 score
轉換器 transformer/transformers
支持轉換功能transform和/或預測轉換功能fit_transform的估算器。純粹的轉導型轉換器,例如類manifold.TSNE,可能不需要實現轉換功能transform,也依然是轉換器。
矢量化器/向量化器 vectorizer/vectorizers
請參閱特征提取器。
以上是典型的類API與估算器類型,除此之外還有一些與一小磊估算器特別相關的API,比如:
交叉驗證分割器 cross-validation splitter/ CV splitter
交叉驗證生成器 cross-validation generator
交叉驗證生成器是一族非估算器的類。我們向這些類提供split和get_n_splits方法,這些類將數據集分為一系列訓練數據和測試數據(更多請參閱《交叉驗證:評估估計器性能》)。輕注意,交叉驗證生成器與估算器們不同,這些類中沒有fit方法,并且不提供set_params或get_params方法。參數驗證可以在__init__中執行。
交叉驗證估算器 cross-validation estimator
具有內置的交叉驗證功能的估算器,可以幫助我們自動選擇最佳的超參數(關于超參數,請參閱《用戶指南》)。交叉驗證估算器的一些典型示例是ElasticNetCV和LogisticRegressionCV。交叉驗證估算器被稱為EstimatorCV,通常近似等于GridSearchCV(Estimator(),...)。使用交叉驗證估算器而不是規范的估算器類+網格搜索的優勢在于,它們可以可以使用之前的交叉驗證步驟中預先計算的結果進行“暖啟動”,這通常可以提高速度。RidgeCV類是一個例外,它可以執行高效的留一式交叉驗證。
評分器 scorer
一個非估算器類的可調用對象,它根據給定的測試數據評估一個估算器(的某項能力),并返回一個數字。與評估指標不同,在評分器中只能夠使用積極指標,即返回的數字越大,模型得分越高的指標。更多請參閱評分參數:定義模型評估規則(The scoring parameter: defining model evaluations rules)。
更多評分器:
gaussian_process.kernels.Kernel
tree.Criterion
目標/標簽類型
二元/二分類 binary
標簽中含有兩個類別的分類問題。二分類的目標/標簽頁可以表示多分類問題,但只能有兩個標簽類別。一個二分類問題的決策函數會被表示為一維數組。
從語義上講,一個類別通常被認為是“正”類別。除非另有說明(例如,在評估指標中使用pos_label),否則我們將具有較大值(按數字或詞典順序)的類別標簽視正類別:標簽[0,1]中的1是正類別; [1,2]中的2是正類別;在['no','yes']中,“yes”是正的;在['no','YES']中,'no'是正的類別(譯者注:大小寫會影響標簽類別的積極性,需要注意)。類別的積極性會產生各種影響,比如,影響Decision_function的輸出。
請注意,從多分類的y或連續型y采樣的數據集可能看起來也是二分類的。
對于二分類問題的輸入,type_of_target將返回“binary”,或者返回僅存在單個類的類似數組。
連續型 continuous
指代回歸問題,其中每個樣本的目標都是一個有限的浮點數,整個目標被表示為一個一維的浮點數(有時是整數)的數組。
對于連續輸入,type_of_target將返回“continuous”,但是如果數據都是整數,則將其標識為“multiclass”(多分類)。
連續型多輸出 continuous multioutput/multioutput continuous
指代回歸問題,其中每個樣本的目標均由n_outputs個輸出組成,其中每個輸出都是一個有限的浮點數,與特定數據集中的固定的、整數型的、大于1的n_outputs相對應。
連續多輸出目標被表示為多個連續型的目標,它們可以被水平堆疊成(n_samples,n_outputs)形狀的數組。
對于連續型多輸出的輸入,type_of_target將返回“continuous-multioutput”,但是如果數據都是整數,則將其識別為“multiclass-multioutput”(多分類多輸出)。
多分類 multiclass
標簽中包含兩個以上的類的分類問題。多分類的目標可以表示為一個由字符串或整數組成的一維數組。整數型的二維列向量也是可以被接受的(即多輸出項中的單個輸出)。
我們不正式支持將其他可排序的、可哈希對象用作類的標簽,即使在給定此類分類目標時估算器可能會起作用。
對于半監督分類,未標記的樣本在y中應具有特殊標記-1。
在sckit-learn中,所有支持二分類的估算器也支持多分類,默認情況下使用One-vs-Rest模式。
類preprocessing.LabelEncoder有助于將多類目標規范化為整數。
type_of_target將為多分類的輸入返回“multiclass”。用戶可能還希望處理與“多分類”相同的“二分類”輸入。
多分類多輸出 multiclass multioutput/multioutput multiclass
一個分類問題,其中每個樣本的標簽都由n_outputs個輸出組成,每個輸出是一個標簽類別,與特定數據集中的固定的、整數型的、大于1的n_outputs相對應。每個輸出都有一組固定的可用類,每個樣本在每個輸出下都標記有一個類。輸出可以是二分類或多分類的,并且在所有輸出都是二分類的情況下,目標是多標簽的。
多分類多輸出的標簽被表示為多個分類型目標,它們可以被水平堆疊成(n_samples,n_outputs)形狀的數組。
為簡單起見,我們在多分類多輸出問題中可能并不總是支持字符串類標簽,應該使用整數類標簽。
multioutput提供了使用多個單輸出估算器來估計多輸出問題的估算器。這可能無法完全說明不同輸出之間的依賴關系,那些本來就能夠處理多輸出情況的算法(例如決策樹,最近鄰算法,神經網絡等)可能會做得更好。
對于多分類多輸出的輸入,type_of_target將返回“multiclass-multioutput”。
多標簽 multilabel
一個多分類多輸出的標簽,其中每個輸出都是二分類。這可以被表示為二維密集數組或整數組成的稀疏矩陣,以便每一列都是單獨的二分類標簽,其中正類別用1表示,負類別通常用-1或0表示。注意,支持密集數組的地方不一定支持系數矩陣表示的多類標簽。
從語義上講,可以將多標簽目標視為每個樣品的一組標簽。雖然未在內部使用,但preprocessing.MultiLabelBinarizer是作為實用程序提供的,用于將以集合表示形式的列表轉換為二維數組或稀疏矩陣。對多分類(multiclass)目標使用獨熱編碼,進行preprocessing..LabelBinarizer的轉換,會將其變成多標簽問題(multilabel)。
對于稀疏或密集的多標簽輸入,type_of_target將返回“ multilabel-indicator”。
多輸出 multioutput/multi-output
每個樣本具有多個分類/回歸標簽的目標。請參見詞條多分類多輸出和連續型多輸出。我們目前不支持對混合分類和回歸目標進行建模。
方法
(譯者注:該章對算法類所使用的不同方法進行說明,尤其是對不同目標下的方法格式及方法所產生的結果進行說明。其中方法的表示方式為:方法名稱 方法譯名
)
decision_function 決策函數
在擬合后的分類器或離群值檢測器中,對每個樣本預測出與每個類別相關的一個“軟”評分,而不是預測所產生的“硬”分類預測。它的輸入通常只是一些觀察到的數據X。
如果估算器尚未擬合,則調用此方法會引發錯誤exceptions.NotFittedError。
關于輸出值的一些行業慣例:
? 二分類 binary classification
? 一維數組,其中嚴格大于零的值表示正類別(即,classes_中的最后一個類別)。
? 多分類 multiclass classification
? 二維數組,其中逐行的最大化變量(arg-maximum)指向預測出的類別。列根據classes_中說明的順序排序。
? (譯者注:arg-maximum被譯為最大化變量,它指代令函數最大化的變量的值,與函數的最大值本身存在根本區別。多分類算法在decision_function方法中的輸出往往是(n_samples,n_labels)結構,每行包含該樣本在所有標簽下的對應值,這些值的性質與概率相似。這里的最大化變量指的是,所有這些值中讓評估指標函數/決策函數最大化的值。如果這些值是各標簽下的概率(predict_proba),則每行中最高的概率對應的類別就是該樣本的預測類別。若這些值是距離(decision_function),則每行中最短的距離對應的類別就是該樣本的預測類別。)
? 多標簽分類 multilabel classification
? Scikit-learn在多標簽決策函數(decision_function)的表示上存在不一致。一些估算器將其表示為多分類多輸出,比如說,一個二維數組的列表,每個數組都有兩列。其他估算器用單個二維數組表示它,其列對應于各個二分類決策結果。后一種表示形式與多分類格式隱約相同,盡管其語義不同:應像在二分類情況下那樣,將閾值設為0來解釋它。
? 待辦事項:在這里重點說明了多標簽使用不同格式的情況。
? 多輸出分類 multioutput classification
? 二維數組的列表,對應于每個多分類的決策函數。
? 離群值檢測 outlier detection
? 一維數組,其中大于或等于零的值表示一個整數。
fit 擬合
每個估算器都提供擬合方法fit。通常擬合時會需要一些樣本X,目標y(如果模型是有監督的),并潛在地需要其他樣本屬性,例如sample_weight。擬合時應該:
清除擬合前存儲在估算器上所有的屬性,除非使用warm_start;
驗證并解釋任何參數,理想情況下,如果輸入的參數不合規,會引發錯誤;
驗證輸入數據;
根據估計的參數和提供的數據估計并存儲模型屬性;和
返回現在擬合完畢的估算器以方便方法鏈入
上一章目標類型(Target Types)描述了y的可能的格式。
fit_predict 擬合預測
尤其適用于無監督的轉導估算器,它擬合模型并返回訓練數據上的預測(類似于預測方法predict)。在聚類器中,這些預測結果被存儲在屬性labels_中,并且.fit_predict(X)的輸出通常等效于.fit(X).predict(X)。fit_predict的參數與fit的參數相同。
fit_transform 擬合轉化
一種適用于轉換器的方法,它實現數據擬合后返回轉換后的訓練數據。它采用與方法發it一致的參數,并且其輸出應具有與調用.fit(X, ...).transform(X)相同的形狀。但是,在極少數情況下,.fit_transform(X, ...)和.fit(X, ...).transform(X)不會返回相同的值,這種情況下,訓練數據需要以不同方式處理(比如說,以堆疊方式進行的集成模型會產生此種情況,這種情況應清楚地記錄在案)。轉導型轉換器也可以提供fit_transform方法但不提供transform方法。
實施fit_transform的原因之一是,分別執行fit擬合和transform轉化的效率不如一起執行的效率高。base.TransformerMixin提供了默認的實現手段,它能夠在安裝或未安裝fit_transform的轉換器之間提供一致的接口。
在歸納學習中(目標是學習出可以應用于新數據的通用模型),在進一步建模之前,用戶應注意不要將fit_transform應用于整個數據集(即一起訓練和測試數據),因為這樣會導致數據泄漏。
get_feature_names 獲取特征名稱
主要用于特征提取器,但也用于其他轉換器,為估算器的transform方法的輸出中的每一列提供字符串名稱。它輸出字符串列表,并且可以將字符串列表作為輸入,對應于可以從中生成輸出列名稱的輸入列的名稱。默認情況下,輸入要素的名稱為x0,x1...。
get_n_splits 獲取n次分割
在交叉驗證分割器(注意不是交叉驗證估算器)上,返回在給定相同參數的情況下迭代split的返回值時將獲得的元素數。采用與split相同的參數。
get_params 獲取參數
獲取可以使用set_params設置的所有參數及其值。當設置為False時,可以使用參數deep來僅返回不包含雙下劃線__的那些參數,即不歸因于通過包含的估計器的間接調用。
大多數估算器采用base.BaseEstimator中的定義,該定義僅采用為__init__定義的參數。pipeline.Pipeline等重新實現get_params,以將在其steps參數中命名的估計量聲明為參數本身。
partial_fit 局部擬合
(譯者注:與流式學習 online learning有關,并非與在線學習有關。)
便于以流式方式擬合估算器。與fit不同,重復調用partial_fit不會清除模型,但會使用提供的數據對其進行更新。提供給partial_fit的數據部分可以稱為小批處理(mini-batch)。每個小批處理必須具有一致的形狀等屬性。在迭代估算器中,partial_fit通常僅執行一次迭代。
partial_fit也可以被用于核外學習(out of core learning,相關內容參見詞條核外),不過通常只有當學習可以是流式的時候才能夠使用,比如說,在每次partial_fit之后都可以使用該模型,并且不需要單獨的處理來最終確定模型。 cluster.Birch引入了業界約定,即調用partial_fit(X)會生成未定型的模型,但是可以通過調用partial_fit()來定型該模型,即無需傳遞進一步的小批處理訓練。
通常,不應該在估算器的調用、使用partial_fit的過程中修改參數,盡管partial_fit應該在每次接觸一批新的小批數據時就重新驗證參數。相反,warm_start用于將相同的估算器與相同的數據重復擬合,但參數會變化。
像fit一樣,partial_fit應該返回估算器對象。
要清除模型,應構造一個新的估算器,例如使用base.clone。
注意:擬合后使用partial_fit會導致未定義的行為。
predict 預測
對每個樣本進行預測,通常僅將X作為輸入(但請參見下文中的 關于回歸輸出的業界約定)。在分類器或回歸器中,預測結果和擬合中使用數據是在同一目標空間中(比如說,擬合的時候標簽是{”紅色“,”琥珀色“,”綠色“},則預測出的y也必然是這三個詞之一的字符串)。盡管如此,即使傳遞給fit的y是列表或其他類似數組的元素,predict的輸出也應始終是數組或稀疏矩陣。在聚類器或離群值檢測器中,預測值是整數。
如果估算器尚未擬合,則調用此方法會引發錯誤exceptions.NotFittedError。
關于輸出值的一些行業慣例:
? 分類器 classifier
? 形狀為(n_samples, )或(n_samples, n_outputs)的數組。如果在擬合中使用稀疏矩陣,則多標簽數據可以表示為稀疏矩陣。每個元素應為分類器的classes_屬性中的值之一。
? 聚類器 clusterer
? 形狀為(n_samples, )的數組,其中每個值都從0到 n_clusters-1 如果相應的樣本已經聚類;如果樣本尚未聚類,則為-1,如cluster.dbscan中描述的一樣。
? 離群值檢測器 outlier detector
? 形狀為(n_samples, )的數組,其中離群值對應-1,非離群值對應1。
? 回歸器 regressor
? 一個形狀為(n_samples, )的數字數組,通常為六十四位浮點數(float64)。一些回歸器在其預測方法中具有其他選項,允許它們返回相對于預測值的標準差(return_std = True)或協方差(return_cov = True)。在這種情況下,返回值是一個數組的元組,對應于所需的(預測平均值,std,cov)。
predict_log_proba 預測概率的對數
為促進數值穩定性而提供的方法,用以輸出predict_proba中輸出值的自然對數。
predict_proba 預測概率
分類器和聚類器中的一種方法,可以返回每個類/聚類的概率估計。它的輸入通常只是一些觀察到的數據X。
如果估算器尚未擬合,則調用此方法會引發錯誤exceptions.NotFittedError。
其輸出的行業約定類似于方法Decision_function的約定,但在二分類的情況下,每一類別輸出一列(而Decision_function輸出一個一維數組)。對于二分類和多分類預測,每行的所有值加起來應該等于1。
像其他方法一樣,只有在估算器可以進行概率預測時(請參閱鴨子類型 duck typing),才能提供predict_proba接口。這意味著該方法的存在可能取決于估算器的參數(例如在linear_model.SGDClassifier中)或訓練數據(例如在model_selection.GridSearchCV中),并且可能僅在擬合之后出現。
score 得分
估計器(通常是預測器)上的一種方法,用于對給定數據集評估其預測結果,并返回單個數值。在評分器中只能夠使用積極指標,即返回的數字越大,模型得分越高的指標。默認情況下,準確率(accuracy)用于分類器,用于回歸器。
如果估算器尚未擬合,則調用此方法會引發錯誤exceptions.NotFittedError。
一些估算器可以實現定制的、特定于估算器的得分函數,通常是模型下數據的似然性。
score_samples 得分樣本
尚未開發,待做事項。
如果估算器尚未擬合,則調用此方法會引發錯誤exceptions.NotFittedError。
set_params 設置參數
在任何估計器中都可用,采用與get_params中的鍵相對應的關鍵字參數。每個參數都提供一個新值以進行分配,以便在set_params之后調用get_params,后者可反映更改后的參數。大多數估算器使用base.BaseEstimator來實現該功能,該實現處理嵌套參數,并將這些參數設置為估算器上的屬性。該方法在pipeline.Pipeline和相關估計量中被覆蓋。
split 分裂
在交叉驗證分割器(注意不是估計器)上,此方法接受形狀為(X, y, 組)的參數組合,其中所有參數都是可選的,并返回一個針對(train_idx,test_idx)對數據的迭代器。每個 {train,test} _idx都是一個一維整數數組,其值從0到任何行數的X.shape[0]-1。因此,在某些train_idx及其對應的test_idx中不會出現值。
transform 轉化
在轉換器中,將輸入的數據(通常僅X)轉換到某個轉換的空間中(通常表示為Xt)。輸出是行數為n_samples、列數為根據擬合來確定的數組或稀疏矩陣。
如果估算器尚未擬合,則調用此方法會引發錯誤exceptions.NotFittedError。
參數
這些常見的參數名稱,特別是在估算器構造中使用(請參閱概念參數),有時也顯示為函數或非估算器構造函數的參數。(譯者注:參數使用參數名稱 參數譯名
表示)。
class_weight 類別權重
當將擬合出的分類器當作目標類別的一個函數時,該參數被用于指定樣本權重。如果指定了sample_weight,這些權重與sample_weight中指定的權重相乘。同樣,在多輸出(包括多標簽)任務中使用class_weight的情況下,權重將在輸出(即y的列)之間相乘。
默認情況下,所有樣本的權重均等,因此可以通過其在訓練數據中的普遍性來有效地對類別進行加權。對于所有類標簽,可以使用class_weight={label1: 1, label2: 1, ...}來明確指定每個類別的權重。
更一般地,class_weight被指定為將標簽類別映射到權重的字典({class_label:weight}),這樣每個有名稱的類的每個樣本都會被賦予該權重。
使用"balanced"模式,將會使用y的值自動調整與輸入數據中的類頻率成反比的權重,比如 n_samples/(n_classes?np.bincount(y) )。根據算法的不同,類別權重的使用也會有所不同:對于線性模型(例如線性支持向量機或邏輯回歸),類別權重將通過使用樣本權重對每個樣本的損失進行加權來更改損失函數。對于基于樹的算法,將使用類別權重對分割標準進行重新加權。但是請注意,這種重新平衡并未考慮每個類別中樣本的權重。
對于多輸出問題(包括多標簽問題),一個字典的列表被用于定義每個輸出的權重。(譯者注:定義的權重必須具體到每個標簽下的每個類,其中類是字典鍵值對中的鍵,權重是鍵值對中的值。)比如說,對于有四個標簽,且每個標簽是二分類(0和1)的分類問題而言,權重應該被表示為: [{0:1,1:1}, {0:1,1:5}, {0:1, 1:1}, {0:1,1:1}] 而不是: [{1:1}, {2:5}, {3:1}, {4:1}]
class_weight參數通過utils.compute_class_weight進行驗證和解釋。
cv 交叉驗證
確定在基于交叉驗證流程中使用的交叉驗證拆分策略。在諸如multioutput.ClassifierChain或calibration.CalibratedClassifierCV之類的估算器中也可以使用cv,它使用一個估算器的預測作為另一估算器的訓練數據,而不會使訓練監督過擬合。
cv的可能輸入通常是:
一個整數,指定K折交叉驗證中的折數。如果估計量是分類器(由base.is_classifier確定),并且目標可能表示二分類或多類(但不是多輸出)的分類問題(由utils.multiclass.type_of_target確定),則K-fold將按類進行分層。
交叉驗證分割器的實例。有關Scikit-learn中可用的分離器的信息,請參閱《用戶指南》。
可迭代的、已按數量分好的訓練集/測試集拆分列表。
除某些例外情況(特別是完全不使用交叉驗證的情況),cv參數的默認值為5折。
cv值通過utils.check_cv進行驗證和解釋。
kernel 核
研發中,尚未完成。
max_iter 最大迭代次數
對于涉及迭代優化的估算器,這個參數確定了要執行的最大迭代次數。如果max_iter迭代在沒有收斂的情況下運行,則將引發異常.ConvergenceWarning。請注意,各個估算器對“單次迭代”的解釋是不一致的:一些(但不是全部)用它來表示單個時期(epoch,即,對數據中的每個樣本進行傳遞)。
待修正:也許我們應該對ConvergenceWarning和max_iter之間的關系進行一些常規測試。
memory 記憶
一些估算器利用joblib.Memory在擬合期間存儲部分解決方案。因此,當再次調用fit時,這些局部解決方案已被記憶并可以重復使用。
memory參數可以將內存參數指定為具有目錄路徑的字符串,也可以使用內存實例joblib.Memory(或具有類似接口的對象,即緩存方法)。
參數memory的值通過utils.validation.check_memory進行驗證和解釋。
metric 距離衡量
作為參數,這是用于確定兩個數據點之間距離的機制。請參閱metrics.pairwise_distances。在實踐中,對于某些算法,可以使用不正確的距離度量(不遵循三角不等式的度量,例如余弦距離)。
注意:層次聚類使用具有此含義的相似性。
我們還使用metric來指代評估指標,但避免將此意義用作參數名稱。
n_components 組件數量
變換器應將輸入轉換成的特征數量。有關仿射投影的特殊情況,請參見components_。
n_iter_no_change 無提升的迭代數量
停止迭代過程之前(損失函數或衡量指標的值)沒有任何改進或提升的迭代次數(譯者注:此處的提升并非指代數字變大,而是指向整個模型效果變好的方向改進)。這個參數也被稱為為耐心參數。它通常與參數提前停止(early stopping)一起使用,以避免太早停止迭代。
n_jobs 并發線程數
此參數用于指定與joblib并行化的例程應使用多少個并發進程或線程。
n_jobs是整數,指定同時運行的工作程序的最大數量。如果給定1,則完全不使用joblib并行性,這對于調試很有用。如果設置為-1,則將使用所有CPU。對于小于-1的n_job,將使用(n_cpus +1 + n_jobs)。例如,在n_jobs = -2的情況下,將使用除一個以外的所有CPU。
n_jobs默認情況下為“無”,表示未設置;除非當前joblib.Parallel后端上下文另行指定,否則通常將其解釋為n_jobs = 1。
有關Joblib的使用及其與scikit-learn交互的更多詳細信息,請參閱我們的并行性說明。
pos_label 正樣本標簽
在不假設正類別的二分類問題中,必須對正類標記進行編碼的值。通常需要此值來計算非對稱評估指標,例如精確度(precision)和召回率。
random_state 隨機數種子
每當隨機化是Scikit-learn算法的一部分時,就可以提供random_state參數來控制所使用的隨機數生成器。請注意,存在random_state并不意味著總是使用隨機化,因為它可能取決于另一個參數,例如shuffle,當該參數存在時,只有被設置為True才會存在隨機性問題。
對該參數傳遞的值將影響算法函數(擬合,分割或任何其他函數,例如k_means)返回的結果的可重復性。random_state的值可能是:
None 無(默認) 使用numpy.random中的全局隨機狀態實例。多次調用該函數將重用同一實例,并產生不同的結果。 一個整數 使用以給定整數作為種子的新隨機數生成器。使用int將在不同的調用中產生相同的結果。但是,值得檢查一下您在多個不同的隨機種子中的結果是否穩定。流行的整數隨機種子為0和42。 一個numpy.random.RandomState實例 使用提供的隨機狀態,僅影響相同隨機狀態實例的其他使用者。多次調用該函數將重用同一實例,并產生不同的結果。
utils.check_random_state在內部用于驗證輸入的random_state并返回RandomState實例。
scoring 評分函數
指定訓練模型時要最大化的得分函數(通常在交叉驗證中表現),或者在某些情況下指定要報告的多個得分函數。評分函數可以是metrics.get_scorer或可調用接受的字符串,請勿與評估指標混淆,因為后者具有更多樣化的API。評分函數也可以設置為“None”(無),在這種情況下,將使用估算器自身的評分函數。請參閱《用戶指南》中的評分參數:定義模型評估規則。
在可以評估多個指標的情況下,可以通過唯一字符串列表或以名稱為鍵、可調用項為值的字典的形式給出評分。注意,這沒有指定要最大化哪個得分函數,并且為此目的可以使用另一個參數,例如refit。
評分參數使用metrics.check_scoring進行驗證和解釋。
verbose 日志信息
目前,在Scikit-learn中記錄日志的方式不是很一致,但是當作為選項提供時,通常可以使用verbose參數選擇不記錄日志(設置為False)。任何True值都應啟用一些記錄功能,但可能需要較大的整數(例如大于10)才能完整顯示。詳細日志通常打印到“標準輸出”。估計器不應使用默認的詳細設置在“標準輸出”上產生任何輸出。
warm_start 熱啟動
當將估算器重復擬合到同一數據集、但使用多組不同的參數數值(如在網格搜索中找到使性能最大化的值),可以重用從先前參數值中學到的模型內容,從而節省時間。當warm_start為true時,現有的擬合模型屬性被用于在隨后的擬合調用中初始化新模型。
請注意,這僅適用于某些模型和某些參數,甚至參數值的一些順序。例如,在構建隨機森林時可以使用warm_start將更多的樹添加到森林中(增加n_estimators),但不減少其數量。
partial_fit也會在兩次調用之間保留模型,但是與熱啟動有所不同:使用warm_start可以更改參數,并且兩次調用之間的數據(或多或少)是一致的,以進行擬合;使用partial_fit,數據會按小批量方式進行更改,但模型參數是保持固定的。
在某些情況下,您想使用warm_start來適應不同但密切相關的數據。例如,最初可能適合數據的一個子集,然后對整個數據集上的參數搜索進行微調。對分類算法而言,所有在warm_start被調用時用以訓練的數據必須包括全部分類下的樣本。
屬性
請參閱概念"屬性"。
classes_ 標簽列表
分類器已知的標簽類別列表,將每個標簽映射到模型表示中的數字索引中,以表示我們的輸出。例如,predict_proba的數組輸出的列與classes_一一對應。對于多輸出分類器,classes_應該是列表的列表,每個輸出都有一個類別列表。對于每個輸出,應該對類進行排序(按數字順序或按字典順序對字符串進行排序)。
classes_和到索引的映射通常使用preprocessing.LabelEncoder進行管理。
components_ 特征數量
在許多線性轉換器中使用的形狀仿射變換矩陣(n_components,n_features),其中n_components是輸出特征的數量,n_features是輸入特征的數量。
另請參閱components_,這是在線性預測中的相似屬性。
coef_ 系數
廣義線性模型預測變量的權重/系數矩陣。對二元分類和單輸出回歸,形狀為(n_features, ),對于多分類,形狀為(n_classes, n_features),用于多輸出回歸,形狀為(n_targets, n_features)。請注意,這不包括存儲在intercept_中的截距(或偏置)項。
如果該屬性可用,通常算法便不會提供feature_importances_屬性,但可以將其計算為coef_中每個功能條目的范數。
另請參閱components_,這是在線性預測中的相似屬性。
embedding_ 嵌入
將訓練數據嵌入形狀為(n_samples,n_components)的流形學習估計器中,與fit_transform的輸出相同。另請參閱labels_。
n_iter_ 迭代次數
當估算器迭代到收斂時實際執行的迭代次數。另請參見max_iter。
feature_importances_ 特征重要性
在某些預測變量中可用的形狀為(n_features, )的食量,可以相對衡量模型預測中每個特征的重要性。
labels_ 標簽
一個向量,該向量包含聚類器中每個訓練數據樣本的聚類標簽,與fit_predict的輸出相同。另請參見embedding_。
數據和樣本屬性
請參閱概念"樣本屬性"。
group 組
用于交叉驗證過程中以識別相關樣本。每個值都是一個標識符,這些標識符確保在支持的交叉驗證分割器中,來自某些組值的樣本不會同時出現在訓練集及其相應的測試集中。請參閱《交叉驗證迭代器以獲取分組數據》。
sample_weight 樣本權重
每個樣品的相對權重。直觀地說,如果所有權重都是整數,則加權模型或分數應等于按樣本權重中指定的次數重復樣本時計算得出的模型。權重可以指定為浮點數,這樣,樣本權重通常等于一個恒定的正比例因子。
待修正:這種解釋在實踐中是否總是這樣?我們沒有執行普遍性測試。
一些估算器(例如決策樹)支持負權重。待修正:許多估算器可能未測試或未記錄此功能。
在模型的其他參數考慮區域中的樣本數量時,情況并非完全由sample_weight參數掌握,就像cluster.DBSCAN中的min_samples一樣。在這種情況下,樣本的數量等于它們的權重之和。
在分類中,還可以使用class_weight estimator參數將樣本權重指定為類別的函數。
X 特征矩陣
表示在訓練和預測時觀察到的數據,用作學習中的自變量。該符號為大寫,表示它通常是矩陣(請參見矩形)。當是矩陣時,每個樣本都可以由特征向量或與每個訓練樣本預先計算(不相似)的向量表示。 X也可能不是矩陣,并且可能需要特征提取器或成對度量標準才能在學習模型之前將其轉換為一個矩陣。
Xt 轉換的特征矩陣
“已轉換的X”的簡寫。
Y/y 標簽
表示在訓練時可以觀察到的客觀數據,作為學習中的因變量,但在預測時不可用,通常是預測的目標。該符號可以是大寫,以表示它是一個矩陣,例如代表多輸出目標。但是通常我們使用y,即使假設有多個輸出,有時也使用y。