使用Scikit-Learn,快速掌握機器學習預測方法
在本文中,我們將討論預測函數的區別和它們的用途。
在機器學習中,predict和predict_proba、predict_log_proba和decision_function方法都是用來根據訓練好的模型進行預測的。
predict方法
predict方法用于進行二元分類或多元分類預測,并返回輸入數據的預測類標簽。例如,如果你已經訓練了一個邏輯回歸模型來預測一個客戶是否會購買產品,則可以使用predict方法來預測一個新客戶是否會購買產品。
我們將使用來自scikit-learn的乳腺癌數據集。這個數據集包含了腫瘤觀察結果和腫瘤是惡性還是良性的相應標簽。
import numpy as np
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
# 加載數據集
dataset = load_breast_cancer(as_frame=True)
# 創建特征和目標
X = dataset['data']
y = dataset['target']
# 將數據集分割成訓練集和測試集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y , test_size=0.25, random_state=0)
# 我們創建一個簡單的管道來規范數據并使用`SVC`分類器訓練模型
svc_clf = make_pipeline(StandardScaler(),SVC(max_iter=1000, probability=True))
svc_clf.fit(X_train, y_train)
# 我們正在預測X_test的第一個條目
print(svc_clf.predict(X_test[:1]))
# 預測X_test的第一個條目屬于哪一類
[0]
predict_proba方法
predict_proba方法用于預測每個類標簽的概率,它返回每個可能的類別標簽的概率估計。這種方法通常用于二元或多元分類問題,在這些問題中你想知道每種可能結果的概率。例如,如果你已經訓練了一個模型,將動物的圖像分為貓、狗和馬,你可以使用predict_proba方法來獲得每個類別標簽的概率估計。
print(svc_clf.predict_proba(X_test[:1]))
[[0.99848307 0.00151693]]
predict_log_proba方法
predict_log_proba方法與predict_proba類似,但它返回概率估計值的對數,而不是原始概率。在處理非常小或非常大的概率值時,這可能很有用,因為它有助于避免數值下溢或溢出問題。
print(svc_clf.predict_log_proba(X_test[:1]))
[[-1.51808474e-03 -6.49106473e+00]]
decision_function方法
decision_function方法用于線性模型的二元分類問題。它為每個輸入的數據點返回一個分數,該分數可用于確定類別標簽的預測。可以根據應用或領域知識來設置將數據點分類為正或負的閾值。
print(svc_clf.decision_function(X_test[:1]))
[-1.70756057]
總結
- 當你想要得到輸入數據的預測類標簽時,對二元或多元分類問題使用predict。
- 當你想要獲得每個可能的類別標簽的概率估計值時,請使用predict_proba處理二元或多元分類問題。
- 當你需要處理非常小或非常大的概率值時,或者當你想要避免數字下溢或溢出問題時,請使用predict_log_proba。
- 當你想獲得每個輸入數據點的分數時,使用decision_function處理線性模型的二元分類問題。
注意:有些分類器沒有所有的預測方法或需要額外的參數來訪問函數。例如:SVC需要將概率參數設置為True,才能使用概率預測。