为什么Scikit-learn RFECV为训练数据集返回非常不同的功能?

哈皮达兹

我一直在对波士顿数据集进行RFECV实验。

到目前为止,我的理解是要防止数据泄漏,仅对训练数据而不是对整个数据集执行此类活动很重要。

我仅对训练数据进行了RFECV,它表明14个功能中的13个是最佳的。但是,我随后对整个数据集进行了相同的处理,这次,这表明只有6个要素是最佳的-似乎更有可能。

为了显示:

import numpy as np
import pandas as pd

from sklearn.model_selection import train_test_split
from sklearn.feature_selection import RFECV
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston

### CONSTANTS
TARGET_COLUMN = 'Price'
TEST_SIZE = 0.1
RANDOM_STATE = 0

### LOAD THE DATA AND ASSIGN TO X and y
data_dict = load_boston()
data = data_dict.data
features = list(data_dict.feature_names)
target = data_dict.target

df = pd.DataFrame(data=data, columns=features)
df[TARGET_COLUMN] = target

X = df[features]
y = df[TARGET_COLUMN]

### PERFORM TRAIN TEST SPLIT
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=TEST_SIZE, 
random_state=RANDOM_STATE)

#### DETERMINE THE DATA THAT IS PASSED TO RFECV
## Just the Training data
X_input = X_train
y_input = y_train

## All the data
# X_input = X
# y_input = y

### IMPLEMENT RFECV AND GET RESULTS
rfecv = RFECV(estimator=LinearRegression(), step=1, scoring='neg_mean_squared_error')
rfecv.fit(X_input, y_input)

rfecv.transform(X_input)

print(f'Optimal number of features: {rfecv.n_features_}')
imp_feats = X.drop(X.columns[np.where(rfecv.support_ == False)[0]], axis=1)
print('Important features:', list(imp_feats.columns))

执行以上操作将导致:

Optimal number of features: 13
Important features: ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT']

现在,如果更改代码以使RFECV适合所有数据:

#### DETERMINE THE DATA THAT IS PASSED TO RFECV
## Just the Training data
# X_input = X_train # NOW COMMENTED OUT
# y_input = y_train # NOW COMMENTED OUT

## All the data
X_input = X  # NOW UN-COMMENTED
y_input = y  # NOW UN-COMMENTED

并运行它,我得到以下结果:

Optimal number of features: 6
Important features: ['CHAS', 'NOX', 'RM', 'DIS', 'PTRATIO', 'LSTAT']

我不明白为什么整个数据集的结果与训练集相比有如此显着的差异(并且看起来更准确)。

我试图通过使test_size很小(通过我的TEST_SIZE常量)来使训练集接近整个数据的大小,但是我仍然觉得这似乎不太可能。

我想念什么?

托比·佩蒂

当然,这似乎是意外的行为,尤其是当您可以将测试大小减小到10%甚至5%并发现相似的差异时,这似乎非常违反直觉。理解这里发生的事情的关键是要意识到对于这个特定的数据集,每一列中的值不会在行中随机分布(例如,尝试运行X['CRIM'].plot())。train_test_split您使用的是分割数据函数有一个参数shuffle默认为True因此,如果您查看X_train数据集,您会发现索引杂乱无章,而索引X是顺序的。这意味着当类在幕后执行交叉验证时RFECV,它将在每次拆分时获取有偏差的数据子集。X,但每个的拆分中的数据更具代表性/随机性X_train如果您通过shuffle=Falsetrain_test_split则会看到两个结果更加接近(或者,或者可能更好,请尝试将的索引改组X)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么scikit-learn silhouette_score会为1个群集返回错误?

来自分类Dev

如何使用scikit-learn训练/扩展非常大的数据集?

来自分类Dev

scikit-learn:如何使用两个不同的数据集作为训练集和测试集

来自分类Dev

使用scikit-learn训练多维数据

来自分类Dev

仅基于网格分数的Scikit-Learn RFECV功能数量

来自分类Dev

如何使用scikit Learn确保测试集和训练集具有相同的功能?

来自分类Dev

在给定相同输入的情况下,为什么scikit-learn中的SVC上的GridSearchCV会产生不同的概率?

来自分类Dev

当我使用Scikit-Learn Keras模型函数时,对于相同的网络配置,为什么会有不同的精度结果?

来自分类Dev

在给定相同输入的情况下,为什么scikit-learn中的SVC上的GridSearchCV会产生不同的概率?

