【发布时间】:2020-11-12 11:54:26
【问题描述】:
我在一个随机生成的分类问题上测试 sklearn 的 Pipeline:
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
x, y = make_classification(n_samples=100, n_features=5, random_state=10)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=.2, random_state=0)
model = DecisionTreeClassifier(random_state=0)
pipe = Pipeline(steps=[('scale', StandardScaler()),
('poly', PolynomialFeatures(degree=2, include_bias=False)),
('model', model)])
pipe.fit(x_train, y_train)
pipe_pred = pipe.predict(x_test)
accuracy_score(y_test, pipe_pred)
这导致准确度得分为.85。但是,当我将PolynomialFeatures 参数include_bias 更改为True 时,它只是将一列1 插入到数组中,准确度分数变为.90。为了可视化,下面我绘制了当偏差为True 和False 时的结果的单个树:
当include_bias=True: True
当include_bias=False: False
这些图片由plot_tree(pipe['model'])生成。
数据集是相同的,除了include_bias=True 在第 0 列中插入了额外的 1 列。因此,include_bias=True 数据的列索引对应于include_bias=False 数据中的i + 1 列索引。 (例如with_bias[:, 5] == without_bias[:, 4])
根据我的理解,1 列不应该对决策树产生影响。我错过了什么?
【问题讨论】:
标签: python machine-learning scikit-learn decision-tree