Perceptron#

class sklearn.linear_model.Perceptron(*, penalty=None, alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, eta0=1.0, n_jobs=None, random_state=0, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, warm_start=False)[source]#

線性感知器分類器。

此實作是 SGDClassifier 的封裝器,將 losslearning_rate 參數固定為

SGDClassifier(loss="perceptron", learning_rate="constant")

其他可用的參數如下所述,並會轉發到 SGDClassifier

請參閱使用者指南以取得更多資訊。

參數:
penalty{‘l2’,’l1’,’elasticnet’}, default=None

要使用的懲罰(又稱正規化項)。

alphafloat, default=0.0001

如果使用正規化,則乘以正規化項的常數。

l1_ratiofloat, default=0.15

彈性網的混合參數,其中 0 <= l1_ratio <= 1l1_ratio=0 對應於 L2 懲罰,l1_ratio=1 對應於 L1。 僅在 penalty='elasticnet' 時使用。

於 0.24 版本加入。

fit_interceptbool, default=True

是否應估計截距。如果為 False,則假設資料已置中。

max_iterint, default=1000

訓練資料的最大傳遞次數(又稱 epoch)。它只會影響 fit 方法的行為,而不會影響 partial_fit 方法。

於 0.19 版本加入。

tolfloat or None, default=1e-3

停止條件。 如果不是 None,當 (loss > previous_loss - tol) 時,迭代將會停止。

於 0.19 版本加入。

shufflebool, default=True

在每個 epoch 後,是否應隨機排序訓練資料。

verboseint, default=0

詳細程度。

eta0float, default=1

更新時乘以的常數。

n_jobsint, default=None

用於執行 OVA(One Versus All,針對多類別問題)計算的 CPU 數量。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。請參閱 詞彙表以取得更多詳細資訊。

random_stateint, RandomState instance or None, default=0

用於隨機排序訓練資料,當 shuffle 設定為 True 時。傳遞一個整數,以便在多個函式呼叫中產生可重現的輸出。請參閱 詞彙表

early_stoppingbool, default=False

是否使用提前停止來終止訓練,當驗證分數沒有改善時。如果設定為 True,它會自動預留一部分經過分層的訓練資料作為驗證集,並在驗證分數連續 n_iter_no_change 個 epoch 中沒有改善至少 tol 時終止訓練。

於 0.20 版本加入。

validation_fractionfloat, default=0.1

預留作為提前停止驗證集的訓練資料比例。必須介於 0 和 1 之間。僅在 early_stopping 為 True 時使用。

於 0.20 版本加入。

n_iter_no_changeint, default=5

在提前停止前等待沒有改善的迭代次數。

於 0.20 版本加入。

class_weightdict, {class_label: weight} or “balanced”, default=None

類別權重擬合參數的預設值。

與類別相關聯的權重。如果未給定,則假設所有類別的權重皆為 1。

「平衡」模式會使用 y 的值來自動調整權重,其權重與輸入資料中類別的頻率成反比,計算方式為 n_samples / (n_classes * np.bincount(y))

warm_startbool,預設值為 False

當設定為 True 時,會重複使用前一次呼叫 fit 方法的解作為初始化,否則會清除先前的解。請參閱詞彙表

屬性:
classes_形狀為 (n_classes,) 的 ndarray

唯一的類別標籤。

coef_若 n_classes == 2,則形狀為 (1, n_features) 的 ndarray;否則形狀為 (n_classes, n_features) 的 ndarray

分配給特徵的權重。

intercept_若 n_classes == 2,則形狀為 (1,) 的 ndarray;否則形狀為 (n_classes,) 的 ndarray

決策函數中的常數。

n_features_in_int

fit 期間看到的特徵數量。

於 0.24 版本加入。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅當 X 的特徵名稱都是字串時才會定義。

在 1.0 版本新增。

n_iter_int

達到停止條件的實際迭代次數。對於多類別擬合,它是每個二元擬合中的最大值。

t_int

訓練期間執行的權重更新次數。與 (n_iter_ * n_samples + 1) 相同。

另請參閱

sklearn.linear_model.SGDClassifier

使用 SGD 訓練的線性分類器(SVM、邏輯迴歸等)。

注意事項

Perceptron 是一個分類演算法,它與 SGDClassifier 共享相同的底層實作。事實上,Perceptron() 等同於 SGDClassifier(loss="perceptron", eta0=1, learning_rate="constant", penalty=None)

參考文獻

https://en.wikipedia.org/wiki/Perceptron 以及其中的參考文獻。

範例

