机器学习管道与特征选择

机器学习中,构建一个有效的学习管道是至关重要的。一个管道通常包括数据预处理、特征选择、模型训练等多个步骤。本文将展示如何创建一个包含特征选择的机器学习管道,并使用支持向量机作为分类器。首先,需要生成一个用于二分类的数据集,然后将其分为训练集和测试集。

from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split X, y = make_classification(n_features=20, n_informative=3, n_redundant=0, n_classes=2, n_clusters_per_class=2, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

在特征选择过程中,一个常见的错误是在完整数据集上搜索一组有区分度的特征子集,而不是仅使用训练集。使用scikit-learn的Pipeline可以避免这种错误。将构建一个管道,其中第一步是特征选择。在训练数据上调用fit方法时,将选择一组特征,并将这些选定特征的索引存储起来。然后,特征选择器将减少特征数量,并将这个子集传递给分类器进行训练。

from sklearn.feature_selection import SelectKBest, f_classif from sklearn.pipeline import make_pipeline from sklearn.svm import LinearSVC anova_filter = SelectKBest(f_classif, k=3) clf = LinearSVC() anova_svm = make_pipeline(anova_filter, clf) anova_svm.fit(X_train, y_train)

在Jupyter环境中,可以重新运行此单元格以显示HTML表示,或者在GitHub上无法渲染HTML表示时,尝试使用nbviewer.org加载此页面。完成训练后,可以对新的未见样本进行预测。在这种情况下,特征选择器将仅根据训练期间存储的信息选择最具区分性的特征。然后,数据将传递给分类器进行预测。

from sklearn.metrics import classification_report y_pred = anova_svm.predict(X_test) print(classification_report(y_test, y_pred))

输出的分类报告将显示模型的性能指标,如精确度、召回率、F1分数和支持度。还可以通过检查管道中的步骤来了解分类器的参数。由于选择了三个特征,期望有三个系数。

print(anova_svm[-1].coef_)

然而,不知道原始数据集中哪些特征被选中了。可以通过多种方式进行。这里,将反转这些系数的变换,以获取有关原始空间的信息。

print(anova_svm[-1].inverse_transform(anova_svm[-1].coef_))

可以看到,非零系数的特征是第一步选择的特征。脚本的总运行时间非常短,仅为0.015秒。

相关示例

  • 基于模型和顺序的特征选择
  • 带有交叉验证的自定义网格搜索的refit策略
  • 带有交叉验证的递归特征消除
  • 单变量特征选择
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485