常用術語和 API 元素詞彙表#

本詞彙表旨在明確表示 Scikit-learn 及其 API 中應用的隱式和顯式約定,同時為使用者和貢獻者提供參考。它旨在描述概念,並詳細說明其對應的 API 或連結到文件中其他相關部分。通過從 API 參考和使用者指南連結到詞彙表條目,我們可以最大限度地減少冗餘和不一致。

我們首先列出一般概念(以及任何不適合其他地方的概念),但下面列出了更多特定相關術語集:類別 API 和估算器類型目標類型方法參數屬性資料和樣本屬性

一般概念#

1d#
1d 陣列#

一維陣列。其 .shape 長度為 1 的 NumPy 陣列。一個向量。

2d#
2d 陣列#

二維陣列。其 .shape 長度為 2 的 NumPy 陣列。通常表示一個矩陣。

API#

指 Scikit-learn 中實作的估算器的特定介面,以及此詞彙表和貢獻者文件中概述的估算器類型之間的通用約定。

構成 Scikit-learn 公開 API 的特定介面主要記錄在API 參考中。但是,如果沒有任何用於存取它的識別符號以 _ 開頭,我們就不太正式地將任何內容視為公開 API。我們通常會盡力維護公開 API 中所有物件的向後相容性

私有 API,包括以 _ 開頭的函式、模組和方法,不保證穩定。

類陣列#

Scikit-learn 估算器和函式的輸入最常見的資料格式,類陣列是任何類型物件,numpy.asarray 將為其產生適當形狀(通常為 1 或 2 維)且適當資料類型(通常為數值)的陣列。

這包括

  • numpy 陣列

  • 數字清單

  • 對於某些固定長度 k,長度為 k 的數字清單的清單

  • 具有所有數值欄位的pandas.DataFrame

  • 數值pandas.Series

這不包括

請注意,scikit-learn 估算器和函式(例如預測)的輸出通常應為陣列或稀疏矩陣,或其清單(如多輸出tree.DecisionTreeClassifierpredict_proba)。 predict() 傳回清單或 pandas.Series 的估算器無效。

屬性#
屬性#

我們主要使用屬性來指代模型資訊在擬合期間如何儲存在估算器上。估算器實例上儲存的任何公開屬性都必須以字母字元開頭,並且如果是在 fitpartial_fit 中設定,則必須以單一下底線結尾。這些是估算器的「屬性」文件中記錄的內容。屬性中儲存的資訊通常是:用於預測或轉換的充分統計資訊;轉導輸出,例如 labels_embedding_;或診斷資料,例如 feature_importances_。常見屬性列在下方

公開屬性可能與建構函式參數具有相同的名稱,並附加 _。這用於儲存使用者輸入的已驗證或估計版本。例如,decomposition.PCA 是使用 n_components 參數建構的。從此,連同其他參數和資料,PCA 會估計屬性 n_components_

在擬合時,也可能會設定用於預測/轉換/等的其他私有屬性。這些以單一下底線開頭,不保證公共存取的穩定性。

估算器實例上不以下底線結尾的公開屬性應該是已儲存的、未修改的 __init__ 參數的同名值。由於此等效性,這些記錄在估算器的「參數」文件中。

向後相容性#

我們通常會盡力維護從一個版本到另一個版本的向後相容性(即,可以擴充但不能變更或移除介面和行為),但有一些例外情況

僅限公開 API

透過私有識別符號(以 _ 開頭的識別符號)存取的物件行為可能會在版本之間任意變更。

依文件記錄

我們通常會假設使用者已遵守記錄的參數類型和範圍。如果文件要求清單,而使用者給定一個元組,我們不保證從一個版本到另一個版本行為一致。

棄用

行為可能會在棄用期(通常為兩個版本長)後發生變更。警告是使用 Python 的warnings 模組發出的。

關鍵字引數

我們有時會假設所有選用參數(除了 X 和 y 到 fit 和類似方法)都僅作為關鍵字引數傳遞,並且可以按位置重新排序。

錯誤修復和增強功能

錯誤修復和 - 較少見的 - 增強功能可能會變更估算器的行為,包括在相同資料和random_state 上訓練的估算器的預測。發生這種情況時,我們會嘗試在變更記錄中清楚地註明。

序列化

我們不保證在一個版本中 pickled 估算器允許在後續版本中 unpickled 為等效模型。(對於 sklearn 套件中的估算器,當嘗試進行此 unpickling 時,即使它可能碰巧有效,我們也會發出警告。)請參閱安全性與可維護性限制

utils.estimator_checks.check_estimator

我們為估算器檢查提供有限的向後相容性保證:我們可能會對使用此函式測試的估算器增加額外要求,通常是在這些要求被非正式假設但未經過正式測試時。

儘管我們與使用者有此非正式合約,但該軟體仍按原樣提供,如授權許可中所述。當版本不小心引入不向後相容的變更時,這些變更稱為軟體回歸。

可呼叫#

一個函式、類別或實作 __call__ 方法的物件;當 callable() 的引數為 True 時傳回任何內容。

類別特徵#

一個類別型或名義型特徵 (feature)是指在資料群體中具有一組有限的離散值的特徵。這些通常以整數或字串的欄位表示。大多數 scikit-learn 估計器會拒絕字串,而整數會被視為序數或計數值。為了與大多數估計器一起使用,類別變數應該進行獨熱編碼。值得注意的例外包括基於樹的模型,如隨機森林和梯度提升模型,這些模型通常在使用整數編碼的類別變數時效果更好且速度更快。OrdinalEncoder 有助於將字串值的類別特徵編碼為序數整數,而 OneHotEncoder 可用於對類別特徵進行獨熱編碼。另請參閱 編碼類別特徵categorical-encoding 套件,以取得與編碼類別特徵相關的工具。

複製 (clone)#
已複製 (cloned)#

使用 clone 複製一個估計器實例 (estimator instance),並建立一個新的實例,該實例具有相同的參數 (parameters),但不包含任何已擬合的屬性 (attributes)

當呼叫 fit 時,一個元估計器 (meta-estimator) 通常會在擬合複製的實例之前複製一個封裝的估計器實例。(由於歷史原因,例外情況包括 PipelineFeatureUnion。)

如果估計器的 random_state 參數是一個整數(或者如果估計器沒有 random_state 參數),則會傳回一個 *精確複製*:複製的估計器和原始估計器將產生完全相同的結果。否則,會傳回一個 *統計複製*:複製的估計器可能會產生與原始估計器不同的結果。更多詳細資訊請參閱 控制隨機性

常見測試 (common tests)#

這是指在 Scikit-learn 中幾乎每個估計器類別上運行的測試,以檢查它們是否符合基本 API 慣例。它們可透過 utils.estimator_checks.check_estimatorutils.estimator_checks.parametrize_with_checks 供外部使用,大部分實作在 sklearn/utils/estimator_checks.py 中。

注意:目前有一些對常見測試機制的例外情況硬式編碼在程式庫中,但我們希望透過使用語義估計器標籤 (estimator tags) 在估計器上標記例外行為來取代此機制。

交叉擬合 (cross-fitting)#
交叉擬合 (cross fitting)#

一種重新取樣方法,會迭代地將資料分割成互斥的子集,以擬合兩個階段。在第一階段,互斥的子集使得可以在訓練期間未見過的資料上計算預測或轉換。然後在第二階段使用計算的資料。目標是避免在第一階段出現任何過擬合,從而將偏差引入第二階段的輸入資料分佈中。有關其使用的範例,請參閱:TargetEncoderStackingClassifierStackingRegressorCalibratedClassifierCV

交叉驗證 (cross-validation)#
交叉驗證 (cross validation)#

