
- Scikit Learn 教程
- Scikit Learn - 首頁
- Scikit Learn - 簡介
- Scikit Learn - 建模過程
- Scikit Learn - 資料表示
- Scikit Learn - 估計器 API
- Scikit Learn - 約定
- Scikit Learn - 線性建模
- Scikit Learn - 擴充套件線性建模
- 隨機梯度下降
- Scikit Learn - 支援向量機
- Scikit Learn - 異常檢測
- Scikit Learn - K 近鄰演算法
- Scikit Learn - KNN 學習
- 樸素貝葉斯分類
- Scikit Learn - 決策樹
- 隨機決策樹
- Scikit Learn - 整合方法
- Scikit Learn - 聚類方法
- 聚類效能評估
- 使用 PCA 進行降維
- Scikit Learn 有用資源
- Scikit Learn - 快速指南
- Scikit Learn - 有用資源
- Scikit Learn - 討論
Scikit Learn - 約定
Scikit-learn 的物件共享一個統一的基本 API,它由以下三個互補的介面組成:
估計器介面 - 用於構建和擬合模型。
預測器介面 - 用於進行預測。
轉換器介面 - 用於轉換資料。
這些 API 採用了簡單的約定,設計選擇以避免框架程式碼的激增為指導。
約定的目的
約定的目的是確保 API 遵循以下廣泛原則:
一致性 - 所有物件,無論是基本物件還是複合物件,都必須共享一個一致的介面,該介面進一步由一組有限的方法組成。
檢查 - 建構函式引數和學習演算法確定的引數值應儲存並公開為公共屬性。
避免類激增 - 資料集應表示為 NumPy 陣列或 Scipy 稀疏矩陣,而超引數名稱和值應表示為標準 Python 字串,以避免框架程式碼的激增。
組合 - 無論演算法是否可以表示為對資料的轉換序列或組合,或者自然地被視為引數化為其他演算法的元演算法,都應從現有的構建塊中實現和組合。
合理的預設值 - 在 scikit-learn 中,無論何時操作需要使用者定義的引數,都會定義一個適當的預設值。此預設值應使操作以合理的方式執行,例如,為手頭的任務提供基線解決方案。
各種約定
下面解釋了 Sklearn 中可用的約定:
型別轉換
它指出輸入應轉換為float64。在以下示例中,sklearn.random_projection 模組用於降低資料的維度,將對此進行說明:
示例
import numpy as np from sklearn import random_projection rannge = np.random.RandomState(0) X = range.rand(10,2000) X = np.array(X, dtype = 'float32') X.dtype Transformer_data = random_projection.GaussianRandomProjection() X_new = transformer.fit_transform(X) X_new.dtype
輸出
dtype('float32') dtype('float64')
在上面的示例中,我們可以看到 X 是float32,它被fit_transform(X)轉換為float64。
重新擬合和更新引數
估計器的超引數可以在透過set_params()方法構造後進行更新和重新擬合。讓我們看下面的例子來理解它:
示例
import numpy as np from sklearn.datasets import load_iris from sklearn.svm import SVC X, y = load_iris(return_X_y = True) clf = SVC() clf.set_params(kernel = 'linear').fit(X, y) clf.predict(X[:5])
輸出
array([0, 0, 0, 0, 0])
一旦估計器被構造,上面的程式碼將透過SVC.set_params()將預設核心rbf更改為線性。
現在,以下程式碼將把核心改回 rbf 以重新擬合估計器並進行第二次預測。
示例
clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y) clf.predict(X[:5])
輸出
array([0, 0, 0, 0, 0])
完整程式碼
以下是完整的可執行程式:
import numpy as np from sklearn.datasets import load_iris from sklearn.svm import SVC X, y = load_iris(return_X_y = True) clf = SVC() clf.set_params(kernel = 'linear').fit(X, y) clf.predict(X[:5]) clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y) clf.predict(X[:5])
多類和多標籤擬合
在多類擬合的情況下,學習和預測任務都取決於擬合的目標資料的格式。使用的模組是sklearn.multiclass。檢視下面的示例,其中多類分類器擬合在一維陣列上。
示例
from sklearn.svm import SVC from sklearn.multiclass import OneVsRestClassifier from sklearn.preprocessing import LabelBinarizer X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]] y = [0, 0, 1, 1, 2] classif = OneVsRestClassifier(estimator = SVC(gamma = 'scale',random_state = 0)) classif.fit(X, y).predict(X)
輸出
array([0, 0, 1, 1, 2])
在上面的示例中,分類器擬合在多類標籤的一維陣列上,因此predict()方法提供了相應的多類預測。但另一方面,也可以擬合在二維的二元標籤指示器陣列上,如下所示:
示例
from sklearn.svm import SVC from sklearn.multiclass import OneVsRestClassifier from sklearn.preprocessing import LabelBinarizer X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]] y = LabelBinarizer().fit_transform(y) classif.fit(X, y).predict(X)
輸出
array( [ [0, 0, 0], [0, 0, 0], [0, 1, 0], [0, 1, 0], [0, 0, 0] ] )
類似地,在多標籤擬合的情況下,一個例項可以被分配多個標籤,如下所示:
示例
from sklearn.preprocessing import MultiLabelBinarizer y = [[0, 1], [0, 2], [1, 3], [0, 2, 3], [2, 4]] y = MultiLabelBinarizer().fit_transform(y) classif.fit(X, y).predict(X)
輸出
array( [ [1, 0, 1, 0, 0], [1, 0, 1, 0, 0], [1, 0, 1, 1, 0], [1, 0, 1, 1, 0], [1, 0, 1, 0, 0] ] )
在上面的示例中,sklearn.MultiLabelBinarizer 用於將多標籤的二維陣列二值化以進行擬合。這就是為什麼predict()函式輸出一個二維陣列,每個例項都有多個標籤。