2.3 预测器 (Predictor)


文档摘要

2.3 预测器 (Predictor) Scikit-learn 核心概念:深入理解预测器 (Predictor) 在机器学习领域,预测模型扮演着至关重要的角色。它们从数据中学习模式,并利用这些模式对未知数据进行预测。Scikit-learn (sklearn) 作为 Python 中最流行的机器学习库之一,提供了丰富的预测器 (Predictor) 类,涵盖了各种监督和非监督学习算法。理解 Scikit-learn 中的预测器是掌握库功能、构建有效机器学习模型的基石。 2.3 预测器 (Predictor):Scikit-learn 的核心组件 在 Scikit-learn 中,预测器 (Predictor) 是实现了 和 两个关键方法的对象。

2.3 预测器 (Predictor)

Scikit-learn 核心概念:深入理解预测器 (Predictor)

在机器学习领域,预测模型扮演着至关重要的角色。它们从数据中学习模式,并利用这些模式对未知数据进行预测。Scikit-learn (sklearn) 作为 Python 中最流行的机器学习库之一,提供了丰富的预测器 (Predictor) 类,涵盖了各种监督和非监督学习算法。理解 Scikit-learn 中的预测器是掌握库功能、构建有效机器学习模型的基石。

2.3 预测器 (Predictor):Scikit-learn 的核心组件

在 Scikit-learn 中,预测器 (Predictor) 是实现了 fit(X, y)predict(T) 两个关键方法的对象。简单来说,预测器负责学习数据中的模式 (通过 fit 方法)利用学到的模式对新数据进行预测 (通过 predict 方法)

核心概念拆解:

  • fit(X, y) 方法 (训练):

    • 作用: fit 方法是预测器的核心训练方法。它接收训练数据 X 和对应的目标变量 y (对于监督学习),模型会根据这些数据学习特征与目标之间的关系,或者数据本身的结构 (对于非监督学习)。

    • 输入:

      • X (特征矩阵): 通常是一个二维数组或稀疏矩阵,每一行代表一个样本,每一列代表一个特征。

      • y (目标变量): 对于监督学习,y 是与 X 中样本对应的目标值或标签。它可以是一维数组 (回归任务) 或二维数组 (多标签分类)。对于非监督学习,y 可以省略或设置为 None

    • 输出: fit 方法通常返回 self,即预测器自身。这允许链式调用,例如 model.fit(X, y).predict(T)

    • 内部机制: fit 方法内部的具体实现取决于预测器所代表的算法。例如,线性回归的 fit 方法会计算最佳拟合线的系数,决策树的 fit 方法会构建树结构,而 K-Means 聚类算法的 fit 方法会找到聚类中心。

  • predict(T) 方法 (预测):

    • 作用: predict 方法利用 fit 方法学到的模型,对新的未知数据 T 进行预测。

    • 输入:

      • T (待预测的特征矩阵): 结构与训练数据 X 相似,也是一个二维数组或稀疏矩阵。
    • 输出: predict 方法返回预测结果 y_pred

      • 对于分类任务,y_pred 通常是一维数组,包含每个样本的预测类别标签。

      • 对于回归任务,y_pred 通常是一维数组,包含每个样本的预测数值。

      • 对于某些非监督学习任务 (如聚类),predict 可能返回簇标签或转换后的数据。

预测器的类型:

Scikit-learn 提供了多种类型的预测器,可以根据学习任务的性质进行分类:

  • 监督学习预测器 (Supervised Learning Predictors): 这类预测器在训练时需要目标变量 y,用于学习特征与目标之间的映射关系。

    • 分类器 (Classifiers): 用于预测样本的类别标签。例如:逻辑回归 (Logistic Regression)、支持向量机 (Support Vector Machines, SVM)、决策树 (Decision Trees)、随机森林 (Random Forests)、K-近邻 (K-Nearest Neighbors, KNN) 等。

    • 回归器 (Regressors): 用于预测样本的连续数值。例如:线性回归 (Linear Regression)、岭回归 (Ridge Regression)、套索回归 (Lasso Regression)、支持向量回归 (Support Vector Regression, SVR)、随机森林回归 (Random Forest Regressor) 等。

  • 非监督学习预测器 (Unsupervised Learning Predictors): 这类预测器在训练时不需要目标变量 y,主要用于发现数据中的结构或模式。

    • 聚类器 (Clustering): 用于将数据样本划分为不同的簇。例如:K-均值 (K-Means)、DBSCAN、层次聚类 (Agglomerative Clustering) 等。

    • 降维器 (Dimensionality Reduction): 用于降低数据的维度,同时保留重要信息。例如:主成分分析 (Principal Component Analysis, PCA)、奇异值分解 (Singular Value Decomposition, SVD) 等。

    • 异常检测器 (Anomaly Detection): 用于识别数据中的异常点。例如:One-Class SVM、孤立森林 (Isolation Forest) 等。

核心方法总结:

