趋近智
一旦从 Scikit-Learn 实例化一个梯度提升模型,对其进行训练并用于预测会遵循一个熟悉且一致的模式。该过程与库的标准 API 保持一致,该 API 包含两个主要方法:.fit() 用于训练模型和 .predict() 用于生成输出。这个工作流程使得梯度提升模型(GBM)算法的应用变得简单直接。
从数据到预测的整个过程可以概括为几个步骤。您首先准备数据,将其分成训练集和测试集,然后使用这些集合来训练模型并评估其表现。
Scikit-Learn 中典型的机器学习工作流程。模型在一个数据子集上训练,并用于在另一个子集上进行预测。
.fit() 拟合模型.fit(X, y) 方法是任何 Scikit-Learn 估计器的核心方法。当您在梯度提升模型上调用此方法时,您就启动了我们在上一章中讨论的顺序树构建过程。
X 参数是您的特征矩阵(通常是 pandas DataFrame 或 NumPy 数组),而 y 是目标向量(pandas Series 或 NumPy 数组)。
让我们通过 GradientBoostingRegressor 来看一下实际操作。假设我们有一个小型房产特征数据集,并希望预测价格。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingRegressor
# 示例数据
data = {
'Area': [2100, 1600, 2400, 1800, 3000, 2200],
'Bedrooms': [3, 3, 3, 2, 4, 3],
'Age': [5, 10, 2, 8, 1, 7],
'Price': [400, 310, 430, 350, 550, 410] # 价格以千为单位
}
df = pd.DataFrame(data)
X = df[['Area', 'Bedrooms', 'Age']]
y = df['Price']
# 将数据拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
# 1. 实例化模型
gbr = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, random_state=42)
# 2. 使用训练数据拟合模型
gbr.fit(X_train, y_train)
print("模型训练完成。")
当执行 gbr.fit(X_train, y_train) 时,模型在内部执行以下步骤:
y_train 的均值)初始化模型。learning_rate 进行缩放。这个过程持续 n_estimators 次迭代,每棵新树都修正了其之前集成模型的误差。
.predict() 生成预测模型训练完成后,.predict(X) 方法用于在新、未见过的数据上生成预测。它接受一个与训练数据结构相同的特征矩阵 X,并返回一个预测值数组。
继续我们的回归例子:
# 3. 在测试集上生成预测
predictions = gbr.predict(X_test)
# 显示测试数据和模型的预测结果
results = X_test.copy()
results['Actual_Price'] = y_test
results['Predicted_Price'] = predictions.round(1)
print(results)
输出:
Area Bedrooms Age Actual_Price Predicted_Price
1 1600 3 10 310 334.8
5 2200 3 7 410 404.7
.predict() 方法通过让输入数据通过集成模型中的每棵树来工作。给定样本的最终预测是初始预测与所有后续树的输出之和,每棵树的输出都按学习率进行缩放。
实际价格与预测价格的比较。越接近虚线的点表示预测越准确。
.predict() 与 .predict_proba()对于使用 GradientBoostingClassifier 的分类任务,您有两种方法进行预测,每种方法都有不同的作用。
.predict(X):此方法返回最终的预测类别标签(例如,0 或 1,'是' 或 '否')。模型计算每个类别的概率,并返回概率最高的那个。
.predict_proba(X):此方法返回每个类别的概率估计值。对于二元分类问题,它返回一个二维数组,其中每行包含两个值:负类别的概率和正类别的概率。
我们通过一个简单的客户流失预测例子来说明。
from sklearn.ensemble import GradientBoostingClassifier
# 示例分类数据
c_data = {
'Tenure': [2, 48, 12, 1, 36, 24],
'MonthlySpend': [50, 100, 80, 45, 110, 95],
'Churn': [1, 0, 0, 1, 0, 1] # 1 表示流失,0 表示未流失
}
c_df = pd.DataFrame(c_data)
X_c = c_df[['Tenure', 'MonthlySpend']]
y_c = c_df['Churn']
# 实例化并拟合分类器
gbc = GradientBoostingClassifier(n_estimators=100, random_state=42)
gbc.fit(X_c, y_c)
# 用于预测的新数据
new_customers = pd.DataFrame({'Tenure': [3, 25], 'MonthlySpend': [60, 105]})
# 获取类别预测
class_predictions = gbc.predict(new_customers)
print(f"类别预测: {class_predictions}")
# 获取概率预测
proba_predictions = gbc.predict_proba(new_customers)
print("概率预测(未流失,流失):")
print(proba_predictions.round(3))
输出:
Class Predictions: [1 0]
Probability Predictions (No Churn, Churn):
[[0.435 0.565]
[0.528 0.472]]
下面是如何解释输出结果:
Tenure:3,MonthlySpend:60),预测类别为 1(流失)。这是因为流失的概率(0.565)大于未流失的概率(0.435)。Tenure:25,MonthlySpend:105),预测类别为 0(未流失),因为其概率(0.528)更高。.predict_proba() 的输出通常比 .predict() 提供更多信息。它使您能够了解模型的置信度并为分类设置自定义阈值。例如,根据业务背景,您可能只在预测概率高于 0.7 时才将客户归类为“流失”。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造