scikit-learn库有建立机器学习管道. 我们只需要指定这些函数, 它将构建一个使数据通过整个流水线的组合对象. 该管道可以包括预处理, 特征选择, 监督学习, 无监督学习等功能. 在这个食谱中, 我们将构建一个管道来获取输入特征向量, 选择顶部的k个特征, 然后使用随机森林分类器进行分类.
怎么做...?
- 创建一个新的Python文件, 并导入以下软件包:
from sklearn.datasets import samples_generator
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectKBest, f_regression
from sklearn.pipeline import Pipeline
- 生成一些数据:
# generate sample data
# 该行生成20维特征向量, 因为这是默认值. 您可以改变n_features参数进行更改
X, y = samples_generator.make_classification(
n_informative=4,
n_features=20,
n_redundant=0,
random_state=5
)
- 我们的第一步是选择k最好的功能, 之后再使用数据点. 在这种情况下, 我们设置k为10:
# Feature selector
selector_k_best = SelectKBest(f_regression, k=10)
- 下一步是使用随机森林分类器对数据进行分类:
# Random forest classifier
classifier = RandomForestClassifier(n_estimators=50, max_depth=4)
- 我们现在准备建造管道. 管道方法允许我们使用预定义的对象来构建管道:
# Build the machine learning pipeline
pipeline_classifier = Pipeline(
[
('selector', selector_k_best),
('rf', classifier)
]
)
我们也可以为管道中的块指定名称. 在上一行中, 我们将选择器名称分配给我们的特征选择器, 并将rf分配给我们的随机森林分类器. 您可以随意使用任何其他随机名称.
- 我们也可以随时更新这些参数. 我们可以使用我们在上一步中分配的名称来设置参数. 例如, 如果要在功能选择器中将k设置为6, 并在随机林分类器中将n_estimators设置为25, 我们可以像下面的代码那样执行. 请注意, 这些是上一步中给出的变量名称:
# We can set the parameters using the names we assigned
# earlier. For example, if we want to set 'k' to 6 in the
# feature selector and set 'n_estimators' in the Random
# Forest Classifier to 25, we can do it as shown below
pipeline_classifier.set_params(
selector__k=6,
rf__n_estimators=25
)
- 让我们继续训练分类器:
# Training the classifier
pipeline_classifier.fit(X, y)
- 我们预测训练数据的输出:
# Predict the output
prediction = pipeline_classifier.predict(X)
print ("Predictions:", prediction)
- 我们估计这个分类器的性能:
# Print score
print ("Score:", pipeline_classifier.score(X, y))
- 我们还可以看到哪些功能被选中. 我们继续打印它们:
# Print the selected features chosen by the selector
features_status = pipeline_classifier.named_steps['selector'].get_support()
selected_features = []
for count, item in enumerate(features_status):
if item:
selected_features.append(count)
print (
"Selected features (0-indexed):",
', '.join([str(x) for x in selected_features])
)
- 运行结果如下:
运行原理...?
选择k最好的功能的优点是我们能够处理低维数据. 这有助于降低计算复杂度. 我们选择k最佳特征的方式是基于单变量特征选择. 这执行单变量统计测试, 然后从特征向量中提取出最高性能的特征. 单变量统计检验是指涉及单个变量的分析技术.
一旦执行了这些测试, 特征向量中的每个特征被分配一个分数. 基于这些分数, 我们选择顶部的k特征. 我们将其作为分类器管道中的预处理步骤. 一旦我们提取了顶部的k特征, 就形成了一个k维特征向量, 我们用它作为随机森林分类器的输入训练数据.