方法名 作用 适用阶段 输入 输出
fit(X, y) 训练模型,学习数据模式 训练阶段 X (特征矩阵), y (目标变量) (监督学习) self (预测器自身)
predict(T) 利用训练好的模型进行预测 预测阶段 T (待预测的特征矩阵) y_pred (预测结果,类别标签或数值)
fit_predict(X, y=None) 训练并预测,常用于非监督学习或模型评估 训练和预测阶段 X (特征矩阵), y (可选,取决于模型) y_pred (训练数据上的预测结果)
score(X, y) 评估模型性能,返回评估指标 评估阶段 X (特征矩阵), y (目标变量) 评估指标值 (如准确率、R^2 分数等)
get_params() 获取模型参数 配置阶段 模型参数字典
set_params(**params) 设置模型参数 配置阶段 **params (参数字典) self (预测器自身)

代码实践与内容详解

接下来,我们将通过具体的代码示例,详细解释不同类型预测器的使用方法和核心概念。

1. 监督学习预测器:分类器 (Classifier)

示例:使用逻辑回归进行鸢尾花分类

from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris from sklearn.metrics import accuracy_score # 1. 加载数据集 iris = load_iris() X, y = iris.data, iris.target # 2. 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 3. 创建逻辑回归分类器 logistic_reg = LogisticRegression(random_state=42, max_iter=1000) # 初始化预测器 # 4. 训练模型 (fit 方法) logistic_reg.fit(X_train, y_train) # 使用训练数据训练模型 # 5. 预测 (predict 方法) y_pred = logistic_reg.predict(X_test) # 使用测试集进行预测 # 6. 评估模型性能 (score 方法 或其他评估指标) accuracy = accuracy_score(y_test, y_pred) # 计算准确率 print(f"逻辑回归在鸢尾花数据集上的准确率: {accuracy:.4f}") print(f"使用 score 方法评估准确率: {logistic_reg.score(X_test, y_test):.4f}") # 使用 score 方法直接评估 # 7. 获取模型参数 (get_params 方法) params = logistic_reg.get_params() print(f"逻辑回归模型参数: {params}") # 8. 设置模型参数 (set_params 方法) logistic_reg.set_params(C=0.1) # 修改正则化强度参数 C print(f"修改参数后的逻辑回归模型参数: {logistic_reg.get_params()}")

代码详解:

  • 步骤 3: 创建预测器实例 logistic_reg = LogisticRegression(...): 首先,我们根据需要选择合适的预测器类 (这里是 LogisticRegression),并实例化一个预测器对象。在实例化时,可以设置模型的超参数 (hyperparameters),例如 random_state 用于控制随机性,max_iter 设置最大迭代次数。

  • 步骤 4: 训练模型 logistic_reg.fit(X_train, y_train): 调用 fit 方法,传入训练数据 X_train 和对应的目标变量 y_train。逻辑回归模型会根据这些数据学习特征与类别标签之间的关系。fit 方法是模型学习的关键步骤,它会改变预测器内部的状态,使其能够进行预测。

  • 步骤 5: 预测 y_pred = logistic_reg.predict(X_test): 调用 predict 方法,传入待预测的测试集 X_test。模型利用训练阶段学到的知识,对测试集中的每个样本进行类别预测,并将预测结果存储在 y_pred 中。

  • 步骤 6: 评估模型 accuracy_score(y_test, y_pred)logistic_reg.score(X_test, y_test): 使用评估指标 (如准确率 accuracy_score) 或预测器自带的 score 方法来评估模型在测试集上的性能。score 方法对于分类器通常默认返回准确率,对于回归器通常默认返回 R^2 分数。

  • 步骤 7 & 8: 获取和设置模型参数 get_params()set_params(): get_params 方法返回一个包含模型所有可调参数的字典。set_params 方法可以用来修改模型的超参数。这在模型调优和参数搜索中非常有用。

2. 监督学习预测器:回归器 (Regressor)

示例:使用线性回归进行波士顿房价预测

from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.datasets import load_boston from sklearn.metrics import mean_squared_error, r2_score # 1. 加载数据集 boston = load_boston() X, y = boston.data, boston.target # 2. 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 3. 创建线性回归回归器 linear_reg = LinearRegression() # 初始化预测器 # 4. 训练模型 (fit 方法) linear_reg.fit(X_train, y_train) # 使用训练数据训练模型 # 5. 预测 (predict 方法) y_pred = linear_reg.predict(X_test) # 使用测试集进行预测 # 6. 评估模型性能 (score 方法 或其他评估指标) mse = mean_squared_error(y_test, y_pred) # 计算均方误差 r2 = r2_score(y_test, y_pred) # 计算 R^2 分数 print(f"线性回归在波士顿房价数据集上的均方误差 (MSE): {mse:.2f}") print(f"线性回归在波士顿房价数据集上的 R^2 分数: {r2:.4f}") print(f"使用 score 方法评估 R^2 分数: {linear_reg.score(X_test, y_test):.4f}") # 使用 score 方法直接评估

代码详解:

回归器的使用流程与分类器类似,主要区别在于:

  • 预测器类: 使用 LinearRegression 等回归器类。

  • 目标变量: y 是连续数值,代表房价。

  • 评估指标: 使用回归任务常用的评估指标,如均方误差 (MSE) 和 R^2 分数。score 方法对于 LinearRegression 默认返回 R^2 分数。

