使用mutual_info回归进行特征选择时重塑错误

我正在尝试使用带有 SelectKBest 包装器的mutual_info_regression 来进行一些特征选择。但是,我一直遇到一个错误,表明我的功能列表需要重新调整为 2D 数组,不太确定为什么我不断收到此消息-


#feature selection before linear regression benchmark test

import sklearn

from sklearn.feature_selection import mutual_info_regression, SelectKBest

features = list(housing_data[housing_data.columns.difference(['sale_price'])])

target = 'sale_price'

new = SelectKBest(mutual_info_regression, k=20).fit_transform(features, target)

这是我的回溯:


---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-18-8c778124066c> in <module>()

      3 features = list(housing_data[housing_data.columns.difference(['sale_price'])])

      4 target = 'sale_price'

----> 5 new = SelectKBest(mutual_info_regression, k=20).fit_transform(features, target)


/usr/local/lib/python3.6/dist-packages/sklearn/base.py in fit_transform(self, X, y, **fit_params)

    463         else:

    464             # fit method of arity 2 (supervised transformation)

--> 465             return self.fit(X, y, **fit_params).transform(X)

    466 

    467 


/usr/local/lib/python3.6/dist-packages/sklearn/feature_selection/univariate_selection.py in fit(self, X, y)

    339         self : object

    340         """

--> 341         X, y = check_X_y(X, y, ['csr', 'csc'], multi_output=True)

    342 

    343         if not callable(self.score_func):


/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)

    754                     ensure_min_features=ensure_min_features,

    755                     warn_on_dtype=warn_on_dtype,

--> 756                     estimator=estimator)

    757     if multi_output:

    758         y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False,

犯罪嫌疑人X
浏览 220回答 1
1回答

慕哥6287543

转换器需要一个形状为 (nxm) 的二维数组,其中 n 是样本数,m 是特征数,如果您查看features我想象的形状,它将显示:(m,).重塑数组一般来说,对于 shape 的特征数组(n,),您可以按照错误代码的建议进行操作并调用.reshape(-1,1)您的特征数组,-1 让它推断出额外的维度:数组的形状将为(n,m),其中对于 1 个特征案例m = 1。Sklearn 转换器综上所述,我认为您的代码和理解还有其他错误。我将打印features屏幕,并检查它是你想要的,它看起来像要打印列表,除了所有的列名sale_price。我不熟悉SelectKBest但它需要一个(n,m)特征数组而不是特征的列名列表。此外,target不应是目标列的名称,而是一个 shape 数组(n,),其值是训练实例的观察目标值。我建议您在编写代码时检查文档(以前参考过),以确保使用正确的参数并按预期使用函数。提取特征您的数据似乎采用奇怪的格式(字典嵌套在熊猫 DF 中)。然而,这是一个明确的例子,说明我如何pd.DataFrame从 SKlearn 框架中的函数中提取特征。housing_data = pd.DataFrame({'age': [1,5,1,10], 'size':[0,1,2,0],&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'price':[190,100,50,100]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })feature_arr = housing_data.drop('price', axis=1).valuestarget_values = housing_data['price']打印feature_arr,你会希望看到你的问题。通常,您必须对数据进行预处理,例如删除 NaN 值或执行特征缩放。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python