在本文中,我们将讨论预测函数的区别和它们的用途。
在机器学习中,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,才能使用概率预测。