3. 非监督学习预测器:聚类器 (Clustering)

示例:使用 K-Means 聚类算法对生成数据进行聚类

from sklearn.cluster import KMeans from sklearn.datasets import make_blobs import matplotlib.pyplot as plt # 1. 生成模拟数据 X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=42) # 2. 创建 K-Means 聚类器 kmeans = KMeans(n_clusters=4, random_state=42) # 初始化预测器,指定聚类数量 # 3. 训练并预测 (fit_predict 方法) cluster_labels = kmeans.fit_predict(X) # 训练并获取每个样本的簇标签 # 4. 可视化聚类结果 plt.scatter(X[:, 0], X[:, 1], c=cluster_labels, cmap='viridis') plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red', label='Centroids') # 绘制聚类中心 plt.title("K-Means Clustering Results") plt.legend() plt.show() # 5. 预测新数据 (predict 方法) new_data = [[0, 0], [10, 10]] new_cluster_labels = kmeans.predict(new_data) print(f"新数据点的簇标签: {new_cluster_labels}")

代码详解:

  • 步骤 2: 创建聚类器实例 kmeans = KMeans(...): 实例化 KMeans 聚类器,需要指定聚类数量 n_clusters

  • 步骤 3: 训练并预测 cluster_labels = kmeans.fit_predict(X): 对于非监督学习,通常使用 fit_predict 方法。该方法会先使用数据 X 训练模型 (找到聚类中心),然后直接返回训练数据 X 上每个样本的簇标签。

  • 步骤 5: 预测新数据 new_cluster_labels = kmeans.predict(new_data): 训练完成后,可以使用 predict 方法对新的未知数据 new_data 进行聚类,得到它们所属的簇标签。

fit_predict 方法的特殊性:

fit_predict 方法结合了 fitpredict 两个步骤,主要用于以下场景:

  • 非监督学习: 在非监督学习中,模型训练和预测通常在同一数据集上进行,例如聚类和降维。fit_predict 可以简化代码流程。

  • 模型评估 (交叉验证): 在交叉验证等模型评估过程中,需要对训练集进行训练并立即在训练集上进行预测,以便进行后续的评估指标计算。

  • 集成学习 (Ensemble Learning): 某些集成学习方法 (如 stacking) 需要基模型在训练集上进行预测,作为下一层模型的输入。fit_predict 可以方便地获取这些预测结果。

4. 非监督学习预测器:降维器 (Dimensionality Reduction)

示例:使用 PCA 进行数据降维

from sklearn.decomposition import PCA from sklearn.datasets import load_digits import matplotlib.pyplot as plt # 1. 加载数据集 (手写数字数据集) digits = load_digits() X, y = digits.data, digits.target # 2. 创建 PCA 降维器 pca = PCA(n_components=2) # 初始化 PCA 降维器,指定降维到 2 维 # 3. 训练并转换数据 (fit_transform 方法) X_reduced = pca.fit_transform(X) # 训练 PCA 并将数据降维 # 4. 可视化降维结果 plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y, cmap='viridis') plt.title("PCA降维后的手写数字数据集") plt.xlabel("主成分 1") plt.ylabel("主成分 2") plt.colorbar(label='数字类别') plt.show() # 5. 转换新数据 (transform 方法) new_data = X[:5] # 取前 5 个样本作为新数据 X_new_reduced = pca.transform(new_data) print(f"降维后的新数据: {X_new_reduced}")

代码详解:

  • 步骤 2: 创建降维器实例 pca = PCA(...): 实例化 PCA 降维器,需要指定降维后的维度 n_components

  • 步骤 3: 训练并转换数据 X_reduced = pca.fit_transform(X): 对于降维器,通常使用 fit_transform 方法。该方法会先使用数据 X 训练 PCA 模型 (计算主成分),然后将数据 X 转换到降维后的空间。

  • 步骤 5: 转换新数据 X_new_reduced = pca.transform(new_data): 训练完成后,可以使用 transform 方法将新的未知数据 new_data 转换到相同的降维空间。

fit_transformtransform 方法的区别:

  • fit_transform(X): 用于训练数据 X。它会先调用 fit(X) 学习模型参数 (如 PCA 的主成分),然后使用学到的参数对 X 进行转换。

  • transform(T): 用于新的数据 T。它只进行转换不重新训练模型。它使用在训练数据上学到的模型参数来转换 T

总结:

Scikit-learn 的预测器 (Predictor) 是构建机器学习模型的基石。理解 fitpredictfit_predictscoreget_paramsset_params 等核心方法,以及不同类型预测器的应用场景,对于有效利用 Scikit-learn 库至关重要。通过本文的代码实践和内容详解,相信读者能够更深入地理解和掌握 Scikit-learn 预测器的使用,为构建更强大的机器学习模型打下坚实的基础。

在实际应用中,选择合适的预测器需要根据具体的任务类型、数据特征和性能要求进行权衡。Scikit-learn 提供了丰富的文档和示例,鼓励读者进一步探索不同预测器的特性和用法,并在实践中不断积累经验。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U