一種重新取樣方法,會迭代地將資料分割成互斥的「訓練」和「測試」子集,以便可以在未見過的資料上評估模型效能。這樣可以保留資料,因為避免了保留「驗證」資料集的需求,並且由於通常會執行多輪交叉驗證,因此可以解釋變異性。有關更多詳細資訊,請參閱 使用者指南

棄用 (deprecation)#

我們使用棄用來緩慢地違反我們的向後相容性 (backwards compatibility)保證,通常是為了

  • 變更參數的預設值;或

  • 移除參數、屬性、方法、類別等。

當使用已棄用的元素時,我們通常會發出警告,儘管這可能存在限制。例如,當有人設定已棄用的參數時,我們會發出警告,但當他們存取估計器實例上的該參數屬性時,可能不會發出警告。

請參閱 貢獻者指南

維度 (dimensionality)#

可以用來指特徵 (features)的數量(即 n_features),或二維特徵矩陣中的欄位。但是,維度也用於指 NumPy 陣列形狀的長度,區分一維陣列和二維矩陣。

文檔字串 (docstring)#

模組、類別、函式等的嵌入式文件,通常在程式碼中以字串的形式出現在物件定義的開頭,並且可以作為物件的 __doc__ 屬性存取。

我們盡量遵守 PEP257,並遵循 NumpyDoc 慣例

雙底線 (double underscore)#
雙底線表示法 (double underscore notation)#

在指定巢狀估計器的參數名稱時,在某些情況下可以使用 __ 來分隔父級和子級。最常見的用途是在使用 set_params 通過元估計器設定參數時,以及因此在 參數搜尋 中指定搜尋網格時。請參閱參數 (parameter)。它也用於 pipeline.Pipeline.fit 中,以將樣本屬性 (sample properties)傳遞給管道中估計器的 fit 方法。

dtype#
資料類型 (data type)#

NumPy 陣列假設整個陣列都具有同質的資料類型,可以在陣列(或稀疏矩陣)的 .dtype 屬性中使用。我們通常假設 scikit-learn 資料使用簡單的資料類型:浮點數或整數。我們可能會在編碼或向量化之前支援陣列的物件或字串資料類型。我們的估計器不適用於結構陣列,例如。

我們的文件有時會提供有關 dtype 精度的資訊,例如 np.int32np.int64 等。當提供精度時,它指的是 NumPy dtype。如果使用任意精度,則文件將指 dtype integerfloating。請注意,在這種情況下,精度可能取決於平台。numeric dtype 指的是接受 integerfloating 兩者。

當需要在 64 位元 dtype(即 np.float64np.int64)和 32 位元 dtype(即 np.float32np.int32)之間進行選擇時,這歸結為效率和精度之間的權衡。64 位元類型由於其較低的浮點錯誤而提供更準確的結果,但需要更多的計算資源,導致操作速度較慢和記憶體使用量增加。相反,32 位元類型有望提高操作速度並減少記憶體消耗,但會引入更大的浮點錯誤。效率的提高取決於較低層級的優化,例如向量化、單指令多資料 (SIMD) 或快取優化,但關鍵在於所用演算法的相容性。

具體而言,精度的選擇應考慮到所使用的演算法是否可以有效地利用 np.float32。某些演算法,尤其是某些最小化方法,專門針對 np.float64 編碼,這表示即使傳遞了 np.float32,也會觸發自動轉換回 np.float64。這不僅抵消了預期的計算節省,還引入了額外的開銷,由於這個額外的轉換步驟,導致使用 np.float32 的操作意外地變慢且記憶體密集。

鴨子類型 (duck typing)#

我們嘗試應用鴨子類型來判斷如何處理一些輸入值(例如,檢查給定的估計器是否為分類器)。也就是說,我們盡可能避免使用 isinstance,而是依賴屬性的存在或不存在來判斷物件的行為。遵循此方法時需要一些細微的差別

  • 對於某些估算器,屬性可能只有在 擬合 後才可用。例如,我們無法事先確定 predict_proba 是否在網格搜尋中可用,因為網格搜尋的最後一步會在機率預測器和非機率預測器之間交替。在以下範例中,我們只能在將 clf 擬合到某些資料後,才能判斷它是否為機率預測器。

    >>> from sklearn.model_selection import GridSearchCV
    >>> from sklearn.linear_model import SGDClassifier
    >>> clf = GridSearchCV(SGDClassifier(),
    ...                    param_grid={'loss': ['log_loss', 'hinge']})
    

    這表示我們只能在擬合後檢查鴨子型別的屬性,而且我們必須小心,根據底層估算器在擬合後的狀態,讓元估算器僅呈現屬性。

  • 檢查屬性是否存在(使用 hasattr)通常與取得屬性(getattr 或點符號)一樣耗費資源。在某些情況下,取得屬性可能確實很耗費資源(例如,對於 feature_importances_ 的某些實作,這可能表示 API 設計有缺陷)。因此,應避免使用 hasattr 後跟 getattr 的程式碼;最好在 try-except 區塊中使用 getattr

  • 為了確定估算器的某些期望或對某些功能的支持,我們使用估算器標籤而不是鴨子型別。

提前停止#

這包括在訓練損失收斂之前停止迭代最佳化方法,以避免過度擬合。這通常是通過監視驗證集上的泛化分數來完成的。如果可用,可以通過參數 early_stopping 或設定正數的 n_iter_no_change 來啟用。

估算器實例#

我們有時使用此術語來區分估算器類別和已建構的實例。例如,在以下範例中,cls 是一個估算器類別,而 est1est2 是實例。

cls = RandomForestClassifier
est1 = cls()
est2 = RandomForestClassifier()
範例#

我們嘗試為 API 中的大多數函數和類別提供基本用法範例。

  • 作為其 docstring 中的 doctest(即在 sklearn/ 程式碼庫本身中)。

  • 作為 範例展示 中的範例,這些範例是從 examples/ 目錄中的腳本呈現(使用 sphinx-gallery),說明估算器/函數的主要功能或參數。這些範例也應從使用者指南中引用。

  • 有時在使用者指南中(從 doc/ 建構),並提供估算器的技術描述。

實驗性#

實驗性工具已經可用,但其公共 API,例如預設參數值或擬合屬性,在未來的版本中仍可能會變更,而不會有通常的棄用警告政策。

評估指標#
評估指標#

評估指標提供了衡量模型效能的標準。我們可能會專門使用此術語來指代 metrics 中的函數(忽略 pairwise),這與 score 方法和交叉驗證中使用的 scoring API 不同。請參閱 指標和評分:量化預測的品質

這些函數通常接受真實值(或原始資料,在沒有真實值的情況下,指標會評估叢集)和預測值,可以是 predict 的輸出(y_pred)、predict_proba 的輸出(y_proba),或是包含 decision_function 的任意分數函數的輸出(y_score)。如果較高的分數表示更好的模型,函數通常以 _score 結尾命名;如果較低的分數表示更好的模型,則以 _loss 結尾命名。介面的這種多樣性激發了評分 API 的需求。

請注意,某些估算器可以計算未包含在 metrics 中的指標,並且是特定於估算器的,特別是模型可能性。

估算器標籤#

估算器標籤描述了估算器的某些功能。這可以根據估算器檢測啟用某些執行時行為,但也允許測試每個估算器是否具有適當的不變性,同時免於其他通用測試

估算器標籤的某些方面目前是通過 predict_proba 等方法的 鴨子型別 和估算器物件上的一些特殊屬性來確定的。

如需更詳細的資訊,請參閱估算器標籤

特徵#
特徵#
特徵向量#

