註記
前往結尾以下載完整的範例程式碼。 或透過 JupyterLite 或 Binder 在您的瀏覽器中執行此範例
scikit-learn 1.0 的發行重點#
我們非常高興宣布 scikit-learn 1.0 的發布!該函式庫已穩定一段時間,發布 1.0 版本是承認這一點並向使用者發出信號。除了通常的兩個版本棄用週期外,此版本不包含任何重大變更。對於未來,我們會盡力保持此模式。
此版本包含一些新的主要功能以及許多改進和錯誤修正。我們在下面詳細介紹此版本的一些主要功能。如需所有變更的完整列表,請參閱發行說明。
若要安裝最新版本 (使用 pip)
pip install --upgrade scikit-learn
或使用 conda
conda install -c conda-forge scikit-learn
關鍵字和位置引數#
scikit-learn API 公開許多具有許多輸入參數的函式和方法。例如,在此版本之前,可以將HistGradientBoostingRegressor
實例化為
HistGradientBoostingRegressor("squared_error", 0.1, 100, 31, None,
20, 0.0, 255, None, None, False, "auto", "loss", 0.1, 10, 1e-7,
0, None)
了解上述程式碼需要讀者查看 API 文件,並檢查每個參數的位置及其意義。為了提高基於 scikit-learn 編寫的程式碼的可讀性,現在使用者必須提供大多數參數的名稱,作為關鍵字引數,而不是位置引數。例如,上述程式碼將會是
HistGradientBoostingRegressor(
loss="squared_error",
learning_rate=0.1,
max_iter=100,
max_leaf_nodes=31,
max_depth=None,
min_samples_leaf=20,
l2_regularization=0.0,
max_bins=255,
categorical_features=None,
monotonic_cst=None,
warm_start=False,
early_stopping="auto",
scoring="loss",
validation_fraction=0.1,
n_iter_no_change=10,
tol=1e-7,
verbose=0,
random_state=None,
)
這更具可讀性。位置引數自 0.23 版本起已棄用,現在會引發 TypeError
。在某些情況下仍允許有限數量的位置引數,例如在PCA
中,仍允許 PCA(10)
,但不允許 PCA(10, False)
。
雲形變換器#
在資料集的特徵集中新增非線性項的一種方法是使用新的 SplineTransformer
為連續/數值特徵產生雲形基底函式。雲形是分段多項式,由其多項式次數和結的位置參數化。SplineTransformer
實作 B 雲形基底。

以下程式碼顯示雲形的作用,如需更多資訊,請參閱使用者指南。
import numpy as np
from sklearn.preprocessing import SplineTransformer
X = np.arange(5).reshape(5, 1)
spline = SplineTransformer(degree=2, n_knots=3)
spline.fit_transform(X)
array([[0.5 , 0.5 , 0. , 0. ],
[0.125, 0.75 , 0.125, 0. ],
[0. , 0.5 , 0.5 , 0. ],
[0. , 0.125, 0.75 , 0.125],
[0. , 0. , 0.5 , 0.5 ]])
分位數迴歸器#
分位數迴歸估計以 \(X\) 為條件的 \(y\) 中位數或其他分位數,而普通最小平方法 (OLS) 估計條件均值。
作為線性模型,新的 QuantileRegressor
提供 \(q\) 分位數的線性預測 \(\hat{y}(w, X) = Xw\),\(q \in (0, 1)\)。然後透過以下最小化問題找到權重或係數 \(w\)
這由釘球損失(也稱為線性損失)組成,另請參閱 mean_pinball_loss
,
以及由參數 alpha
控制的 L1 懲罰,類似於 linear_model.Lasso
。
請查看以下範例,以了解其運作方式,並參閱使用者指南以取得更多詳細資訊。

特徵名稱支援#
當估計器在 fit 期間傳遞 pandas 的資料框架時,估計器會設定一個包含特徵名稱的 feature_names_in_
屬性。請注意,只有當資料框架中的欄名稱都是字串時,才會啟用特徵名稱支援。feature_names_in_
用於檢查在非 fit 中傳遞的資料框架(例如 predict)的欄名稱是否與 fit 中的特徵一致
from sklearn.preprocessing import StandardScaler
import pandas as pd
X = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=["a", "b", "c"])
scalar = StandardScaler().fit(X)
scalar.feature_names_in_
array(['a', 'b', 'c'], dtype=object)
get_feature_names_out 的支援適用於已具有 get_feature_names
的變換器,以及輸入與輸出之間存在一對一對應關係的變換器,例如 StandardScaler
。在未來的版本中,將會新增對所有其他變換器的 get_feature_names_out 支援。此外,compose.ColumnTransformer.get_feature_names_out
可用於組合其變換器的特徵名稱
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
import pandas as pd
X = pd.DataFrame({"pet": ["dog", "cat", "fish"], "age": [3, 7, 1]})
preprocessor = ColumnTransformer(
[
("numerical", StandardScaler(), ["age"]),
("categorical", OneHotEncoder(), ["pet"]),
],
verbose_feature_names_out=False,
).fit(X)
preprocessor.get_feature_names_out()
array(['age', 'pet_cat', 'pet_dog', 'pet_fish'], dtype=object)
當此 preprocessor
與管道一起使用時,分類器使用的特徵名稱是透過切片並呼叫 get_feature_names_out 取得的
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
y = [1, 0, 1]
pipe = make_pipeline(preprocessor, LogisticRegression())
pipe.fit(X, y)
pipe[:-1].get_feature_names_out()
array(['age', 'pet_cat', 'pet_dog', 'pet_fish'], dtype=object)
更具彈性的繪圖 API#
metrics.ConfusionMatrixDisplay
、metrics.PrecisionRecallDisplay
、metrics.DetCurveDisplay
和 inspection.PartialDependenceDisplay
現在公開了兩個類別方法:from_estimator
和 from_predictions
,讓使用者可以根據預測或估計器建立圖表。這表示對應的 plot_*
函式已被棄用。請查看範例一 和 範例二,以瞭解如何使用新的繪圖功能。
線上單類別 SVM#
新的類別 SGDOneClassSVM
使用隨機梯度下降實作單類別 SVM 的線上線性版本。結合核心近似技術,SGDOneClassSVM
可用於近似核心化單類別 SVM 的解,該核心化單類別 SVM 在 OneClassSVM
中實作,其擬合時間複雜度與樣本數成線性關係。請注意,核心化單類別 SVM 的複雜度在樣本數中至少是二次方的。因此,SGDOneClassSVM
非常適合具有大量訓練樣本(> 10,000)的資料集,對於這些資料集,SGD 變體可以快幾個數量級。請查看此範例,以瞭解其使用方式,以及使用者指南 以取得更多詳細資訊。

基於直方圖的梯度提升模型現在穩定#
HistGradientBoostingRegressor
和 HistGradientBoostingClassifier
不再是實驗性的,可以簡單地匯入並使用,如下所示
from sklearn.ensemble import HistGradientBoostingClassifier
新的文件改進#
此版本包含許多文件改進。在 2100 多個合併的提取請求中,約有 800 個是我們文件的改進。
腳本總執行時間: (0 分鐘 0.016 秒)
相關範例