版本 0.22#
有關此版本主要亮點的簡短描述,請參閱scikit-learn 0.22 的發行重點。
變更日誌圖例
主要功能 之前無法做到的重大功能。
功能 之前無法做到的功能。
效率 現有功能現在可能不需要那麼多的計算或記憶體。
增強 各種小的改進。
修正 之前無法按文件記錄或按合理預期運作的功能,現在應該可以運作。
API 變更 您將需要變更您的程式碼,才能在未來達到相同的效果;或者某個功能將在未來被移除。
版本 0.22.2.post1#
2020 年 3 月 3 日
0.22.2.post1 版本包含針對原始碼發行版的封裝修正,但套件的內容與 0.22.2 版本(不含 .post1 字尾)的 wheel 內容相同。兩者都包含以下變更。
變更日誌#
sklearn.impute
#
效率 透過分塊成對距離計算,減少
impute.KNNImputer
的漸近記憶體使用量。#16397 by Joel Nothman。
sklearn.metrics
#
修正 修正了
metrics.plot_roc_curve
中的錯誤,其中估計器的名稱被傳遞到metrics.RocCurveDisplay
,而不是參數name
。當後續呼叫metrics.RocCurveDisplay.plot
時,會產生不同的圖表。#16500 by Guillaume Lemaitre。修正 修正了
metrics.plot_precision_recall_curve
中的錯誤,其中估計器的名稱被傳遞到metrics.PrecisionRecallDisplay
,而不是參數name
。當後續呼叫metrics.PrecisionRecallDisplay.plot
時,會產生不同的圖表。#16505 by Guillaume Lemaitre。
sklearn.neighbors
#
修正 修正了一個錯誤,該錯誤將陣列清單轉換為 2 維物件陣列,而不是包含 NumPy 陣列的 1 維陣列。此錯誤影響了
neighbors.NearestNeighbors.radius_neighbors
。#16076 by Guillaume Lemaitre and Alex Shacked。
版本 0.22.1#
2020 年 1 月 2 日
這是一個錯誤修正版本,主要解決 0.22.0 版本中的一些封裝問題。它還包含一些小的文件改進和一些錯誤修正。
變更日誌#
sklearn.cluster
#
修正 使用
algorithm="elkan"
的cluster.KMeans
現在使用與預設algorithm="full"
相同的停止條件。#15930 by @inder128。
sklearn.inspection
#
修正 當為
n_jobs=1
或n_jobs>1
提供random_state
時,inspection.permutation_importance
將返回相同的importances
,無論是使用共享記憶體後端(執行緒安全)還是隔離記憶體、基於流程的後端。此外,避免將資料轉換為物件 dtype,並避免在具有n_jobs>1
的大型資料框架上發生唯讀錯誤,如 #15810 中所述。這是 #15898 的後續行動,由 Shivam Gargsya 提出。#15933 by Guillaume Lemaitre and Olivier Grisel。修正
inspection.plot_partial_dependence
和inspection.PartialDependenceDisplay.plot
現在會一致地檢查傳入的軸數。#15760 by Thomas Fan。
sklearn.metrics
#
修正 當
normalize
無效時,metrics.plot_confusion_matrix
現在會引發錯誤。先前,它會在沒有標準化的情況下正常執行。#15888 by Hanmin Qin。修正
metrics.plot_confusion_matrix
現在會正確地為標籤顏色著色,以最大化與其背景的對比度。#15936 by Thomas Fan and @DizietAsahi。修正
metrics.classification_report
不再忽略zero_division
關鍵字引數的值。#15879 by Bibhash Chandra Mitra。修正 修正了
metrics.plot_confusion_matrix
中的錯誤,以正確地將values_format
參數傳遞給metrics.ConfusionMatrixDisplay
plot() 呼叫。#15937 by Stephen Blystone。
sklearn.model_selection
#
修正
model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
接受在fit_params
中提供的純量值。0.22 版的變更破壞了向後相容性。#15863 由 Adrin Jalali 和 Guillaume Lemaitre 貢獻。
sklearn.naive_bayes
#
修正 移除
naive_bayes.BaseNB
中方法_check_X
的abstractmethod
裝飾器,此裝飾器可能會破壞繼承此已棄用的公開基礎類別的下游專案。#15996 由 Brigitta Sipőcz 貢獻。
sklearn.preprocessing
#
修正
preprocessing.QuantileTransformer
現在保證quantiles_
屬性以非遞減方式完全排序。#15751 由 Tirth Patel 貢獻。
sklearn.semi_supervised
#
修正
semi_supervised.LabelPropagation
和semi_supervised.LabelSpreading
現在允許可呼叫的 kernel 函數返回稀疏權重矩陣。#15868 由 Niklas Smedemark-Margulies 貢獻。
sklearn.utils
#
修正
utils.check_array
現在正確地將具有布林值欄位的 pandas DataFrame 轉換為浮點數。#15797 由 Thomas Fan 貢獻。修正
utils.validation.check_is_fitted
接受一個明確的attributes
引數,以檢查特定屬性作為已擬合估算器的明確標記。當未提供明確的attributes
時,只有以底線結尾且不以雙底線開頭的屬性才被用作「已擬合」標記。all_or_any
引數也不再被棄用。此變更旨在恢復此工具在 0.21 版中的某些向後相容性。#15947 由 Thomas Fan 貢獻。
版本 0.22.0#
2019 年 12 月 3 日
網站更新#
我們的網站 已改版,並賦予全新的外觀。#14849 由 Thomas Fan 貢獻。
公開 API 的明確定義#
Scikit-learn 具有公開 API 和私有 API。
我們盡力不破壞公開 API,並且只引入不需要任何使用者操作的向後相容性變更。但是,在不可能的情況下,對公開 API 的任何變更都必須經過兩個次要版本的棄用週期。私有 API 沒有公開文件,並且不受任何棄用週期約束,因此使用者不應依賴其穩定性。
如果函數或物件在 API 參考 中有文件記錄,並且可以使用不帶前導底線的導入路徑導入,則該函數或物件是公開的。例如,sklearn.pipeline.make_pipeline
是公開的,而 sklearn.pipeline._name_estimators
是私有的。sklearn.ensemble._gb.BaseEnsemble
也是私有的,因為整個 _gb
模組是私有的。
在 0.22 版之前,某些工具實際上是公開的(沒有前導底線),但它們本來應該是私有的。在 0.22 版中,這些工具已正確地設為私有的,並且公開 API 空間已清理。此外,從大多數子模組導入現在已被棄用:例如,您應該使用 from sklearn.cluster import Birch
而不是 from sklearn.cluster.birch import Birch
(實際上,birch.py
已移至 _birch.py
)。
注意
公開 API 中的所有工具都應記錄在 API 參考 中。如果您找到一個不在 API 參考中的公開工具(沒有前導底線),則表示該工具應該是私有的或是有文件記錄。請開啟一個 issue 告訴我們!
這項工作已在 issue 9250 和 issue 12927 中追蹤。
棄用:從現在開始使用 FutureWarning
#
在棄用某項功能時,以前版本的 scikit-learn 會引發 DeprecationWarning
。由於 Python 預設不會顯示 DeprecationWarnings
,因此 scikit-learn 需要採用自訂警告篩選器來始終顯示警告。該篩選器有時會干擾使用者的自訂警告篩選器。
從 0.22 版開始,scikit-learn 將為棄用顯示 FutureWarnings
,如 Python 文件建議。FutureWarnings
預設由 Python 始終顯示,因此已移除自訂篩選器,且 scikit-learn 不再妨礙使用者篩選器。#15080 由 Nicolas Hug 貢獻。
變更的模型#
以下估算器和函數在使用相同的資料和參數進行擬合時,可能會產生與先前版本不同的模型。這通常是因建模邏輯(錯誤修正或增強功能)或隨機抽樣程序中的變更所致。
cluster.KMeans
在n_jobs=1
時。修正decomposition.SparseCoder
、decomposition.DictionaryLearning
和decomposition.MiniBatchDictionaryLearning
修正使用
decomposition.SparseCoder
且algorithm='lasso_lars'
修正decomposition.SparsePCA
中,由於已棄用,normalize_components
不再有效果。ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
修正 , 功能 , 增強 。當
X
有不包含缺失值的功能時,impute.IterativeImputer
的行為。 功能當
X
為稀疏矩陣時,linear_model.Ridge
的行為。 修正model_selection.StratifiedKFold
以及任何將cv=int
與分類器一起使用的情況。 修正當使用 scipy >= 1.3 時,
cross_decomposition.CCA
的行為。 修正
詳細資訊列在下方的變更日誌中。
(雖然我們嘗試透過提供這些資訊來更好地告知使用者,但我們無法保證此清單完整。)
變更日誌#
sklearn.base
#
API 變更 從 0.24 版本開始,對於在估計器建構函式中但未作為執行個體上的屬性儲存的參數,
base.BaseEstimator.get_params
將會引發 AttributeError 而不是傳回 None。 #14464 由 Joel Nothman 完成。
sklearn.calibration
#
修正 修正了當給定類型為
list
的sample_weight
參數時(在包裝的估計器不支援sample_weights
的情況下),會導致calibration.CalibratedClassifierCV
失敗的錯誤。 #13575 由 William de Vazelhes 完成。
sklearn.cluster
#
功能
cluster.SpectralClustering
現在接受預先計算的稀疏鄰居圖作為輸入。 #10482 由 Tom Dupre la Tour 和 Kumar Ashutosh 完成。增強
cluster.SpectralClustering
現在接受n_components
參數。此參數擴展了SpectralClustering
類別的功能,使其與cluster.spectral_clustering
匹配。 #13726 由 Shuzhe Xiao 完成。修正 修正了由於隨機狀態的處理方式,導致
cluster.KMeans
在n_jobs=1
和n_jobs>1
之間產生不一致結果的錯誤。 #9288 由 Bryan Yang 完成。修正 修正了由於整數索引溢位,導致
cluster.KMeans
中的elkan
演算法在大型陣列上產生分段錯誤的錯誤。 #15057 由 Vladimir Korolev 完成。修正
MeanShift
現在接受 max_iter,其預設值為 300,而不是始終使用預設值 300。它現在還公開了n_iter_
,指示每個種子執行的最大迭代次數。 #15120 由 Adrin Jalali 完成。修正 如果
affinity='cosine'
且X
具有全零的樣本,cluster.AgglomerativeClustering
和cluster.FeatureAgglomeration
現在會引發錯誤。 #7943 由 @mthorrell 完成。
sklearn.compose
#
功能 新增
compose.make_column_selector
,與compose.ColumnTransformer
一起使用,以根據名稱和 dtype 選擇 DataFrame 列。 #12303 由 Thomas Fan 完成。修正 修正了當使用布林列表且 NumPy 版本低於 1.12 時,
compose.ColumnTransformer
無法選擇正確列的錯誤。 #14510 由 Guillaume Lemaitre 完成。修正 修正了
compose.TransformedTargetRegressor
未將**fit_params
傳遞給底層回歸器的錯誤。 #14890 由 Miguel Cabrera 完成。修正
compose.ColumnTransformer
現在要求fit
和transform
之間的特徵數量一致。現在會引發FutureWarning
,並且這將在 0.24 版本中引發錯誤。如果特徵數量不一致且使用了負索引,則會引發錯誤。 #14544 由 Adrin Jalali 完成。
sklearn.cross_decomposition
#
新功能
cross_decomposition.PLSCanonical
和cross_decomposition.PLSRegression
新增了inverse_transform
函式,用於將資料轉換回原始空間。 #15304 由 Jaime Ferrando Huertas 提供。增強
decomposition.KernelPCA
現在會正確檢查求解器找到的特徵值是否存在數值或條件問題。這確保了跨求解器(eigen_solver
的不同選擇)結果的一致性,包括近似求解器,例如'randomized'
和'lobpcg'
(參見 #12068)。 #12145 由 Sylvain Marié 提供修復 修復了一個錯誤,當使用目標矩陣
Y
進行擬合時,如果第一欄是常數,cross_decomposition.PLSCanonical
和cross_decomposition.PLSRegression
會引發錯誤。 #13609 由 Camila Williamson 提供。修復
cross_decomposition.CCA
現在使用 scipy 1.3 和之前的 scipy 版本會產生相同的結果。 #15661 由 Thomas Fan 提供。
sklearn.datasets
#
新功能
datasets.fetch_openml
現在透過設定as_frame=True
來支援使用 pandas 的異質資料。 #13902 由 Thomas Fan 提供。新功能
datasets.fetch_openml
現在將target_names
包含在返回的 Bunch 中。 #15160 由 Thomas Fan 提供。增強 參數
return_X_y
已新增到datasets.fetch_20newsgroups
和datasets.fetch_olivetti_faces
。 #14259 由 Sourav Singh 提供。增強
datasets.make_classification
現在接受類陣列的weights
參數,即 list 或 numpy.array,而不是僅限於 list。 #14764 由 Cat Chenal 提供。- 增強 參數
normalize
已新增到 datasets.fetch_20newsgroups_vectorized
。 #14740 由 Stéphan Tulkens 提供
- 增強 參數
修復 修復了
datasets.fetch_openml
中的一個錯誤,該錯誤導致無法載入包含被忽略特徵的 OpenML 資料集。 #14623 由 Sarra Habchi 提供。
sklearn.decomposition
#
效率
solver="mu"
的decomposition.NMF
在擬合稀疏輸入矩陣時,現在使用批次處理來避免短暫分配一個大小為 (#非零元素, n_components) 的陣列。 #15257 由 Mart Willocx 提供。增強
decomposition.dict_learning
和decomposition.dict_learning_online
現在接受method_max_iter
並將其傳遞給decomposition.sparse_encode
。 #12650 由 Adrin Jalali 提供。增強
decomposition.SparseCoder
,decomposition.DictionaryLearning
, 和decomposition.MiniBatchDictionaryLearning
現在接受transform_max_iter
參數,並將其傳遞給decomposition.dict_learning
或decomposition.sparse_encode
。 #12650 由 Adrin Jalali 提供。增強
decomposition.IncrementalPCA
現在接受稀疏矩陣作為輸入,並將其分批轉換為密集矩陣,從而避免了一次儲存整個密集矩陣的需求。 #13960 由 Scott Gigante 提供。修復 當
algorithm='lasso_lars'
時,decomposition.sparse_encode
現在會將max_iter
傳遞給底層的linear_model.LassoLars
。 #12650 由 Adrin Jalali 提供。
sklearn.dummy
#
修復
dummy.DummyClassifier
現在會處理多輸出情況下對所提供常數的存在性檢查。 #14908 由 Martina G. Vilas 提供。API 變更
dummy.DummyClassifier
中strategy
參數的預設值將從 0.22 版本的'stratified'
變更為 0.24 版本的'prior'
。當使用預設值時,會發出一個 FutureWarning 警告。#15382 由 Thomas Fan 貢獻。API 變更
dummy.DummyClassifier
和dummy.DummyRegressor
中的outputs_2d_
屬性已被棄用。它等同於n_outputs > 1
。#14933 由 Nicolas Hug 貢獻
sklearn.ensemble
#
主要功能 新增了
ensemble.StackingClassifier
和ensemble.StackingRegressor
,以使用最終分類器或回歸器來堆疊預測器。#11047 由 Guillaume Lemaitre 和 Caio Oliveira 貢獻,以及 #15138 由 Jon Cusick 貢獻。主要功能 對
ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
進行了許多改進。功能 估計器現在原生支援具有缺失值的密集資料,可用於訓練和預測。它們也支援無限值。#13911 和 #14406 由 Nicolas Hug、Adrin Jalali 和 Olivier Grisel 貢獻。
功能 估計器現在有一個額外的
warm_start
參數,可以啟用熱啟動。#14012 由 Johann Faouzi 貢獻。功能
inspection.partial_dependence
和inspection.plot_partial_dependence
現在都支援估計器的快速「遞迴」方法。#13769 由 Nicolas Hug 貢獻。增強功能 對於
ensemble.HistGradientBoostingClassifier
,現在在類別分層的子樣本上監控訓練損失或分數,以保留原始訓練集的類別平衡。#14194 由 Johann Faouzi 貢獻。增強功能
ensemble.HistGradientBoostingRegressor
現在支援「最小絕對偏差」損失。#13896 由 Nicolas Hug 貢獻。修正 估計器現在會分別對訓練和驗證資料進行分箱,以避免任何資料洩漏。#13933 由 Nicolas Hug 貢獻。
修正 修正了當目標為字串時,提前停止會中斷的錯誤。#14710 由 Guillaume Lemaitre 貢獻。
修正 如果為二元分類問題指定
categorical_crossentropy
損失,ensemble.HistGradientBoostingClassifier
現在會引發錯誤。#14869 由 Adrin Jalali 貢獻。
請注意,0.21 版本的 pickle 在 0.22 版本中將無法使用。
增強功能 新增
max_samples
參數允許將 bootstrap 樣本的大小限制為小於資料集的大小。已新增至ensemble.RandomForestClassifier
、ensemble.RandomForestRegressor
、ensemble.ExtraTreesClassifier
和ensemble.ExtraTreesRegressor
。#14682 由 Matt Hancock 貢獻,以及 #5963 由 Pablo Duboue 貢獻。修正 當
voting='hard'
時,ensemble.VotingClassifier.predict_proba
將不再存在。#14287 由 Thomas Fan 貢獻。修正
ensemble.VotingClassifier
和ensemble.VotingRegressor
中的named_estimators_
屬性現在正確地對應到捨棄的估計器。先前,當其中一個估計器被捨棄時,named_estimators_
對應是不正確的。#15375 由 Thomas Fan 貢獻。修正 預設情況下,對
ensemble.VotingClassifier
和ensemble.VotingRegressor
執行utils.estimator_checks.check_estimator
。這解決了在predict
期間關於形狀一致性的問題,當底層估計器未輸出一致的陣列維度時,該問題會失敗。請注意,將來應通過重構通用測試來替換它。#14305 由 Guillaume Lemaitre 貢獻。修正
ensemble.AdaBoostClassifier
依照文獻中的方式,基於決策函數計算機率。因此,predict
和predict_proba
會給出一致的結果。 #14114 由 Guillaume Lemaitre 貢獻。修正 Stacking 和 Voting 估計器現在確保它們的底層估計器全部是分類器或全部是回歸器。
ensemble.StackingClassifier
、ensemble.StackingRegressor
、和ensemble.VotingClassifier
以及ensemble.VotingRegressor
現在會引發一致的錯誤訊息。#15084 由 Guillaume Lemaitre 貢獻。修正
ensemble.AdaBoostRegressor
中損失應該僅以非空權重樣本的最大值進行標準化。#14294 由 Guillaume Lemaitre 貢獻。API 變更
presort
現在在ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
中已被棄用,且該參數無效。建議使用者改用ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
。#14907 由 Adrin Jalali 貢獻。
sklearn.feature_extraction
#
增強 如果參數選擇意味著另一個參數在呼叫
fit()
方法時將不會被使用,現在會對feature_extraction.text.HashingVectorizer
、feature_extraction.text.CountVectorizer
和feature_extraction.text.TfidfVectorizer
發出警告。#14602 由 Gaurav Chawla 貢獻。修正 由
feature_extraction.text.VectorizerMixin
的build_preprocessor
和build_analyzer
建立的函數現在可以被 pickle。#14430 由 Dillon Niederhut 貢獻。修正
feature_extraction.text.strip_accents_unicode
現在可以正確移除 NFKD 正規化形式的字串中的重音符號。#15100 由 Daniel Grady 貢獻。修正 修復了一個錯誤,該錯誤導致
feature_extraction.DictVectorizer
在對大型輸入資料產生scipy.sparse
矩陣時,在transform
操作期間引發OverflowError
。#15463 由 Norvan Sahiner 貢獻。API 變更 棄用了
feature_extraction.text.TfidfVectorizer.transform
中未使用的copy
參數,將在 v0.24 中移除。#14520 由 Guillem G. Subies 貢獻。
sklearn.feature_selection
#
增強 更新了以下的
sklearn.feature_selection
估計器,允許在transform
和fit
中使用 NaN/Inf 值:feature_selection.RFE
、feature_selection.RFECV
、feature_selection.SelectFromModel
和feature_selection.VarianceThreshold
。請注意,如果特徵選擇器的底層估計器不允許 NaN/Inf,則仍然會發生錯誤,但特徵選擇器本身不再不必要地強制執行此限制。#11635 由 Alec Peters 貢獻。修正 修復了一個錯誤,該錯誤導致
threshold=0
的feature_selection.VarianceThreshold
因為數值不穩定而未能移除常數特徵,因此在此情況下改為使用範圍而不是變異數。#13704 由 Roddy MacSween 貢獻。
sklearn.gaussian_process
#
特性 結構化資料上的高斯過程模型:
gaussian_process.GaussianProcessRegressor
和gaussian_process.GaussianProcessClassifier
現在可以接受通用物件 (例如字串、樹狀結構、圖表等) 的清單作為其訓練/預測方法的X
參數。應該提供使用者定義的核函數來計算通用物件之間的核矩陣,並且應該繼承自gaussian_process.kernels.GenericKernelMixin
以通知 GPR/GPC 模型它處理非向量樣本。#15557 由 Yu-Hang Tang 貢獻。效率
gaussian_process.GaussianProcessClassifier.log_marginal_likelihood
和gaussian_process.GaussianProcessRegressor.log_marginal_likelihood
現在接受clone_kernel=True
的關鍵字引數。當設定為False
時,將修改核屬性,但可能會提高效能。#14378 由 Masashi Shibata 貢獻。API 變更 從 0.24 版開始,
gaussian_process.kernels.Kernel.get_params
將引發AttributeError
,而不是為估計器建構函式中存在,但未作為實例屬性儲存的參數傳回None
。#14464 由 Joel Nothman 貢獻。
sklearn.impute
#
主要功能 新增
impute.KNNImputer
,使用 k 最近鄰演算法來填補遺失值。#12852 由 Ashim Bhattarai 和 Thomas Fan 貢獻,以及 #15010 由 Guillaume Lemaitre 貢獻。功能
impute.IterativeImputer
有新的skip_compute
旗標,預設值為 False。當設為 True 時,將在擬合階段跳過對沒有遺失值的特徵的計算。#13773 由 Sergey Feldman 貢獻。效率
impute.MissingIndicator.fit_transform
避免重複計算遮罩矩陣。#14356 由 Harsh Soni 貢獻。修正
impute.IterativeImputer
現在在只有一個特徵時也能正常運作。由 Sergey Feldman 貢獻。修正 修正了
impute.IterativeImputer
中的一個錯誤,其中特徵的填補順序與imputation_order
設定為"ascending"
或"descending"
時所需的相反。#15393 由 Venkatachalam N 貢獻。
sklearn.inspection
#
主要功能 新增
inspection.permutation_importance
,用於測量任意訓練模型中每個特徵相對於給定評分函數的重要性。#13146 由 Thomas Fan 貢獻。功能
inspection.partial_dependence
和inspection.plot_partial_dependence
現在支援ensemble.HistGradientBoostingClassifier
和ensemble.HistGradientBoostingRegressor
的快速「遞迴」方法。#13769 由 Nicolas Hug 貢獻。增強
inspection.plot_partial_dependence
已擴展,現在支援 使用者指南 中描述的新視覺化 API。#14646 由 Thomas Fan 貢獻。增強
inspection.partial_dependence
接受 pandas DataFrame 和包含compose.ColumnTransformer
的pipeline.Pipeline
。此外,當傳遞 DataFrame 時,inspection.plot_partial_dependence
將預設使用欄位名稱。#14028 和 #15429 由 Guillaume Lemaitre 貢獻。
sklearn.kernel_approximation
#
修正 修正了當使用
kernel="precomputed"
時,kernel_approximation.Nystroem
引發KeyError
的錯誤。#14706 由 Venkatachalam N 貢獻。
sklearn.linear_model
#
效率 ‘liblinear’ 邏輯迴歸求解器現在更快且需要更少的記憶體。#14108、#14170、#14296 由 Alex Henrie 貢獻。
增強
linear_model.BayesianRidge
現在接受超參數alpha_init
和lambda_init
,可用於在 fit 中設定最大化程序的初始值。#13618 由 Yoshihiro Uchida 貢獻。修正 當
X
是稀疏的、solver="auto"
和fit_intercept=True
時,linear_model.Ridge
現在可以正確擬合截距,因為此配置中的預設求解器已變更為sparse_cg
,它可以使用稀疏資料擬合截距。#13995 由 Jérôme Dockès 貢獻。修正 使用
solver='sag'
的linear_model.Ridge
現在接受 F 順序和非連續陣列,並進行轉換而不是失敗。#14458 由 Guillaume Lemaitre 貢獻。修正
linear_model.LassoCV
在擬合最終模型時不再強制precompute=False
。#14591 由 Andreas Müller 貢獻。修正 當
cv=None
時,linear_model.RidgeCV
和linear_model.RidgeClassifierCV
現在可以正確評分。#14864 由 Venkatachalam N 貢獻。修正 修正了
linear_model.LogisticRegressionCV
中的一個錯誤,其中scores_
、n_iter_
和coefs_paths_
屬性在penalty='elastic-net'
時會有錯誤的順序。#15044 由 Nicolas Hug 貢獻。修正
linear_model.MultiTaskLassoCV
和linear_model.MultiTaskElasticNetCV
使用 dtype 為 int 的 X 和fit_intercept=True
。#15086 由 Alex Gramfort 貢獻。修正 liblinear 求解器現在支援
sample_weight
。#15038 由 Guillaume Lemaitre 貢獻。
sklearn.manifold
#
新功能
manifold.Isomap
、manifold.TSNE
和manifold.SpectralEmbedding
現在接受預先計算的稀疏鄰居圖作為輸入。#10482 由 Tom Dupre la Tour 和 Kumar Ashutosh 貢獻。新功能 在
manifold.TSNE
中公開了n_jobs
參數,用於多核心計算鄰居圖。當metric="precomputed"
或(metric="euclidean"
且method="exact"
)時,此參數沒有影響。#15082 由 Roman Yurchak 貢獻。效率提升 透過平行計算梯度,提升了當
method="barnes-hut"
時manifold.TSNE
的效率。#13213 由 Thomas Moreau 貢獻。錯誤修復 修復了當
n_samples < 5 * n_components
且eigen_solver='amg'
時,manifold.spectral_embedding
(以及因此的manifold.SpectralEmbedding
和cluster.SpectralClustering
)計算出錯誤特徵值的錯誤。#14647 由 Andreas Müller 貢獻。錯誤修復 修復了在
manifold.spectral_embedding
(用於manifold.SpectralEmbedding
和cluster.SpectralClustering
中)當eigen_solver="amg"
時,有時會導致 LinAlgError 的錯誤。#13393 由 Andrew Knyazev 貢獻,#13707 由 Scott White 貢獻。API 變更 棄用
manifold.Isomap
中未使用的屬性training_data_
。#10482 由 Tom Dupre la Tour 貢獻。
sklearn.metrics
#
主要新功能 已新增
metrics.plot_roc_curve
以繪製 ROC 曲線。此函數引入了 使用者指南 中描述的可視化 API。#14357 由 Thomas Fan 貢獻。新功能 為多個分類指標新增了新的參數
zero_division
:metrics.precision_score
、metrics.recall_score
、metrics.f1_score
、metrics.fbeta_score
、metrics.precision_recall_fscore_support
、metrics.classification_report
。這允許為未定義的指標設定回傳值。#14900 由 Marc Torrellas Socastro 貢獻。新功能 新增了
metrics.pairwise.nan_euclidean_distances
指標,該指標可計算存在遺失值時的歐幾里得距離。#12852 由 Ashim Bhattarai 和 Thomas Fan 貢獻。新功能 新增了新的排名指標
metrics.ndcg_score
和metrics.dcg_score
,以計算 Discounted Cumulative Gain (DCG) 和 Normalized Discounted Cumulative Gain (NDCG)。#9951 由 Jérôme Dockès 貢獻。新功能 已新增
metrics.plot_precision_recall_curve
以繪製精確度-召回率曲線。#14936 由 Thomas Fan 貢獻。新功能 已新增
metrics.plot_confusion_matrix
以繪製混淆矩陣。#15083 由 Thomas Fan 貢獻。新功能 為
metrics.roc_auc_score
新增了多類別支援,並具有相應的評分器'roc_auc_ovr'
、'roc_auc_ovo'
、'roc_auc_ovr_weighted'
和'roc_auc_ovo_weighted'
。#12789 和 #15274 由 Kathy Chen、Mohamed Maskani 和 Thomas Fan 貢獻。新功能 新增
metrics.mean_tweedie_deviance
以測量給定power
參數的 Tweedie 偏差。 也新增了平均泊松偏差metrics.mean_poisson_deviance
和平均伽瑪偏差metrics.mean_gamma_deviance
,它們分別是power=1
和power=2
時 Tweedie 偏差的特例。#13938 由 Christian Lorentzen 和 Roman Yurchak 貢獻。效率提升 提高了稀疏矩陣情況下
metrics.pairwise.manhattan_distances
的效能。#15049 由Paolo Toccaceli <ptocca>
貢獻。增強功能 更新了
metrics.fbeta_score
中的參數beta
,使其接受零和float('+inf')
值。#13231 由 Dong-hee Na 貢獻。增強 在
metrics.mean_squared_error
中新增了參數squared
,以回傳均方根誤差。 #13467 由 Urvang Patel 貢獻。增強 允許在沒有真正正例的情況下計算平均指標。 #14595 由 Andreas Müller 貢獻。
增強 多標籤指標現在支援列表的列表作為輸入。 #14865 Srivatsan Ramesh, Herilalaina Rakotoarison, Léonard Binet 貢獻。
增強
metrics.median_absolute_error
現在支援multioutput
參數。 #14732 由 Agamemnon Krasoulis 貢獻。增強 ‘roc_auc_ovr_weighted’ 和 ‘roc_auc_ovo_weighted’ 現在可以用作模型選擇工具的 scoring 參數。 #14417 由 Thomas Fan 貢獻。
增強
metrics.confusion_matrix
接受參數normalize
,允許按列、按行或整體正規化混淆矩陣。 #15625 由Guillaume Lemaitre <glemaitre>
貢獻。修復 當預先計算的距離矩陣包含非零對角線條目時,在
metrics.silhouette_score
中引發 ValueError。 #12258 由 Stephen Tierney 貢獻。API 變更 應使用
scoring="neg_brier_score"
而不是現在已棄用的scoring="brier_score_loss"
。 #14898 由 Stefan Matcovici 貢獻。
sklearn.model_selection
#
效率 提升了
model_selection.cross_validate
、model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
中的多指標評分效能。 #14593 由 Thomas Fan 貢獻。增強
model_selection.learning_curve
現在接受參數return_times
,可用於檢索計算時間,以便繪製模型的可擴展性(請參閱 learning_curve 範例)。 #13938 由 Hadrien Reboul 貢獻。增強
model_selection.RandomizedSearchCV
現在接受參數分佈的列表。 #14549 由 Andreas Müller 貢獻。修復 重新實作了
model_selection.StratifiedKFold
,以修復一個測試集可能比另一個測試集大n_classes
的問題。測試集現在應該大小幾乎相等。 #14704 由 Joel Nothman 貢獻。修復
model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
的cv_results_
屬性現在僅包含未擬合的估計器。由於不儲存估計器的狀態,這可能會節省大量記憶體。 ##15096 由 Andreas Müller 貢獻。API 變更 如果設定了
random_state
但shuffle
為 False,model_selection.KFold
和model_selection.StratifiedKFold
現在會引發警告。這將在 0.24 版本中引發錯誤。
sklearn.multioutput
#
修復
multioutput.MultiOutputClassifier
現在具有屬性classes_
。 #14629 由 Agamemnon Krasoulis 貢獻。修復
multioutput.MultiOutputClassifier
現在具有predict_proba
作為屬性,並且可以使用hasattr
檢查。 #15488 #15490 由 Rebekah Kim 貢獻
sklearn.naive_bayes
#
主要功能 新增了實作 Categorical Naive Bayes 分類器的
naive_bayes.CategoricalNB
。 #12569 由 Tim Bicker 和 Florian Wilhelm 貢獻。
sklearn.neighbors
#
主要功能 新增了
neighbors.KNeighborsTransformer
和neighbors.RadiusNeighborsTransformer
,它們將輸入資料集轉換為稀疏鄰居圖。它們可以更精細地控制最近鄰居的計算,並為多次使用啟用輕鬆的管道快取。 #10482 由 Tom Dupre la Tour 貢獻。新功能
neighbors.KNeighborsClassifier
、neighbors.KNeighborsRegressor
、neighbors.RadiusNeighborsClassifier
、neighbors.RadiusNeighborsRegressor
和neighbors.LocalOutlierFactor
現在接受預先計算的稀疏鄰居圖作為輸入。 #10482 由 Tom Dupre la Tour 和 Kumar Ashutosh 貢獻。新功能
neighbors.RadiusNeighborsClassifier
現在支援使用predict_proba
預測機率,並支援更多 outlier_label 選項: 'most_frequent',或針對多輸出使用不同的 outlier_labels。 #9597 由 Wenbo Zhao 貢獻。效率提升 提升了
neighbors.RadiusNeighborsClassifier.predict
的效率。 #9597 由 Wenbo Zhao 貢獻。錯誤修正
neighbors.KNeighborsRegressor
現在當metric='precomputed'
且在非平方資料上進行擬合時會拋出錯誤。 #14336 由 Gregory Dexter 貢獻。
sklearn.neural_network
#
新功能 在
neural_network.BaseMultilayerPerceptron
、neural_network.MLPRegressor
和neural_network.MLPClassifier
中新增max_fun
參數,以便控制最大函數評估次數,使其不會達到tol
的改進目標。 #9274 由 Daniel Perry 貢獻。
sklearn.pipeline
#
增強功能 如果最終的估計器支援,則
pipeline.Pipeline
現在支援 score_samples。 #13806 由 Anaël Beaugnon 貢獻。錯誤修正
FeatureUnion
中的fit
現在接受fit_params
以傳遞給底層的轉換器。 #15119 由 Adrin Jalali 貢獻。API 變更 在
pipeline.FeatureUnion
中,將None
作為轉換器已遭棄用。請改用'drop'
。 #15053 由 Thomas Fan 貢獻。
sklearn.preprocessing
#
效率提升 當輸入資料為密集資料時,
preprocessing.PolynomialFeatures
現在速度更快。 #13290 由 Xavier Dupré 貢獻。增強功能 避免在擬合預處理器
preprocessing.StandardScaler
、preprocessing.MinMaxScaler
、preprocessing.MaxAbsScaler
、preprocessing.RobustScaler
和preprocessing.QuantileTransformer
時進行不必要的資料複製,這會導致效能略有提升。 #13987 由 Roman Yurchak 貢獻。錯誤修正 當在非平方
preprocessing.KernelCenterer
上進行擬合時,KernelCenterer 現在會拋出錯誤。 #14336 由 Gregory Dexter 貢獻。
sklearn.model_selection
#
錯誤修正
model_selection.GridSearchCV
和model_selection.RandomizedSearchCV
現在支援_pairwise
屬性,這可防止在具有成對輸入的估計器(例如,當 metric 設定為 'precomputed' 時的neighbors.KNeighborsClassifier
)進行交叉驗證時發生錯誤。 #13925 由 Isaac S. Robson 貢獻,以及 #15524 由 Xun Tang 貢獻。
sklearn.svm
#
增強功能
svm.SVC
和svm.NuSVC
現在接受break_ties
參數。如果decision_function_shape='ovr'
且目標類別的數量 > 2,則此參數會讓 predict 根據 decision_function 的信賴值打破平局。 #12557 由 Adrin Jalali 貢獻。增強功能 當
kernel='precomputed'
且在非平方資料上進行擬合時,SVM 估計器現在會拋出更具體的錯誤。 #14336 由 Gregory Dexter 貢獻。修正 當
svm.SVC
、svm.SVR
、svm.NuSVR
和svm.OneClassSVM
的 fit() 方法接收到參數sample_weight
的負值或零值時,會產生無效的模型。此行為僅在某些邊界情況下發生。現在,在這些情況下,fit() 將會因為例外狀況而失敗。#14286 由 Alex Shacked 貢獻。修正
svm.SVR
和svm.OneClassSVM
的n_support_
屬性之前未初始化,大小為 2。現在其大小為 1,並具有正確的值。#15099 由 Nicolas Hug 貢獻。修正 修正了
BaseLibSVM._sparse_fit
中的一個錯誤,當 n_SV=0 時會引發 ZeroDivisionError。#14894 由 Danna Naser 貢獻。修正 liblinear 求解器現在支援
sample_weight
。#15038 由 Guillaume Lemaitre 貢獻。
sklearn.tree
#
功能 新增最小成本複雜度修剪(minimal cost complexity pruning),由
ccp_alpha
控制,適用於tree.DecisionTreeClassifier
、tree.DecisionTreeRegressor
、tree.ExtraTreeClassifier
、tree.ExtraTreeRegressor
、ensemble.RandomForestClassifier
、ensemble.RandomForestRegressor
、ensemble.ExtraTreesClassifier
、ensemble.ExtraTreesRegressor
、ensemble.GradientBoostingClassifier
和ensemble.GradientBoostingRegressor
。#12887 由 Thomas Fan 貢獻。API 變更
presort
在tree.DecisionTreeClassifier
和tree.DecisionTreeRegressor
中已被棄用,且此參數不再起作用。#14907 由 Adrin Jalali 貢獻。API 變更
tree.DecisionTreeRegressor
的classes_
和n_classes_
屬性現在已被棄用。#15028 由 Mei Guan、Nicolas Hug 和 Adrin Jalali 貢獻。
sklearn.utils
#
功能
check_estimator
現在可以透過設定generate_only=True
來產生檢查。先前,執行check_estimator
將在第一個檢查失敗時停止。使用generate_only=True
,所有檢查可以獨立執行並報告失敗的檢查。請在 建立自己的估計器 中閱讀更多資訊。#14381 由 Thomas Fan 貢獻。功能 新增了一個 pytest 特定的裝飾器
parametrize_with_checks
,用於參數化一組估計器的估計器檢查。#14381 由 Thomas Fan 貢獻。功能 新增一個隨機變數
utils.fixes.loguniform
,實現了對數均勻隨機變數(例如,用於 RandomizedSearchCV)。例如,對於loguniform(1, 100)
,結果1
、10
和100
的可能性都相等。請參閱 #11232,由 Scott Sievert 和 Nathaniel Saul 貢獻,以及SciPy PR 10815 <https://github.com/scipy/scipy/pull/10815>
。增強
utils.safe_indexing
(現已棄用)接受axis
參數,以跨行和列對類陣列(array-like)進行索引。列索引可以在 NumPy 陣列、SciPy 稀疏矩陣和 Pandas DataFrame 上完成。還進行了額外的重構。#14035 和 #14475 由 Guillaume Lemaitre 貢獻。增強
utils.extmath.safe_sparse_dot
可以在 3D+ ndarray 和稀疏矩陣之間運作。#14538 由 Jérémie du Boisberranger 貢獻。修正
utils.check_array
現在會引發錯誤,而不是將 NaN 轉換為整數。#14872 由 Roman Yurchak 貢獻。修正
utils.check_array
現在可以正確偵測 pandas 資料框中的數值 dtype,修正了一個將float32
不必要地向上轉換為float64
的錯誤。#15094 由 Andreas Müller 貢獻。API 變更 以下工具已被棄用,現在為私有工具:
choose_check_classifiers_labels
enforce_estimator_tags_y
mocking.MockDataFrame
mocking.CheckingClassifier
optimize.newton_cg
random.random_choice_csc
utils.choose_check_classifiers_labels
utils.enforce_estimator_tags_y
utils.optimize.newton_cg
utils.random.random_choice_csc
utils.safe_indexing
utils.mocking
utils.fast_dict
utils.seq_dataset
utils.weight_vector
utils.fixes.parallel_helper
(已移除)除了
all_estimators
現在位於utils
中之外,其餘的utils.testing
皆已移除。
sklearn.isotonic
#
修正 修正了當
X.dtype == 'float32'
且X.dtype != y.dtype
時,isotonic.IsotonicRegression.fit
會引發錯誤的 bug。#14902 by Lucas。
其他#
修正 從 SciPy 移植
lobpcg
,其中實作了一些錯誤修正,但僅適用於 1.3+ 版本。#13609 和 #14971 by Guillaume Lemaitre。API 變更 Scikit-learn 現在會將任何實作鴨子陣列的輸入資料結構轉換為 numpy 陣列(使用
__array__
),以確保行為一致,而不是依賴__array_function__
(請參閱 NEP 18)。#14702 by Andreas Müller。API 變更 將手動檢查替換為
check_is_fitted
。現在使用未擬合的估算器時所拋出的錯誤更加統一。#13013 by Agamemnon Krasoulis。
估算器檢查的變更#
這些變更主要影響程式庫開發人員。
現在預期估算器在
fit
之前呼叫predict
或transform
時會引發NotFittedError
;之前可接受AttributeError
或ValueError
。#13013 by Agamemnon Krasoulis。估算器檢查現在支援僅限二元的分類器。此類分類器需要具有
binary_only=True
估算器標籤。#13875 by Trevor Stephens。預期估算器會將輸入資料 (
X
、y
、sample_weights
) 轉換為numpy.ndarray
,並且永遠不會在傳遞的原始資料類型上呼叫__array_function__
(請參閱 NEP 18)。#14702 by Andreas Müller。requires_positive_X
估算器標籤 (適用於需要 X 為非負值的模型) 現在由utils.estimator_checks.check_estimator
使用,以確保如果 X 包含一些負數項目,則會引發正確的錯誤訊息。#14680 by Alex Gramfort。新增檢查以確保成對估算器會在非正方形資料上引發錯誤 #14336 by Gregory Dexter。
新增兩個常見的多輸出估算器測試
utils.estimator_checks.check_classifier_multioutput
和utils.estimator_checks.check_regressor_multioutput
。#13392 by Rok Mihevc。修正 將
check_transformer_data_not_an_array
新增至遺失的檢查中修正 估算器標籤解析現在遵循正常的 MRO。它們過去只能覆寫一次。#14884 by Andreas Müller。
程式碼和文件貢獻者
感謝自 0.21 版以來為專案的維護和改進做出貢獻的每個人,包括
Aaron Alphonsus、Abbie Popa、Abdur-Rahmaan Janhangeer、abenbihi、Abhinav Sagar、Abhishek Jana、Abraham K. Lagat、Adam J. Stewart、Aditya Vyas、Adrin Jalali、Agamemnon Krasoulis、Alec Peters、Alessandro Surace、Alexandre de Siqueira、Alexandre Gramfort、alexgoryainov、Alex Henrie、Alex Itkes、alexshacked、Allen Akinkunle、Anaël Beaugnon、Anders Kaseorg、Andrea Maldonado、Andrea Navarrete、Andreas Mueller、Andreas Schuderer、Andrew Nystrom、Angela Ambroz、Anisha Keshavan、Ankit Jha、Antonio Gutierrez、Anuja Kelkar、Archana Alva、arnaudstiegler、arpanchowdhry、ashimb9、Ayomide Bamidele、Baran Buluttekin、barrycg、Bharat Raghunathan、Bill Mill、Biswadip Mandal、blackd0t、Brian G. Barkley、Brian Wignall、Bryan Yang、c56pony、camilaagw、cartman_nabana、catajara、Cat Chenal、Cathy、cgsavard、Charles Vesteghem、Chiara Marmo、Chris Gregory、Christian Lorentzen、Christos Aridas、Dakota Grusak、Daniel Grady、Daniel Perry、Danna Naser、DatenBergwerk、David Dormagen、deeplook、Dillon Niederhut、Dong-hee Na、Dougal J. Sutherland、DrGFreeman、Dylan Cashman、edvardlindelof、Eric Larson、Eric Ndirangu、Eunseop Jeong、Fanny、federicopisanu、Felix Divo、flaviomorelli、FranciDona、Franco M. Luque、Frank Hoang、Frederic Haase、g0g0gadget、Gabriel Altay、Gabriel do Vale Rios、Gael Varoquaux、ganevgv、gdex1、getgaurav2、Gideon Sonoiya、Gordon Chen、gpapadok、Greg Mogavero、Grzegorz Szpak、Guillaume Lemaitre、Guillem García Subies、H4dr1en、hadshirt、Hailey Nguyen、Hanmin Qin、Hannah Bruce Macdonald、Harsh Mahajan、Harsh Soni、Honglu Zhang、Hossein Pourbozorg、Ian Sanders、Ingrid Spielman、J-A16、jaehong park、Jaime Ferrando Huertas、James Hill、James Myatt、Jay、jeremiedbb、Jérémie du Boisberranger、jeromedockes、Jesper Dramsch、Joan Massich、Joanna Zhang、Joel Nothman、Johann Faouzi、Jonathan Rahn、Jon Cusick、Jose Ortiz、Kanika Sabharwal、Katarina Slama、kellycarmody、Kennedy Kang’ethe、Kensuke Arai、Kesshi Jordan、Kevad、Kevin Loftis、Kevin Winata、Kevin Yu-Sheng Li、Kirill Dolmatov、Kirthi Shankar Sivamani、krishna katyal、Lakshmi Krishnan、Lakshya KD、LalliAcqua、lbfin、Leland McInnes、Léonard Binet、Loic Esteve、loopyme、lostcoaster、Louis Huynh、lrjball、Luca Ionescu、Lutz Roeder、MaggieChege、Maithreyi Venkatesh、Maltimore、Maocx、Marc Torrellas、Marie Douriez、Markus、Markus Frey、Martina G. Vilas、Martin Oywa、Martin Thoma、Masashi SHIBATA、Maxwell Aladago、mbillingr、m-clare、Meghann Agarwal、m.fab、Micah Smith、miguelbarao、Miguel Cabrera、Mina Naghshhnejad、Ming Li、motmoti、mschaffenroth、mthorrell、Natasha Borders、nezar-a、Nicolas Hug、Nidhin Pattaniyil、Nikita Titov、Nishan Singh Mann、Nitya Mandyam、norvan、notmatthancock、novaya、nxorable、Oleg Stikhin、Oleksandr Pavlyk、Olivier Grisel、Omar Saleem、Owen Flanagan、panpiort8、Paolo、Paolo Toccaceli、Paresh Mathur、Paula、Peng Yu、Peter Marko、pierretallotte、poorna-kumar、pspachtholz、qdeffense、Rajat Garg、Raphaël Bournhonesque、Ray、Ray Bell、Rebekah Kim、Reza Gharibi、Richard Payne、Richard W、rlms、Robert Juergens、Rok Mihevc、Roman Feldbauer、Roman Yurchak、R Sanjabi、RuchitaGarde、Ruth Waithera、Sackey、Sam Dixon、Samesh Lakhotia、Samuel Taylor、Sarra Habchi、Scott Gigante、Scott Sievert、Scott White、Sebastian Pölsterl、Sergey Feldman、SeWook Oh、she-dares、Shreya V、Shubham Mehta、Shuzhe Xiao、SimonCW、smarie、smujiga、Sönke Behrends、Soumirai、Sourav Singh、stefan-matcovici、steinfurt、Stéphane Couvreur、Stephan Tulkens、Stephen Cowley、Stephen Tierney、SylvainLan、th0rwas、theoptips、theotheo、Thierno Ibrahima DIOP、Thomas Edwards、Thomas J Fan、Thomas Moreau、Thomas Schmitt、Tilen Kusterle、Tim Bicker、Timsaur、Tim Staley、Tirth Patel、Tola A、Tom Augspurger、Tom Dupré la Tour、topisan、Trevor Stephens、ttang131、Urvang Patel、Vathsala Achar、veerlosar、Venkatachalam N、Victor Luzgin、Vincent Jeanselme、Vincent Lostanlen、Vladimir Korolev、vnherdeiro、Wenbo Zhao、Wendy Hu、willdarnell、William de Vazelhes、wolframalpha、xavier dupré、xcjason、x-martian、xsat、xun-tang、Yinglr、yokasre、Yu-Hang “Maxin” Tang、Yulia Zamriy、Zhao Feng