抽象而言,特徵是一個函數(在其數學意義上),將取樣的物件對應到數值或類別量。「特徵」也通常用於指代這些量,它們是表示樣本的向量的個別元素。在資料矩陣中,特徵表示為列:每列包含將特徵函數應用於一組樣本的結果。

在其他地方,特徵被稱為屬性、預測器、回歸器或自變數。

scikit-learn 中的幾乎所有估算器都假設特徵是數值的、有限的且沒有遺失值,即使它們具有語義上不同的域和分佈(類別型、序數型、計數型、實數型、間隔型)。另請參閱 類別特徵遺失值

n_features 表示資料集中的特徵數量。

擬合#

在估算器上呼叫 fit(或 fit_transformfit_predict 等)。

已擬合#

估算器在擬合後的狀態。

沒有檢查估算器是否已擬合的傳統程序。但是,未擬合的估算器

函數#

我們為許多演算法提供特殊的函數介面,而估算器類別提供更一致的介面。

特別是,Scikit-learn 可能會提供一個函數介面,將模型擬合到某些數據並返回學習到的模型參數,如 linear_model.enet_path 中所示。對於傳導式模型,這也會返回嵌入或叢集標籤,如 manifold.spectral_embeddingcluster.dbscan 中所示。許多預處理轉換器也提供函數介面,類似於呼叫 fit_transform,如 preprocessing.maxabs_scale 中所示。使用者應謹慎避免在使用這些 fit_transform 等效函數時發生資料洩漏

我們對於何時或何時不提供估計器的函數形式沒有嚴格的政策,但維護人員應考慮與現有介面的一致性,以及提供函數是否會導致使用者偏離最佳實踐(關於資料洩漏等)。

請參閱範例

超參數#
超參數#

請參閱參數

填補#
填補法#

大多數機器學習演算法都要求其輸入沒有遺失值,如果違反此要求,則無法運作。嘗試填補(或填入)遺失值的演算法稱為填補演算法。

可索引#

一個類陣列稀疏矩陣、pandas DataFrame 或序列(通常為列表)。

歸納#
歸納式#

歸納式(與傳導式相對)機器學習會建構某些數據的模型,然後可以將該模型應用於新的實例。Scikit-learn 中的大多數估計器都是歸納式的,具有 predict 和/或 transform 方法。

joblib#

