使用NumPy计算特征相关性提取特征时,出现numpy模块无corroef属性报错该如何解决
AttributeError报错修复方案
根因
触发AttributeError: module 'numpy' has no attribute 'corroef'的直接原因是NumPy方法名拼写错误,NumPy官方提供的皮尔逊相关系数计算方法为np.corrcoef,不存在拼写为corroef的接口。
除了拼写错误,原代码还存在3处逻辑bug,会在拼写修正后继续触发报错,需要同步调整:
- 特征名取值逻辑错误:原代码
feature_name = X_train[0]会直接读取DataFrame中列名为0的列数据,不是全量特征名列表,正确取法为feature_name = X_train.columns.tolist() - TopN特征选取逻辑错误:原代码将
np.argsort返回的相关值索引直接传入X_train.iloc做行切片,索引和行索引错位,根本没法正确取出高相关的特征名 - 变量重名风险:NaN替换的列表推导式中用了和外层特征循环重名的变量
i,容易引发作用域污染导致后续逻辑异常
修正后完整代码
cor_list = [] # 正确获取全量特征列名 feature_name = X_train.columns.tolist() print(feature_name) # 逐特征计算与训练集目标值的皮尔逊相关系数 for feat in feature_name: # 修正方法拼写错误:corroef -> corrcoef cor = np.corrcoef(X_train[feat], y_train)[0, 1] cor_list.append(cor) # 将常量特征导致的NaN相关值替换为0 cor_list = [0 if np.isnan(cor_val) else cor_val for cor_val in cor_list] # 按相关系数绝对值排序,取TopN个高相关特征 top_corr_pos = np.argsort(np.abs(cor_list))[-num_feats:] cor_feature = [feature_name[pos] for pos in top_corr_pos] return cor_feature
内容的提问来源于stack exchange,提问作者Roaa
相关产品推荐
相关产品推荐

