我正在尝试预测下一位要购买我的客户的人。我遵循了指南,但是当我尝试使用cross_val_score()函数时,它将返回NaN值。Google Colab notebook screenshot
变量:
代码:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=50)
X_train = X_train.reset_index(drop=True)
X_train
X_test = X_test.reset_index(drop=True)
y_train = y_train.astype('float')
y_test = y_test.astype('float')
models = []
models.append(("LR",LogisticRegression()))
models.append(("NB",GaussianNB()))
models.append(("RF",RandomForestClassifier()))
models.append(("SVC",SVC()))
models.append(("Dtree",DecisionTreeClassifier()))
models.append(("XGB",xgb.XGBClassifier()))
models.append(("KNN",KNeighborsClassifier()))´
for name,model in models:
kfold = KFold(n_splits=2, random_state=22)
cv_result = cross_val_score(model,X_train,y_train, cv = kfold,scoring = "accuracy")
print(name, cv_result)
>>
LR [nan nan]
NB [nan nan]
RF [nan nan]
SVC [nan nan]
Dtree [nan nan]
XGB [nan nan]
KNN [nan nan]
请帮助我!
答案 0 :(得分:1)
我的情况有点不同。我使用 cross_validate
而不是 cross_val_score
与性能指标列表。做了一个 5 倍的 CV,我一直在为 RandomForestRegressor
的所有性能指标获得 NaN:
scorers = ['neg_mean_absolute_error', 'neg_root_mean_squared_error', 'r2', 'accuracy']
results = cross_validate(forest, X, y, cv=5, scoring=scorers, return_estimator=True)
results
事实证明,我愚蠢地包含了仅用于分类的“准确度”指标。而不是抛出错误,看起来 sklearn 只是在这种情况下返回 NaN
答案 1 :(得分:0)
非常感谢大家的回答。安娜的答案对我很有帮助!但是我没有使用X_train.values,而是为客户分配了唯一的ID,然后删除了“客户”列即可使用!
现在模型具有此输出:)
LR [0.73958333 0.74736842]
NB [0.60416667 0.71578947]
RF [0.80208333 0.82105263]
SVC [0.79166667 0.77894737]
Dtree [0.82291667 0.83157895]
XGB [0.85416667 0.85263158]
KNN [0.79166667 0.75789474]
答案 2 :(得分:0)
当数据集中存在空值时,cross_val_score
方法将返回NaN
。
要么使用可以处理缺失值的模型,要么从数据集中删除所有空值,然后重试。
答案 3 :(得分:0)
对于我来说,我的numpy数组中有一个时间增量数据类型,导致错误
答案 4 :(得分:0)
我面对这个问题。我是这样解决的;我将 X_train 和 y_train 转换为 DataFrame。
album_len = dict(
sorted(album_len.items(), key=lambda i: convert_to_datetime(i[1]),
reverse=True)
)
答案 5 :(得分:-1)
对于我使用 xtrain.values , ytrain.values 起作用,因为交叉验证需要输入是数组而不是数据框。