【Python实例第2讲】特征提取集成方法

机器学习训练营——机器学习爱好者的自由交流空间(qq 群号:696721295)

在现实场景的例子里,有很多从数据集提取特征的方法。通常,将几种特征提取方法组合使用会收到更好的效果。本例显示怎样使用函数FeatureUnion组合特征。这里要用到scikit-learn自带数据集——“鸢尾花数据集”。

数据集介绍

“鸢尾花(Iris)数据集”位于datasets里,是由著名统计学家Sir Ronald Fisher在1936年收集整理的数据集,作为机器学习算法的基准数据集而闻名。它包括3个品种的鸢尾花(Iris setosa, Iris virginica and Iris versicolor), 每个品种50个样本。每个样本有4个特征,分别是

  • Sepal.Length(花萼长度)

  • Sepal.Width(花萼宽度)

  • Petal.Length(花瓣长度)

  • Petal.Width(花瓣宽度)

特征值是正浮点数,单位是厘米。目标变量是鸢尾花的类别(Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),Iris Virginica(维吉尼亚鸢尾))。

这里写图片描述

下面,让我们在python环境下载入Iris数据集,看一下它的数据形态。

from sklearn.datasets import load_iris
iris = load_iris()
print(iris.feature_names)
print(iris.target_names)
print(iris.data)
print(iris.target) 

下面显示Iris的一部分特征数据

扫描二维码关注公众号,回复: 3162787 查看本文章

这里写图片描述

target数据

这里写图片描述

实例详解

首先,从scikit-learn里导入必需的模块与函数。

from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest

第一步:数据加载

加载Iris数据集,并且将特征数据和目标数据分成两个对象。

iris = load_iris()
X, y = iris.data, iris.target

第二步:特征提取

主成分法

建立包括两个主成分的主成分对象pca. 主成分是一种重要的线性降维方法,它的基本原理是通过对数据进行奇异值分解(Singular Value Decomposition), 实现将高维数据投影到低维空间,从而降低了特征的维数。

pca = PCA(n_components=2)

最大分数法

建立最大分数特征选择器selection. 它的基本原理是根据方差分析计算类标签与特征之间的F值,进而选择F值最大的特征。

selection = SelectKBest(k=1)

集成方法

组合pca与单变量选择器,建立特征选择估计量。

combined_features = FeatureUnion([("pca", pca), ("univ_select", selection)])

参数是元组(tuples)型的,在每一个元组里,前一半是转换器的名字,后一半是转换器。建立估计量后,使用它的组合特征转换数据集。

X_features = combined_features.fit(X, y).transform(X)

建立线性核函数的C-支持向量分类器。

svm = SVC(kernel="linear")

建立combined_features和svm转换器的管道(pipeline), 最终得到一个估计量。在管道里,连续地应用转换。管道的中间步必须是转换,即执行拟合与估计方法。最终的估计量仅仅需要执行估计。使用参数memory存储管道里的转换器。建立管道的目的是把不同的步骤集合起来,经设置不同的参数,一并进行交叉验证。

pipeline = Pipeline([("features", combined_features), ("svm", svm)])

最后,在三种特征提取方法上做网格搜索。

param_grid = dict(features__pca__n_components=[1, 2, 3],
                  features__univ_select__k=[1, 2],
                  svm__C=[0.1, 1, 10])

grid_search = GridSearchCV(pipeline, param_grid=param_grid, verbose=10)
grid_search.fit(X, y)
print(grid_search.best_estimator_)

阅读更多精彩内容,请关注微信公众号:统计学习与大数据

猜你喜欢

转载自blog.csdn.net/wong2016/article/details/82491619
今日推荐