一個 Python 函式庫 (https://joblib.readthedocs.io),用於 Scikit-learn 中,以促進簡單的平行處理和快取。Joblib 的重點是有效處理 numpy 陣列,例如透過使用記憶體映射。有關詳細資訊,請參閱 平行處理

標籤指示矩陣#
多標籤指示矩陣#
多標籤指示矩陣#

用於表示多標籤資料的格式,其中二維陣列或稀疏矩陣的每一列對應一個樣本,每一欄對應一個類別,如果樣本標記有該類別,則每個元素為 1,否則為 0。

洩漏#
資料洩漏#

交叉驗證中的一個問題,其中泛化效能可能被高估,因為測試資料的知識被不經意地包含在訓練模型中。例如,當將轉換器應用於整個資料集,而不是交叉驗證分割中的每個訓練部分時,就會存在這種風險。

我們的目標是提供介面(例如 pipelinemodel_selection),以保護使用者免受資料洩漏的影響。

記憶體映射#
記憶體映射#
記憶體映射#

一種記憶體效率策略,將資料保留在磁碟上,而不是複製到主記憶體中。可以使用 numpy.memmap 為可以讀取、寫入或兩者的陣列建立記憶體映射。當使用 joblib 在 Scikit-learn 中平行處理操作時,它可能會自動記憶體映射大型陣列,以減少多處理中的記憶體重複開銷。

遺失值#

大多數 Scikit-learn 估計器無法處理遺失值。當它們可以處理時(例如在 impute.SimpleImputer 中),NaN 是浮點陣列中遺失值的首選表示形式。如果陣列具有整數 dtype,則無法表示 NaN。因此,當可以在整數空間中執行填補法或學習時,我們支援指定另一個 missing_values 值。未標記的資料目標中遺失值的一個特例。

n_features#

特徵的數量。

n_outputs#

目標中的輸出數量。

n_samples#

樣本的數量。

n_targets#

n_outputs 的同義詞。

敘述式文件#
敘述式文件#

使用者指南 的別名,也就是在 doc/modules/ 中撰寫的文件。與透過 docstring 提供的API 參考不同,使用者指南旨在

  • 將 Scikit-learn 提供的工具按主題或使用方式分組在一起;

  • 說明為什麼有人會使用每個特定的工具,通常透過比較;

  • 提供工具的直覺和技術描述;

  • 提供或連結到使用工具關鍵功能的範例

np#

由於慣用的匯入語句,Numpy 的簡寫

import numpy as np
線上學習#

其中,模型會透過在對應的數據批次進行預測後,立即接收每個真實值目標批次來迭代更新。本質上,模型必須在每個批次之後可用於預測。請參閱 partial_fit

超出核心#

一種效率策略,其中並非所有資料都一次儲存在主記憶體中,通常透過對批次資料執行學習。請參閱 partial_fit

輸出#

目標中每個樣本的個別純量/類別變數。例如,在多標籤分類中,每個可能的標籤對應一個二元輸出。也稱為回應任務目標。請參閱多類多輸出連續多輸出

#

長度為二的元組。

參數#
參數#
參數#
參數#

我們主要使用參數 (parameter) 來指稱估算器在建構時可以指定的方面。例如,max_depthrandom_stateRandomForestClassifier 的參數。估算器的建構子參數會以未修改的形式儲存在估算器實例的屬性中,並且依照慣例以字母字元開頭,並以字母數字字元結尾。每個估算器的建構子參數都描述在估算器的 docstring 中。

我們不使用統計意義上的參數,其中參數是指指定模型並可以從數據中估算的值。我們所謂的參數可能在統計學家眼中是模型超參數:用於配置模型結構的方面,通常不是直接從數據中學習而來。然而,我們的參數也用於指定不影響學習模型的建模操作,例如用於控制平行處理的 n_jobs

在談論元估算器 (meta-estimator)的參數時,我們也可能包含元估算器所包裹的估算器的參數。通常,這些巢狀參數會使用雙底線 (double underscore) (__) 來分隔作為參數的估算器及其參數。因此,clf = BaggingClassifier(estimator=DecisionTreeClassifier(max_depth=3)) 具有一個深層參數 estimator__max_depth,其值為 3,可以使用 clf.estimator.max_depthclf.get_params()['estimator__max_depth'] 來存取。

可以使用估算器實例 (estimator instance)get_params 方法來檢索參數列表及其目前的值。

在建構和擬合之間,可以使用 set_params 修改參數。為了實現此目的,參數通常在建構估算器或設定每個參數時不會進行驗證或更改。參數驗證在呼叫 fit 時執行。

常見參數在下方列出。

成對度量 (pairwise metric)#
成對度量 (pairwise metrics)#

廣義來說,成對度量定義了一個用於測量兩個樣本之間相似性或相異性的函數(每個樣本通常表示為特徵向量 (feature vector))。我們特別透過 metrics.pairwise_distances 提供距離度量(以及像餘弦距離這種不正確的度量)的實作,並在 metrics.pairwise.pairwise_kernels 中提供核函數(一類受約束的相似性函數)。這些可以計算成對距離矩陣,這些矩陣是對稱的,因此會冗餘地儲存數據。

另請參閱 預先計算 (precomputed)度量 (metric)

請注意,對於大多數距離度量,我們依賴於 scipy.spatial.distance 中的實作,但為了在我們的環境中提高效率,可能會重新實作。metrics.DistanceMetric 介面用於實作距離度量,以便與高效的鄰近搜尋整合。

pd#

由於習慣性的導入語句,是 Pandas 的縮寫

import pandas as pd
預先計算 (precomputed)#

當演算法依賴成對度量,並且可以單獨從成對度量計算時,我們通常允許使用者指定所提供的 X 已經在成對(不)相似空間中,而不是在特徵空間中。也就是說,當傳遞給 fit 時,它是一個正方形的對稱矩陣,每個向量表示與每個樣本的(不)相似度;當傳遞給預測/轉換方法時,每一列對應一個測試樣本,每一欄對應一個訓練樣本。

通常透過將 metricaffinitykernel 參數設定為字串 ‘precomputed’ 來表示使用預先計算的 X。如果是這種情況,則估算器應將 pairwise 估算器標籤設定為 True。

矩形 (rectangular)#

可以表示為矩陣的數據,其中第一軸是樣本 (samples),第二軸是固定的、有限的特徵 (features),稱為矩形。

此術語不包括具有非向量結構的樣本,例如文字、任意大小的影像、任意長度的時間序列、一組向量等。向量化器 (vectorizer) 的目的是產生此類數據的矩形形式。

樣本 (sample)#
樣本 (samples)#

我們通常使用此術語作為名詞來表示單個特徵向量。在其他地方,樣本稱為實例、數據點或觀測值。n_samples 表示數據集中的樣本數,即數據陣列 X 中的列數。請注意,此定義在機器學習中是標準的,並且與統計學中的含義不同,在統計學中,它表示*收集或選擇的一組個體或對象*。

樣本屬性 (sample property)#
樣本屬性 (sample properties)#

樣本屬性是傳遞給估算器方法或類似函數的每個樣本的數據(例如,長度為 n_samples 的陣列),與 特徵 (features) (X) 和 目標 (target) (y) 並列但有所區別。最顯著的例子是 sample_weight;請參閱 數據和樣本屬性 中的其他屬性。

自 0.19 版本起,我們在 元估算器中沒有處理樣本屬性及其路由的統一方法,但通常使用 fit_params 參數。

scikit-learn-contrib#

一個發布與 Scikit-learn 相容的函式庫的場所,這些函式庫已獲得核心開發人員和貢獻社群的廣泛授權,但不由核心開發團隊維護。請參閱 https://scikit-learn-contrib.github.io

scikit-learn 增強提案 (scikit-learn enhancement proposals)#
SLEP#
SLEP#

對 API 原則的變更以及對相依性或支援版本的變更,透過 SLEP 進行,並遵循 Scikit-learn 管理和決策 中概述的決策制定流程。對於所有投票,提案必須在投票前公開並討論。此類提案必須是整合的文件,以「Scikit-Learn 增強提案」(SLEP) 的形式呈現,而不是針對問題的冗長討論。SLEP 必須以 pull-request 的形式提交到 增強提案,並使用 SLEP 模板

半監督 (semi-supervised)#
半監督式學習 (semi-supervised learning)#
半監督 (semisupervised)#

擬合 (fitting)模型時,預期的預測(標籤或真實值)僅適用於作為訓練數據提供的一些樣本的學習。我們習慣上將標籤 -1 應用於半監督分類中的未標記 (unlabeled)樣本。

稀疏矩陣 (sparse matrix)#
稀疏圖#

一種二維數值資料的表示方式,相較於對應的密集 numpy 陣列,當幾乎所有元素都為零時,這種方式更有效率地利用記憶體。我們使用 scipy.sparse 框架,該框架提供了多種底層稀疏資料表示法或格式。某些格式在特定任務上比其他格式更有效率,當特定格式提供特殊好處時,我們會嘗試在 Scikit-learn 參數描述中記錄此事實。

一些稀疏矩陣格式(特別是 CSR、CSC、COO 和 LIL)區分隱含零和顯式零。顯式零會被儲存(即它們在 data 陣列中佔用記憶體),而隱含零對應於未在顯式儲存中定義的每個元素。

Scikit-learn 中使用了稀疏矩陣的兩種語義

矩陣語義

稀疏矩陣被解釋為一個陣列,其中隱含和顯式零都被解釋為數字 0。這是最常採用的解釋,例如,當稀疏矩陣用於特徵矩陣或多標籤指示矩陣時。

圖語義

scipy.sparse.csgraph 一樣,顯式零被解釋為數字 0,但隱含零表示遮罩或不存在的值,例如圖的兩個頂點之間不存在邊,其中顯式值表示邊的權重。這種解釋用於表示集群中的連通性、最近鄰的表示(例如 neighbors.kneighbors_graph)以及僅需要每個點鄰域中的距離的預先計算距離表示。

當處理稀疏矩陣時,我們假設它是因充分理由而稀疏的,並避免編寫會使使用者提供的稀疏矩陣密集化的程式碼,而是保持稀疏性,如果不可能則引發錯誤(即,如果估計器不支援/無法支援稀疏矩陣)。

無狀態#

如果估計器沒有儲存任何在 fit 期間獲得的資訊,則該估計器是無狀態的。此資訊可以是 fit 期間學習到的參數,也可以是從訓練資料計算出的統計資訊。如果估計器除了在 __init__ 中設定的屬性之外沒有其他屬性,則該估計器是無狀態的。對這些估計器呼叫 fit 只會驗證在 __init__ 中傳遞的公有屬性

監督式#
監督式學習#

擬合 模型時,每個樣本都有可用的預期預測(標籤或真實值)的學習,以 y 的形式提供。這是分類器迴歸器等其他估計器所採用的方法。

目標#
目標值#

監督式(和半監督式)學習中,以 y 的形式傳遞給估計器的 fit 方法的依變數。也稱為依變數結果變數響應變數真實值標籤。Scikit-learn 使用結構最少的目標:來自有限集合的類別、有限的實數值、多個類別或多個數字。請參閱目標類型

轉換式#
轉換式的#

轉換式(與歸納式相對)機器學習方法旨在對特定資料集建模,而不是將該模型應用於未見過的資料。範例包括 manifold.TSNEcluster.AgglomerativeClusteringneighbors.LocalOutlierFactor

未標記#
未標記資料#

在擬合時具有未知真實值的樣本;等效地,目標 中的遺失值。另請參閱半監督式非監督式學習。

非監督式#
非監督式學習#

擬合模型時,每個樣本的預期預測(標籤或真實值)不可用的學習,如在分群器離群值偵測器中。非監督式估計器會忽略傳遞給 fit 的任何 y

類別 API 和估計器類型#

分類器#
分類器們#

一種具有一組有限的離散可能輸出值的監督式(或半監督式預測器

分類器支援對二元多類別多標籤多類別多輸出目標中的一些進行建模。在 scikit-learn 中,所有分類器都支援多類別分類,預設為使用二元分類問題上的「一對多」策略。

分類器必須在擬合後儲存一個 classes_ 屬性,並從 base.ClassifierMixin 繼承,該屬性會正確設定其對應的估計器標籤

可以使用 is_classifier 將分類器與其他估計器區分開來。

分類器必須實作

實作 decision_functionpredict_probapredict_log_proba 也可能很適合。

分群器#
分群器們#

一種具有一組有限的離散輸出值的非監督式預測器

分群器通常會在擬合後儲存 labels_,而且如果是轉換式則必須儲存。

分群器必須實作

密度估計器#

一種非監督式輸入機率密度函數的估計。常用的技術包括

估計器#
估計器們#

一個管理模型估計和解碼的物件。模型估計為以下項的確定性函數:

估計的模型儲存在估計器實例的公開和私有屬性中,以便透過預測和轉換方法進行解碼。

估計器必須提供 fit 方法,並且應該提供 set_paramsget_params,儘管這些通常是從 base.BaseEstimator 繼承而來的。

某些估計器的核心功能也可能以函數的形式提供。

特徵提取器#
特徵提取器#

一個轉換器,它接受輸入,其中每個樣本不是以固定長度的類陣列 物件表示,而是產生每個樣本的特徵類陣列 物件(因此,對於一組樣本,則為二維類陣列)。換句話說,它(有損地)將非矩形資料表示映射到矩形資料。

特徵提取器必須至少實作

元估計器#
元估計器#
元估計器#
元估計器#

一個估計器,它將另一個估計器作為參數。範例包括 pipeline.Pipelinemodel_selection.GridSearchCVfeature_selection.SelectFromModelensemble.BaggingClassifier

在元估計器的 fit 方法中,任何包含的估計器都應在擬合之前進行複製(儘管 FIXME:Pipeline 和 FeatureUnion 目前沒有這樣做)。例外情況是,估計器可能會明確記錄它接受預先擬合的估計器(例如,在 feature_selection.SelectFromModel 中使用 prefit=True)。一個已知的問題是,如果元估計器被複製,預先擬合的估計器將會失去其模型。即使所有包含的估計器都是預先擬合的,也應該在預測之前呼叫元估計器的 fit

在元估計器的主要行為(例如,predicttransform 實作)是提供的基本估計器(或多個基本估計器)的預測/轉換方法的函數的情況下,元估計器應該至少提供基本估計器提供的標準方法。在元估計器被擬合之前,可能無法識別底層估計器提供了哪些方法(另請參閱 鴨子類型),為此,utils.metaestimators.available_if 可能會有幫助。它還應該提供(或修改)基本估計器提供的估計器標籤classes_ 屬性。

元估計器應該在將資料傳遞到底層估計器之前,盡可能減少資料驗證。這可以節省計算時間,並且例如,可能允許底層估計器輕鬆地處理非矩形的資料。

離群值偵測器#
離群值偵測器#

一個非監督式二元預測器,它模擬核心樣本和離群樣本之間的區別。

離群值偵測器必須實作

歸納式離群值偵測器也可以實作 decision_function 以給出標準化的內群值分數,其中離群值的分數低於 0。 score_samples 可以提供每個樣本的非標準化分數。

預測器#
預測器#

一個支援 predict 和/或 fit_predict估計器。這包括分類器迴歸器離群值偵測器叢集器

在統計學中,「預測器」指的是特徵

迴歸器#
迴歸器#

一個具有連續輸出值的監督式(或半監督式預測器

迴歸器繼承自 base.RegressorMixin,它會正確設定它們的估計器標籤

可以使用 is_regressor 來區分迴歸器和其他估計器。

迴歸器必須實作

轉換器#
轉換器#

一個支援 transform 和/或 fit_transform 的估計器。一個純粹的轉導式轉換器,例如 manifold.TSNE,可能不會實作 transform

向量化器#
向量化器#

請參閱特徵提取器

還有一些與一小部分估計器相關的特定 API,例如

交叉驗證分割器#
CV 分割器#
交叉驗證產生器#

一組非估計器類別,用於將資料集分割成一系列的訓練和測試部分(請參閱交叉驗證:評估估計器效能),方法是提供 splitget_n_splits 方法。請注意,與估計器不同,這些類別沒有 fit 方法,也不提供 set_paramsget_params。參數驗證可以在 __init__ 中執行。

交叉驗證估計器#

一個具有內建交叉驗證功能以自動選擇最佳超參數的估計器(請參閱使用者指南)。交叉驗證估計器的一些範例包括 ElasticNetCVLogisticRegressionCV。交叉驗證估計器被命名為 EstimatorCV,並且通常與 GridSearchCV(Estimator(), ...) 大致相等。相較於典型的 估計器 類別與 格點搜尋,使用交叉驗證估計器的優點是它們可以藉由重複使用交叉驗證過程先前步驟中預先計算的結果來利用暖啟動。這通常會提高速度。例外情況是 RidgeCV 類別,它可以執行高效的留一法 (LOO) CV。預設情況下,除了具有 LOO-CV 的 RidgeCV 之外,所有這些估計器都會在找到最佳超參數組合後,在完整的訓練資料集上重新擬合。

評分器#

一個非估算器的可呼叫物件,它在給定的測試資料上評估一個估算器,並返回一個數值。與評估指標不同,返回的數值越大,表示分數越好。請參閱評分參數:定義模型評估規則

更多範例

中繼資料路由#

消費者#

一個消耗中繼資料的物件。此物件通常是一個估算器、一個評分器或一個CV 分割器。消耗中繼資料表示在計算中使用它,例如使用樣本權重來計算某種分數。成為消費者並不表示物件總是接收特定的中繼資料,而是表示如果提供了中繼資料,它可以使用它。

中繼資料#

與給定的 Xy 資料相關的資料,但不是資料的直接一部分,例如樣本權重群組,並被傳遞給不同的物件和方法,例如傳遞給評分器CV 分割器

路由器#

一個將中繼資料路由到消費者的物件。此物件通常是一個元估算器,例如PipelineGridSearchCV。某些路由器也可以是消費者。例如,當元估算器使用給定的群組時,就會發生這種情況,它也會將其傳遞給其某些子物件,例如CV 分割器

請參閱中繼資料路由使用者指南以取得更多資訊。

目標類型#

二元#

一個包含兩個類別的分類問題。二元目標可以表示為多類別問題,但只有兩個標籤。二元決策函數表示為一維陣列。

在語義上,一個類別通常被視為「正」類別。除非另有指定(例如在評估指標中使用pos_label),否則我們將數值或字典順序較大的類別標籤視為正類別:在標籤 [0, 1] 中,1 是正類別;在 [1, 2] 中,2 是正類別;在 [‘no’, ‘yes’] 中,‘yes’ 是正類別;在 [‘no’, ‘YES’] 中,‘no’ 是正類別。這會影響例如決策函數的輸出。

請注意,從多類別 y 或連續 y 中抽樣的資料集可能會顯示為二元。

type_of_target 將針對二元輸入或類似的僅包含單一類別的陣列返回 ‘binary’。

連續#

一個迴歸問題,其中每個樣本的目標都是一個有限的浮點數,表示為浮點數的一維陣列(或有時是整數)。

type_of_target 將針對連續輸入返回 ‘continuous’,但如果資料全部是整數,則會被識別為 ‘multiclass’。

連續多輸出#
連續多輸出#
多輸出連續#
多輸出連續#

一個迴歸問題,其中每個樣本的目標都包含 n_outputs輸出,每個輸出都是一個有限的浮點數,對於特定資料集中固定的整數 n_outputs > 1

連續多輸出目標表示為多個連續目標,水平堆疊成形狀為 (n_samples, n_outputs) 的陣列。

type_of_target 將針對連續多輸出輸入返回 ‘continuous-multioutput’,但如果資料全部是整數,則會被識別為 ‘multiclass-multioutput’。

多類別#
多類別#

一個包含兩個以上類別的分類問題。多類別目標可以表示為字串或整數的一維陣列。也接受整數的二維欄向量(即多輸出中的單一輸出)。

我們不正式支援其他可排序、可雜湊的物件作為類別標籤,即使估算器在給定此類類型的分類目標時可能會剛好有效。

對於半監督分類,未標記樣本應在 y 中具有特殊標籤 -1。

在 scikit-learn 中,所有支援二元分類的估算器也支援多類別分類,預設使用 One-vs-Rest。

preprocessing.LabelEncoder 有助於將多類別目標規範化為整數。

type_of_target 將針對多類別輸入返回 ‘multiclass’。使用者可能也希望以與 ‘multiclass’ 相同的方式處理 ‘binary’ 輸入。

多類別多輸出#
多類別多輸出#
多輸出多類別#
多輸出多類別#

一個分類問題,其中每個樣本的目標都包含 n_outputs輸出,每個輸出都是一個類別標籤,對於特定資料集中固定的整數 n_outputs > 1。每個輸出都有固定的可用類別集合,並且每個樣本都針對每個輸出標記一個類別。輸出可能是二元或多類別,並且在所有輸出都是二元的情況下,目標是多標籤

多類別多輸出目標表示為多個多類別目標,水平堆疊成形狀為 (n_samples, n_outputs) 的陣列。

XXX:為了簡單起見,我們可能不會總是支援多類別多輸出的字串類別標籤,並且應使用整數類別標籤。

multioutput 提供了使用多個單輸出估算器來估計多輸出問題的估算器。這可能無法完全考慮不同輸出之間的相依性,而本機處理多輸出情況的方法(例如決策樹、最近鄰、神經網路)可能會做得更好。

type_of_target 將針對多類別多輸出輸入返回 ‘multiclass-multioutput’。

多標籤#
多標籤#

一個多類別多輸出目標,其中每個輸出都是二元的。這可以表示為整數的二維(密集)陣列或稀疏矩陣,使得每欄都是一個單獨的二元目標,其中正標籤用 1 表示,負標籤通常用 -1 或 0 表示。並非所有支援密集多標籤目標的地方都支援稀疏多標籤目標。

在語義上,多標籤目標可以認為是每個樣本的一組標籤。雖然內部未使用,但preprocessing.MultiLabelBinarizer 提供了一個實用工具,用於將集合列表表示轉換為二維陣列或稀疏矩陣。使用 preprocessing.LabelBinarizer 對多類別目標進行獨熱編碼會將其轉換為多標籤問題。

type_of_target 將針對多標籤輸入返回 ‘multilabel-indicator’,無論是稀疏還是密集。

多輸出#
多輸出#

一個目標,其中每個樣本都有多個分類/迴歸標籤。請參閱多類別多輸出連續多輸出。我們目前不支援對混合分類和迴歸目標建模。

方法#

decision_function#

在一個已擬合的分類器離群值偵測器中,會預測每個樣本相對於每個類別的「軟性」分數,而不是predict產生的「硬性」類別預測。它的輸入通常只有一些觀測到的數據,X

如果估計器尚未擬合,則調用此方法應引發exceptions.NotFittedError

輸出慣例

二元分類

一個一維陣列,其中值嚴格大於零表示正類別(即classes_中的最後一個類別)。

多類別分類

一個二維陣列,其中按行取最大值的索引是預測的類別。欄位會根據classes_排序。

多標籤分類

Scikit-learn 在多標籤決策函數的表示方式上不一致。它可能以以下兩種方式之一表示

  • 2 維陣列的列表,每個陣列的形狀為:(n_samples,2),類似於多類別多輸出。列表的長度為n_labels

  • 形狀為(n_samplesn_labels)的單個 2 維陣列,其中陣列中的每個「欄」對應於個別的二元分類決策。這與多類別分類格式相同,儘管其語義不同:應像二元情況一樣,通過將閾值設定為 0 來解釋。

多輸出分類

一個 2 維陣列的列表,對應於每個多類別決策函數。

離群值偵測

一個一維陣列,其中大於或等於零的值表示一個內點。

fit#

每個估計器都會提供 fit 方法。它通常會接受一些樣本 X目標 y (如果模型是監督式的),以及可能其他的樣本屬性,例如sample_weight。它應該

  • 清除估計器上儲存的任何先前屬性,除非使用了warm_start

  • 驗證並解釋任何參數,如果參數無效,最好引發錯誤;

  • 驗證輸入數據;

  • 從估計的參數和提供的數據中估計並儲存模型屬性;以及

  • 返回現在已擬合的估計器,以方便方法鏈接。

目標類型描述了 y 的可能格式。

fit_predict#

此方法特別用於非監督式傳導式估計器,它會擬合模型並返回訓練數據的預測結果(類似於predict)。在集群器中,這些預測也會儲存在labels_屬性中,而 .fit_predict(X) 的輸出通常等同於 .fit(X).predict(X)fit_predict 的參數與 fit 的參數相同。

fit_transform#

這是轉換器上的方法,用於擬合估計器並返回轉換後的訓練數據。它接受與fit中相同的參數,其輸出應與調用 .fit(X, ...).transform(X) 的形狀相同。儘管如此,在極少數情況下,.fit_transform(X, ...).fit(X, ...).transform(X) 不會返回相同的值,因為訓練數據需要以不同的方式處理(例如,由於堆疊集成中的模型混合;此類情況應清楚地記錄在案)。傳導式轉換器也可能提供 fit_transform,但不提供 transform

實作 fit_transform 的一個原因是,單獨執行 fittransform 會比一起執行效率低。base.TransformerMixin 提供了一個預設實作,在fit_transform 是否經過特殊化處理的轉換器中,提供一致的介面。

歸納式學習中,其目標是學習一個可以應用於新數據的廣義模型,使用者應小心不要在進一步建模之前,將 fit_transform 應用於整個數據集(即訓練數據和測試數據),因為這會導致數據洩漏

get_feature_names_out#

主要用於特徵提取器,但也用於其他轉換器,為估計器的 transform 方法的輸出中的每一欄提供字串名稱。它會輸出一個字串陣列,並且可以將一個字串的類陣列作為輸入,對應於可以從中生成輸出欄名稱的輸入欄的名稱。如果未傳入 input_features,則會使用 feature_names_in_ 屬性。如果未定義 feature_names_in_ 屬性,則輸入名稱將命名為 [x0, x1, ..., x(n_features_in_ - 1)]

get_n_splits#

CV 分割器(而不是估計器)上,返回如果在給定相同參數的情況下迭代split的返回值,則會獲得的元素數。 採用與分割相同的參數。

get_params#

取得所有可以使用set_params設定的參數及其值。可以使用參數 deep,當設定為 False 時,只返回那些不包含 __ 的參數,也就是說,不是通過包含的估計器間接造成的。

大多數估計器採用來自base.BaseEstimator的定義,該定義僅採用為 __init__ 定義的參數。pipeline.Pipeline(等等)重新實作 get_params,以宣告在其 steps 參數中命名的估計器本身就是參數。

partial_fit#

有助於以線上方式擬合估計器。與 fit 不同,重複調用 partial_fit 不會清除模型,而是使用提供的數據更新模型。提供給 partial_fit 的部分數據可以稱為迷你批次。每個迷你批次必須具有一致的形狀等等。在迭代估計器中,partial_fit 通常只執行單次迭代。

partial_fit 也可用於核外學習,儘管通常僅限於可以線上執行學習的情況,也就是說,模型在每次 partial_fit 後即可使用,並且不需要單獨的處理來完成模型。cluster.Birch 引入了一種慣例,即調用 partial_fit(X) 將產生一個未完成的模型,但是可以通過調用 partial_fit()(即不傳入其他迷你批次)來完成模型。

一般而言,在調用 partial_fit 之間不應修改估計器參數,儘管 partial_fit 應同時驗證這些參數以及新的迷你批次數據。相反地,warm_start 用於使用相同的數據但不同的參數來重複擬合相同的估計器。

fit 類似,partial_fit 應該回傳估算器物件。

要清除模型,應該建構一個新的估算器,例如使用 base.clone

注意:在 fit 之後使用 partial_fit 會導致未定義的行為。

predict#

為每個樣本進行預測,通常只接受 X 作為輸入(但請參閱下方的迴歸器輸出慣例)。在分類器迴歸器 中,此預測與擬合時使用的目標空間相同(例如,如果擬合中的 y 由這些字串組成,則為 {'red', 'amber', 'green'} 中的一個)。儘管如此,即使傳遞給 fity 是列表或其他類似陣列,predict 的輸出應該始終是一個陣列或稀疏矩陣。在分群器離群值檢測器中,預測是一個整數。

如果估計器尚未擬合,則調用此方法應引發exceptions.NotFittedError

輸出慣例

分類器

形狀為 (n_samples,)(n_samples, n_outputs) 的陣列。多標籤資料如果擬合時使用了稀疏矩陣,則可以使用稀疏矩陣表示。每個元素都應該是分類器的 classes_ 屬性中的一個值。

分群器

形狀為 (n_samples,) 的陣列,其中每個值介於 0 到 n_clusters - 1 之間,如果對應的樣本已分群,則為 -1 如果該樣本未分群,如同 cluster.dbscan

離群值檢測器

形狀為 (n_samples,) 的陣列,其中每個值對於離群值為 -1,否則為 1。

迴歸器

形狀為 (n_samples,) 的數值陣列,通常為 float64。一些迴歸器在其 predict 方法中具有額外的選項,允許它們回傳相對於預測值的標準差 (return_std=True) 或共變異數 (return_cov=True)。在這種情況下,回傳值是一個陣列元組,對應於所需的 (預測均值、std、cov)。

predict_log_proba#

predict_proba 輸出的自然對數,旨在方便數值穩定性。

predict_proba#

分類器分群器中的一個方法,可以回傳每個類別/群集的機率估計。其輸入通常只有一些觀察到的數據 X

如果估計器尚未擬合,則調用此方法應引發exceptions.NotFittedError

輸出慣例與 decision_function 的慣例類似,但在二元分類的情況下,每個類別都會輸出一個列(而 decision_function 輸出一個 1 維陣列)。對於二元和多類別預測,每一列的總和應為 1。

與其他方法類似,只有當估算器可以進行機率預測時,才應該存在 predict_proba(請參閱鴨子型別)。這表示該方法的存在可能取決於估算器參數(例如,在 linear_model.SGDClassifier 中)或訓練資料(例如,在 model_selection.GridSearchCV 中),並且可能僅在擬合後出現。

score#

估算器(通常是預測器)上的方法,評估其在給定資料集上的預測,並回傳單一數值分數。較大的回傳值應表示較好的預測;預設情況下,分類器使用準確度,迴歸器使用 R^2。

如果估計器尚未擬合,則調用此方法應引發exceptions.NotFittedError

某些估算器會實作自訂的、特定於估算器的評分函數,通常是模型下資料的可能性。

score_samples#

一個回傳每個給定樣本分數的方法。分數的確切定義因類別而異。在密度估計的情況下,它可以是資料上的對數密度模型,在離群值檢測的情況下,它可以是資料的離群值因子的相反數。

如果估計器尚未擬合,則調用此方法應引發exceptions.NotFittedError

set_params#

在任何估算器中都可用,接受對應於 get_params 中鍵值的關鍵字參數。每個參數都會提供一個新值來指定,以便在 set_params 之後呼叫 get_params 將反映變更的參數。大多數估算器都使用 base.BaseEstimator 中的實作,該實作會處理巢狀參數,否則會將參數設定為估算器的屬性。該方法在 pipeline.Pipeline 和相關的估算器中被覆寫。

split#

CV 分割器(不是估算器)上,此方法接受參數(Xygroups),其中所有參數都是可選的,並回傳 (train_idx, test_idx) 配對的迭代器。每個 {train,test}_idx 都是一個 1 維整數陣列,其值從 0 到 X.shape[0] - 1,長度任意,這樣在某個 train_idx 和其對應的 test_idx 中都不會出現任何值。

transform#

轉換器中,將輸入(通常只有 X)轉換為某些轉換空間(傳統上表示為 Xt)。輸出是一個陣列或稀疏矩陣,其長度為 n_samples,且在擬合後,列數是固定的。

如果估計器尚未擬合,則調用此方法應引發exceptions.NotFittedError

參數#

這些常見的參數名稱,專門用於估算器建構(請參閱概念參數),有時也會作為函數或非估算器建構子的參數出現。

class_weight#

用於在擬合分類器時指定樣本權重,作為目標類別的函數。如果也支援並給定 sample_weight,則它會與 class_weight 的貢獻相乘。同樣地,如果 class_weight 用於多輸出(包括多標籤)任務,則權重會在輸出(即 y 的列)之間相乘。

預設情況下,所有樣本都具有相等的權重,因此類別的權重實際上由其在訓練資料中的普遍性決定。這可以使用 class_weight={label1: 1, label2: 1, ...} 為所有類別標籤明確實現。

更一般來說,class_weight 被指定為將類別標籤對應到權重的字典 ({class_label: weight}),這樣,命名類別的每個樣本都會獲得該權重。

class_weight='balanced' 可以用於通過給每個樣本一個與其類別在訓練資料中的普遍性成反比的權重,來使所有類別具有相等的權重:n_samples / (n_classes * np.bincount(y))。類別權重的使用方式會根據演算法的不同而不同:對於線性模型(例如線性 SVM 或邏輯迴歸),類別權重會通過將每個樣本的損失乘以其類別權重來改變損失函數。對於基於樹的演算法,類別權重將用於重新加權分割準則。請注意,但是,這種重新平衡並沒有考慮每個類別中樣本的權重。

對於多輸出分類,會使用字典列表來指定每個輸出的權重。例如,對於四類多標籤分類,權重應該是 [{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.class_weight.compute_class_weight 進行驗證和解釋。

cv#

決定交叉驗證分割策略,用於基於交叉驗證的常式中。cv 也可用於估計器中,例如 multioutput.ClassifierChaincalibration.CalibratedClassifierCV,它們使用一個估計器的預測結果作為另一個估計器的訓練數據,以避免過度擬合訓練監督。

cv 的可能輸入通常為:

在某些例外情況下(特別是不使用交叉驗證是選項的情況下),預設值為 5 折。

cv 值會使用 model_selection.check_cv 進行驗證和解釋。

kernel#

指定 Kernel 方法演算法要使用的 Kernel 函數。例如,估計器 svm.SVCgaussian_process.GaussianProcessClassifier 都有一個 kernel 參數,該參數會採用要使用的 Kernel 名稱作為字串,或採用可用來計算 Kernel 矩陣的可呼叫 Kernel 函數。如需更多參考,請參閱 Kernel 近似高斯過程 使用者指南。

max_iter#

對於涉及迭代最佳化的估計器,這會決定在 fit 中執行的最大迭代次數。如果執行 max_iter 次迭代而沒有收斂,則應引發 exceptions.ConvergenceWarning。請注意,「單次迭代」的解釋在不同的估計器中並不一致:有些(但並非全部)使用它來表示單個 epoch(即對數據中每個樣本的單次遍歷)。

FIXME 也許我們應該針對 ConvergenceWarning 和 max_iter 之間的關係進行一些常見的測試。

memory#

有些估計器會使用 joblib.Memory 來儲存擬合期間的部分解決方案。因此,當再次呼叫 fit 時,這些部分解決方案已備忘錄化,可以重複使用。

可以將 memory 參數指定為具有目錄路徑的字串,或者可以使用 joblib.Memory 實例(或具有類似介面的物件,即 cache 方法)。

memory 值會使用 utils.validation.check_memory 進行驗證和解釋。

metric#

作為參數,這是決定兩個數據點之間距離的方案。請參閱 metrics.pairwise_distances。在實務中,對於某些演算法,可能會使用不正確的距離度量(不符合三角不等式的度量,例如餘弦距離)。

XXX:階層式分群會使用具有此含義的 affinity

我們也使用 *metric* 來指稱 評估指標,但避免使用此含義作為參數名稱。

n_components#

轉換器 應將輸入轉換成的特徵數量。如需仿射投影的特殊情況,請參閱 components_

n_iter_no_change#

在停止迭代程序之前,沒有改進而要等待的迭代次數。這也稱為 *耐心* 參數。它通常與 提早停止 一起使用,以避免過早停止。

n_jobs#

此參數用於指定對於使用 joblib 並行化的常式,應使用多少個並行進程或執行緒。

n_jobs 是一個整數,指定同時執行的工作者最大數量。如果給定 1,則完全不使用 joblib 並行化,這對於偵錯很有用。如果設定為 -1,則會使用所有 CPU。對於低於 -1 的 n_jobs,則會使用 (n_cpus + 1 + n_jobs)。例如,使用 n_jobs=-2 時,會使用除了 1 個之外的所有 CPU。

預設情況下 n_jobsNone,這表示 *未設定*;它通常會被解釋為 n_jobs=1,除非目前的 joblib.Parallel 後端內容另有規定。

請注意,即使 n_jobs=1,在某些設定中也可能會使用低階並行化(透過 Numpy 和 OpenMP)。

如需有關 joblib 的使用及其與 scikit-learn 互動的更多詳細資訊,請參閱我們的 並行化注意事項

pos_label#

在未假設正類別的二元分類問題中,必須使用此值對正標籤進行編碼。此值通常需要計算不對稱評估指標,例如精確率和召回率。

random_state#

每當隨機化是 Scikit-learn 演算法的一部分時,可以提供 random_state 參數來控制所使用的隨機數字產生器。請注意,random_state 的存在並不表示一定會使用隨機化,因為它可能取決於另一個參數的設定,例如 shuffle

傳遞的值會影響函數傳回結果的再現性(fitsplit 或任何其他函數,例如 k_means)。random_state 的值可以是

None(預設)

使用來自 numpy.random 的全域隨機狀態實例。多次呼叫函數將會重複使用相同的實例,並產生不同的結果。

一個整數

使用給定的整數作為種子,產生一個新的隨機數產生器。使用整數作為種子會在不同的呼叫中產生相同的結果。然而,檢查您的結果在多個不同的隨機種子下是否穩定是值得的。常用的整數隨機種子為 0 和42。整數值必須在 [0, 2**32 - 1] 的範圍內。

一個 numpy.random.RandomState 實例

使用提供的隨機狀態,只會影響使用相同隨機狀態實例的其他使用者。多次呼叫此函數將重複使用相同的實例,並產生不同的結果。

內部使用 utils.check_random_state 來驗證輸入 random_state 並返回一個 RandomState 實例。

有關如何控制 scikit-learn 物件的隨機性並避免常見陷阱的更多詳細資訊,您可以參考控制隨機性

scoring#

指定要最大化的分數函數(通常通過交叉驗證),或者在某些情況下,指定要報告的多個分數函數。分數函數可以是 metrics.get_scorer 接受的字串,或是一個可呼叫的 scorer,不要與評估指標混淆,因為後者具有更多樣化的 API。scoring 也可以設定為 None,在這種情況下,會使用估算器的 score 方法。請參閱使用者指南中的評分參數:定義模型評估規則

當可以評估多個指標時,scoring 可以給定為唯一字串的列表、以名稱作為鍵值且以可呼叫對象作為值的字典,或是一個返回字典的可呼叫對象。請注意,這並 *不* 指定要最大化的分數函數,並且可能會使用其他參數(例如 refit)來達到此目的。

scoring 參數會使用 metrics.check_scoring 進行驗證和解讀。

verbose#

目前 Scikit-learn 中記錄處理並不非常一致,但是當它作為一個選項提供時,通常可以使用 verbose 參數來選擇不記錄(設定為 False)。任何 True 值都應啟用一些記錄,但是可能需要更大的整數(例如,大於 10)才能達到完整詳細程度。詳細記錄通常會列印到標準輸出。估算器在預設 verbose 設定下不應在標準輸出上產生任何輸出。

warm_start#

當在相同數據集上重複擬合估算器,但用於多個參數值時(例如,在網格搜索中找到最大化性能的值),可能會重複使用從先前參數值學習到的模型的部分內容,從而節省時間。當 warm_start 為 true 時,現有的擬合模型屬性用於在後續呼叫 fit 時初始化新模型。

請注意,這僅適用於某些模型和某些參數,甚至適用於某些參數值的順序。通常,warm_start 與控制估算器迭代次數的參數之間存在互動。

對於從 ensemble 導入的估算器,warm_start 將與 n_estimatorsmax_iter 互動。對於這些模型,透過 len(estimators_)n_iter_ 報告的迭代次數對應於自模型初始化以來學習到的估算器/迭代總數。因此,如果模型已使用 N 個估算器初始化,且呼叫 fitn_estimatorsmax_iter 設定為 M,則模型將訓練 M - N 個新的估算器。

其他模型通常使用基於梯度的求解器,它們具有不同的行為。它們都公開一個 max_iter 參數。報告的 n_iter_ 對應於上次呼叫 fit 期間執行的迭代次數,並且最多為 max_iter。因此,我們不考慮自初始化以來估算器的狀態。

partial_fit 也會保留呼叫之間的模型,但有所不同:使用 warm_start,參數會變更,且在呼叫 fit 時數據(或多或少)保持不變;使用 partial_fit,數據的小批量會變更,而模型參數會保持固定。

在某些情況下,您可能想要使用 warm_start 來擬合不同的但密切相關的數據。例如,可以先擬合數據的子集,然後在完整數據集上微調參數搜索。對於分類,在對 fit 進行的一系列 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_

資料和樣本屬性#

請參閱概念 樣本屬性

groups#

在交叉驗證程序中用來識別相關樣本。每個值都是一個識別符,在支持的CV 分割器中,來自某些 groups 值的樣本可能不會同時出現在訓練集及其對應的測試集中。請參閱分組資料的交叉驗證迭代器

sample_weight#

每個樣本的相對權重。直觀地說,如果所有權重都是整數,則加權模型或分數應等同於重複樣本權重中指定的次數時計算出的結果。權重可以指定為浮點數,因此樣本權重通常等同於一個常數正縮放因子。

FIXME:這種解釋在實務中總是如此嗎?我們沒有共同的測試。

有些估算器,如決策樹,支援負權重。FIXME:此功能或其缺失可能未在許多估算器中進行測試或記錄。

當模型的其他參數考慮到區域中的樣本數量時,情況並非完全如此,例如cluster.DBSCAN 中的min_samples。在這種情況下,樣本的計數變為其權重的總和。

在分類中,樣本權重也可以指定為class_weight估算器參數的類別函數。

X#

表示在訓練和預測時觀察到的資料,用作學習中的自變數。符號為大寫,表示它通常是一個矩陣(請參閱矩形)。當是矩陣時,每個樣本可以用一個特徵向量,或與每個訓練樣本的預先計算的(不)相似性向量表示。X 也可能不是矩陣,並且可能需要一個特徵提取器或一個成對度量,才能在學習模型之前將其轉換為矩陣。

Xt#

“轉換後的 X” 的簡稱。

y#
Y#

表示在訓練時可能觀察到的資料,作為學習中的因變數,但在預測時不可用,並且通常是預測的目標。符號可能是大寫,表示它是一個矩陣,例如,表示多輸出目標;但通常我們使用 y,有時即使假設有多個輸出也是如此。