为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2021-11-23 20:03:06
我正在尝试使用带有 SelectKBest 包装器的mutual_info_regression 来进行一些特征选择。但是,我一直遇到一个错误,表明我的功能列表需要重新调整为 2D 数组,不太确定为什么我不断收到此消息-#feature selection before linear regression benchmark testimport sklearnfrom sklearn.feature_selection import mutual_info_regression, SelectKBestfeatures = 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,
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

转换器需要一个形状为 (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], 

                             'price':[190,100,50,100]

                            })


feature_arr = housing_data.drop('price', axis=1).values

target_values = housing_data['price']

打印feature_arr,你会希望看到你的问题。通常,您必须对数据进行预处理,例如删除 NaN 值或执行特征缩放。


查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信