scikit-learn 0.23中的發布要點?
我們很高興地宣布, 發布了 scikit-learn 0.23!許多bug被修復及改進,以及一些新的關鍵特性。我們將在下面詳細介紹這個版本的幾個主要特性。有關所有更改的詳盡清單,請參閱發布說明。
若要安裝最新版本(使用pip),請執行以下操作:
pip install --upgrade scikit-learn
或者使用conda
conda install scikit-learn
1.1.1 廣義線性模型和梯度提升的泊松損失
等待已久的具有非正常損失函數的廣義線性模型現在可用了.特別是,實現了三個新的回歸器:PoissonRegressor
、 GammaRegressor
和TweedieRegressor
。泊松回歸(Poisson regressor )可以用來模擬正整數計數或相對頻率。在用戶指南中閱讀更多內容。此外,HistGradientBoostingRegressor
也支持一個新的‘泊松’損失( ‘poisson’ loss)。
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import PoissonRegressor
from sklearn.experimental import enable_hist_gradient_boosting # noqa
from sklearn.ensemble import HistGradientBoostingRegressor
n_samples, n_features = 1000, 20
rng = np.random.RandomState(0)
X = rng.randn(n_samples, n_features)
# positive integer target correlated with X[:, 5] with many zeros:
y = rng.poisson(lam=np.exp(X[:, 5]) / 2)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=rng)
glm = PoissonRegressor()
gbdt = HistGradientBoostingRegressor(loss='poisson', learning_rate=.01)
glm.fit(X_train, y_train)
gbdt.fit(X_train, y_train)
print(glm.score(X_test, y_test))
print(gbdt.score(X_test, y_test))
# 輸出
0.35776189065725783
0.42425183539869415
1.1.2 估計器的豐富視覺呈現
現在,通過啟用display='diagram'
選項,可以在筆記本中可視化估計器。這特別有助于總結管道(pipelines)和其他復合估計器的結構,并具有交互性以提供詳細信息。單擊下面的示例圖像以展開管道元素。有關如何使用此功能,請參見可視化組合估計器。
from sklearn import set_config
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.compose import make_column_transformer
from sklearn.linear_model import LogisticRegression
set_config(display='diagram')
num_proc = make_pipeline(SimpleImputer(strategy='median'), StandardScaler())
cat_proc = make_pipeline(
SimpleImputer(strategy='constant', fill_value='missing'),
OneHotEncoder(handle_unknown='ignore'))
preprocessor = make_column_transformer((num_proc, ('feat1', 'feat3')),
(cat_proc, ('feat0', 'feat2')))
clf = make_pipeline(preprocessor, LogisticRegression())
clf

1.1.3 對KMeans的可擴展性和穩定性的改進
KMeans估計器是完全重新寫的,現在它更快,更穩定。此外,Elkan算法現在與稀疏矩陣兼容。估計器使用的是基于OpenMP的并行性,而不是依賴于jowb,因此 n_jobs
參數不再起作用。有關如何控制線程數量的詳細信息,請參閱我們的并行性說明。
import scipy
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import completeness_score
rng = np.random.RandomState(0)
X, y = make_blobs(random_state=rng)
X = scipy.sparse.csr_matrix(X)
X_train, X_test, _, y_test = train_test_split(X, y, random_state=rng)
kmeans = KMeans(algorithm='elkan').fit(X_train)
print(completeness_score(kmeans.predict(X_test), y_test))
# 輸出
0.7571304089239168
1.1.4 基于直方圖的梯度提升估計器的改進
對HistGradientBoostingClassifier
和 HistGradientBoostingRegressor
。作了不同的改進。在上述泊松損失的基礎上,這些估計器現在支持樣本權重。此外,還添加了一個自動早期停止標準:當樣本數超過10k時,默認情況下啟用早期停止。最后,用戶現在可以定義單調約束來根據特定特征的變化來約束預測。在下面的例子中,我們構造了一個通常與第一個特征正相關的目標,其中含有一些噪聲。應用單目標約束條件,預測可以捕捉第一個特征的全局效應,而不是對噪聲進行擬合。

1.1.5 Lasso和ElasticNet支持樣本權重
兩個線性回歸器Lasso
和 ElasticNet
現在支持樣本權重。
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
import numpy as np
n_samples, n_features = 1000, 20
rng = np.random.RandomState(0)
X, y = make_regression(n_samples, n_features, random_state=rng)
sample_weight = rng.rand(n_samples)
X_train, X_test, y_train, y_test, sw_train, sw_test = train_test_split(
X, y, sample_weight, random_state=rng)
reg = Lasso()
reg.fit(X_train, y_train, sample_weight=sw_train)
print(reg.score(X_test, y_test, sw_test))
# 輸出
0.999791942438998
腳本的總運行時間:(0分1.299秒)