>>> from sklearn.datasets import load_digits
>>> from sklearn.linear_model import Perceptron
>>> X, y = load_digits(return_X_y=True)
>>> clf = Perceptron(tol=1e-3, random_state=0)
>>> clf.fit(X, y)
Perceptron()
>>> clf.score(X, y)
0.939...
decision_function(X)[原始碼]#

預測樣本的信賴分數。

樣本的信賴分數與該樣本到超平面的有號距離成正比。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}

我們想要取得信賴分數的資料矩陣。

回傳:
scores形狀為 (n_samples,) 或 (n_samples, n_classes) 的 ndarray

每個 (n_samples, n_classes) 組合的信賴分數。在二元情況下,self.classes_[1] 的信賴分數,其中 > 0 表示將預測此類別。

densify()[原始碼]#

將係數矩陣轉換為密集陣列格式。

coef_ 成員(返回)轉換為 numpy.ndarray。這是 coef_ 的預設格式,並且是擬合所需的格式,因此只有在先前已稀疏化的模型上才需要呼叫此方法;否則,它不會執行任何操作。

回傳:
self

已擬合的估計器。

fit(X, y, coef_init=None, intercept_init=None, sample_weight=None)[原始碼]#

使用隨機梯度下降擬合線性模型。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}

訓練資料。

y形狀為 (n_samples,) 的 ndarray

目標值。

coef_init形狀為 (n_classes, n_features) 的 ndarray,預設值為 None

用於熱啟動最佳化的初始係數。

intercept_init形狀為 (n_classes,) 的 ndarray,預設值為 None

用於熱啟動最佳化的初始截距。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

應用於個別樣本的權重。若未提供,則假設為均勻權重。如果指定了 class_weight,則這些權重將會與 class_weight(透過建構函式傳遞)相乘。

回傳:
self物件

回傳 self 的實例。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請檢查使用者指南,了解路由機制如何運作。

回傳:
routingMetadataRequest

封裝路由資訊的 MetadataRequest

get_params(deep=True)[原始碼]#

取得此估計器的參數。

參數:
deepbool,預設值為 True

如果為 True,則會回傳此估計器和所包含的子物件(估計器)的參數。

回傳:
paramsdict

對應到其值的參數名稱。

partial_fit(X, y, classes=None, sample_weight=None)[原始碼]#

在給定樣本上執行一次隨機梯度下降的迭代。

在內部,此方法使用 max_iter = 1。因此,不保證在呼叫一次後會達到成本函數的最小值。諸如目標收斂、提前停止和學習率調整等問題應由使用者處理。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}

訓練資料的子集。

y形狀為 (n_samples,) 的 ndarray

目標值的子集。

classes形狀為 (n_classes,) 的 ndarray,預設值為 None

所有 partial_fit 呼叫中的類別。可以透過 np.unique(y_all) 取得,其中 y_all 是整個資料集的目標向量。此引數是第一次呼叫 partial_fit 時所需的,並且可以在後續呼叫中省略。請注意,y 不需要包含 classes 中的所有標籤。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

應用於個別樣本的權重。若未提供,則假設為均勻權重。

回傳:
self物件

回傳 self 的實例。

predict(X)[原始碼]#

預測 X 中樣本的類別標籤。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}

我們想要取得預測值的資料矩陣。

回傳:
y_pred形狀為 (n_samples,) 的 ndarray

包含每個樣本類別標籤的向量。

score(X, y, sample_weight=None)[原始碼]#

回傳給定測試資料和標籤的平均準確度。

在多標籤分類中,這是子集準確度,這是一個嚴苛的指標,因為您需要每個樣本的每個標籤集都正確預測。

參數:
X形狀為 (n_samples, n_features) 的類陣列

測試樣本。

y類陣列,形狀為 (n_samples,) 或 (n_samples, n_outputs)

用於 X 的真實標籤。

sample_weight類陣列,形狀為 (n_samples,),預設為 None

樣本權重。

回傳:
score浮點數

相對於 yself.predict(X) 的平均準確度。

