python中的rfecv.fit()不接受我的x和y参数

Posted

技术标签:

【中文标题】python中的rfecv.fit()不接受我的x和y参数【英文标题】:rfecv.fit() in python not accepting my x and y arguments 【发布时间】:2021-12-25 14:44:26 【问题描述】:

我真的是 Python 新手,所以我不知道很多基础知识,但我有一份必须用 Python 完成的大学报告,我正在努力弄清楚如何解决我的代码中的问题。

首先,我为 X 和 y 创建了训练数据,然后将其转换为 pandas DataFrame,以便我可以从 statsmodels 中调用 ols 作为我的初始模型。现在我想使用 rfe 来减少我的模型,我从 RFECV 开始,这样我就可以确定我希望 RFE 选择多少特征。但每次我运行代码时,我都会遇到 rfecv.fit() 的问题。

这是我的代码:

'''

from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
pipe = make_pipeline(StandardScaler())
pipe.fit(X_train, y_train)

#recombine training dataset in order to call ols
X_train_df = pd.DataFrame(X_train)
y_train_df = pd.DataFrame(y_train)
traindata = pd.concat([X_train_df.reset_index(drop=True), y_train_df.reset_index(drop=True)], axis=1)


#create first linear model
from statsmodels.formula.api import ols
model1 = ols('Tenure ~ Population + Children + Age + Income + Outage_sec_perweek + Email + Contacts + Yearly_equip_failure + MonthlyCharge + Bandwidth_GB_Year + Area_Suburban + Area_Urban + Marital_Married + Marital_Never_Married + Marital_Separated + Marital_Widowed + Gender_Male + Gender_Nonbinary + Churn_Yes + Contract_One_Year + Contract_Two_Year', data=traindata).fit()
print(model1.params)

#RFECV to determine number of variables to include for the optimal model
from sklearn.svm import SVC
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_selection import RFECV

svc = SVC(kernel="linear")
rfecv = RFECV(estimator = svc, step = 1, cv = StratifiedKFold, scoring = "accuracy")
rfecv.fit(X_train_df, y_train_df)

'''

输出错误如下所示: TypeError: Singleton array array(None, dtype=object) 不能被认为是一个有效的集合。

任何帮助或资源将不胜感激!谢谢

【问题讨论】:

尝试打印您的 X_train_df 和 y_train_df 并检查它们的外观 【参考方案1】:

你需要传递cv = StratifiedKFold()而不是cv = StratifiedKFold,所以下面的方法可以工作:

rfecv = RFECV(estimator = svc, step = 1, cv = StratifiedKFold(), scoring = "accuracy")

或者如果你想要 10 折(默认为 5):

rfecv = RFECV(estimator = svc, step = 1, cv = StratifiedKFold(n_splits=10), scoring = "accuracy")

您可以从this 或this 等帖子中查看有/没有括号之间的区别。

【讨论】:

以上是关于python中的rfecv.fit()不接受我的x和y参数的主要内容,如果未能解决你的问题,请参考以下文章

线程中的类型错误。函数接受 x 位置参数,但给出了 y

QListView 不接受使用 Python PyQt4 在 QMainWindow 中的丢弃

为啥我的屏幕管理器不接受 .kv 文件中的所有屏幕?

Python是世界上贼好的语言,不接受反驳

熊猫(Python)中的“反合并”

Python lambda不接受元组参数[重复]