来自分类Dev

对于不同规模的训练数据,哪种是最好的scikit-learn机器学习算法?

来自分类Dev

具有不同功能的不同内核-scikit-learn SVM

来自分类Dev

删除scikit Learn中的特定功能

来自分类Dev

scikit-learn:如果在进行一次热编码后其功能少于训练/测试集,则如何预测新数据

来自分类Dev

scikit-learn ExtraTreesClassifier-为什么泡菜文件这么大?(数GB)

来自分类Dev

为什么scikit-learn的随机森林使用这么多内存?

来自分类Dev

为什么我们用sklearn导入scikit-learn?

来自分类Dev

为什么scikit-learn truncatedSVD默认使用“随机化”算法?

来自分类Dev

为什么带有铰链丢失的SGDClassifier比scikit-learn中的SVC实现要快

来自分类Dev

为什么Anaconda中的scikit-learn在“ validation_curve”类型签名中显示cv =“ warn”?

来自分类Dev

为什么在导入Scikit-learn软件包时出现错误?

来自分类Dev

scikit-learn ExtraTreesClassifier-为什么泡菜文件这么大?(数GB)

来自分类Dev

为什么在scikit-learn中没有定义“ model.fit”?

来自分类Dev

Python scikit-learn:为什么我的 LinearRegression 分类器的分数这么低?

来自分类Dev

Scikit-Learn中的分类数据转换

来自分类Dev

无法使用scikit-learn导入“数据集”

来自分类Dev

使用scikit-learn生成困难分类数据集

来自分类Dev

无法使用scikit-learn导入“数据集”

来自分类Dev

在 csv 数据集上使用 Scikit-learn

来自分类Dev

管道中的Scikit-Learn FunctionTransformer没有其他功能-不返回原始数据?

Related 相关文章

  1. 1

    为什么scikit-learn silhouette_score会为1个群集返回错误?

  2. 2

    如何使用scikit-learn训练/扩展非常大的数据集?

  3. 3

    scikit-learn:如何使用两个不同的数据集作为训练集和测试集

  4. 4

    使用scikit-learn训练多维数据

  5. 5

    仅基于网格分数的Scikit-Learn RFECV功能数量

  6. 6

    如何使用scikit Learn确保测试集和训练集具有相同的功能?

  7. 7

    在给定相同输入的情况下,为什么scikit-learn中的SVC上的GridSearchCV会产生不同的概率?

  8. 8

    当我使用Scikit-Learn Keras模型函数时,对于相同的网络配置,为什么会有不同的精度结果?

  9. 9

    在给定相同输入的情况下,为什么scikit-learn中的SVC上的GridSearchCV会产生不同的概率?

  10. 10

    对于不同规模的训练数据,哪种是最好的scikit-learn机器学习算法?

  11. 11

    具有不同功能的不同内核-scikit-learn SVM

  12. 12

    删除scikit Learn中的特定功能

  13. 13

    scikit-learn:如果在进行一次热编码后其功能少于训练/测试集,则如何预测新数据

  14. 14

    scikit-learn ExtraTreesClassifier-为什么泡菜文件这么大?(数GB)

  15. 15

    为什么scikit-learn的随机森林使用这么多内存?

  16. 16

    为什么我们用sklearn导入scikit-learn?

  17. 17

    为什么scikit-learn truncatedSVD默认使用“随机化”算法?

  18. 18

    为什么带有铰链丢失的SGDClassifier比scikit-learn中的SVC实现要快

  19. 19

    为什么Anaconda中的scikit-learn在“ validation_curve”类型签名中显示cv =“ warn”?

  20. 20

    为什么在导入Scikit-learn软件包时出现错误?

  21. 21

    scikit-learn ExtraTreesClassifier-为什么泡菜文件这么大?(数GB)

  22. 22

    为什么在scikit-learn中没有定义“ model.fit”?

  23. 23

    Python scikit-learn:为什么我的 LinearRegression 分类器的分数这么低?

  24. 24

    Scikit-Learn中的分类数据转换

  25. 25

    无法使用scikit-learn导入“数据集”

  26. 26

    使用scikit-learn生成困难分类数据集

  27. 27

    无法使用scikit-learn导入“数据集”

  28. 28

    在 csv 数据集上使用 Scikit-learn

  29. 29

    管道中的Scikit-Learn FunctionTransformer没有其他功能-不返回原始数据?

热门标签

归档