set_fit_request(*, coef_init: bool | None | str = '$UNCHANGED$', intercept_init: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') Perceptron[原始碼]#

請求傳遞給 fit 方法的中繼資料。

請注意,只有當 enable_metadata_routing=True 時,此方法才相關 (請參閱 sklearn.set_config)。請參閱 使用者指南,了解路由機制如何運作。

每個參數的選項為

  • True:請求中繼資料,並在提供時傳遞給 fit。如果未提供中繼資料,則會忽略請求。

  • False:不請求中繼資料,且元估計器不會將其傳遞給 fit

  • None:不請求中繼資料,如果使用者提供中繼資料,則元估計器會引發錯誤。

  • str:應將中繼資料使用此給定的別名(而非原始名稱)傳遞給元估計器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這可讓您變更某些參數的請求,而不會變更其他參數的請求。

在 1.3 版中新增。

注意

僅當此估計器用作元估計器的子估計器時,此方法才相關,例如在 Pipeline 內使用。否則,它不會產生任何影響。

參數:
coef_init字串、True、False 或 None,預設為 sklearn.utils.metadata_routing.UNCHANGED

用於 fitcoef_init 參數的中繼資料路由。

intercept_init字串、True、False 或 None,預設為 sklearn.utils.metadata_routing.UNCHANGED

用於 fitintercept_init 參數的中繼資料路由。

sample_weight字串、True、False 或 None,預設為 sklearn.utils.metadata_routing.UNCHANGED

用於 fitsample_weight 參數的中繼資料路由。

回傳:
self物件

更新後的物件。

set_params(**params)[原始碼]#

設定此估計器的參數。

此方法適用於簡單估計器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**params字典

估計器參數。

回傳:
self估計器執行個體

估計器執行個體。

set_partial_fit_request(*, classes: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') Perceptron[原始碼]#

請求傳遞給 partial_fit 方法的中繼資料。

請注意,只有當 enable_metadata_routing=True 時,此方法才相關 (請參閱 sklearn.set_config)。請參閱 使用者指南,了解路由機制如何運作。

每個參數的選項為

  • True:請求中繼資料,並在提供時傳遞給 partial_fit。如果未提供中繼資料,則會忽略請求。

  • False:不請求中繼資料,且元估計器不會將其傳遞給 partial_fit

  • None:不請求中繼資料,如果使用者提供中繼資料,則元估計器會引發錯誤。

  • str:應將中繼資料使用此給定的別名(而非原始名稱)傳遞給元估計器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這可讓您變更某些參數的請求,而不會變更其他參數的請求。

在 1.3 版中新增。

注意

僅當此估計器用作元估計器的子估計器時,此方法才相關,例如在 Pipeline 內使用。否則,它不會產生任何影響。

參數:
classes字串、True、False 或 None,預設為 sklearn.utils.metadata_routing.UNCHANGED

用於 partial_fitclasses 參數的中繼資料路由。

sample_weight字串、True、False 或 None,預設為 sklearn.utils.metadata_routing.UNCHANGED

用於 partial_fitsample_weight 參數的中繼資料路由。

回傳:
self物件

更新後的物件。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') Perceptron[原始碼]#

請求傳遞至 score 方法的中繼資料。

請注意,只有當 enable_metadata_routing=True 時,此方法才相關 (請參閱 sklearn.set_config)。請參閱 使用者指南,了解路由機制如何運作。

每個參數的選項為

  • True:請求中繼資料,並在提供時傳遞至 score。如果未提供中繼資料,則會忽略此請求。

  • False:不請求中繼資料,並且 meta-estimator 不會將其傳遞至 score

  • None:不請求中繼資料,如果使用者提供中繼資料,則元估計器會引發錯誤。

  • str:應將中繼資料使用此給定的別名(而非原始名稱)傳遞給元估計器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這可讓您變更某些參數的請求,而不會變更其他參數的請求。

在 1.3 版中新增。

注意

僅當此估計器用作元估計器的子估計器時,此方法才相關,例如在 Pipeline 內使用。否則,它不會產生任何影響。

參數:
sample_weight字串、True、False 或 None,預設為 sklearn.utils.metadata_routing.UNCHANGED

用於 scoresample_weight 參數的中繼資料路由。

回傳:
self物件

更新後的物件。

sparsify()[原始碼]#

將係數矩陣轉換為稀疏格式。

coef_ 成員轉換為 scipy.sparse 矩陣,對於 L1 正規化的模型,這比一般的 numpy.ndarray 表示法在記憶體和儲存上更有效率。

intercept_ 成員不會被轉換。

回傳:
self

已擬合的估計器。

注意事項

對於非稀疏模型,即當 coef_ 中沒有太多零時,這實際上可能會增加記憶體使用量,因此請謹慎使用此方法。一個經驗法則是,零元素的數量(可以用 (coef_ == 0).sum() 計算)必須超過 50%,才能提供顯著的好處。

在呼叫此方法後,使用 partial_fit 方法(如果有)進行進一步擬合將無法運作,直到您呼叫 densify 為止。