关于这个类似的问题,有好几篇帖子,但是没有一篇有我想要的答案。因此,我把这个新的帖子作为答案
问题是为什么所有分数都有NaN值
数据似乎很好
设置似乎很好
这可能是什么原因造成的?
这是我的数据框:
df.describe(include = "all")
TRXN_MONTH TRANSACTION_AMOUNT
count 598565.000000 5.985650e+05
mean 6.410199 2.457275e+07
std 3.446896 2.732986e+08
min 1.000000 2.000000e-02
25% 3.000000 1.823501e+04
50% 6.000000 1.649049e+05
75% 9.000000 1.318875e+06
max 12.000000 1.694837e+10
可变数据类型:
df.dtypes
TRXN_MONTH int64
TRANSACTION_AMOUNT float64
dtype: object
这是我的密码:
# Ensemble by stacking
estimator_list = [
('lof', LocalOutlierFactor(novelty=False, n_neighbors=20, contamination='auto')),
('iforest', IsolationForest(n_estimators=100, contamination='auto'))
]
ensemble = StackingClassifier(estimators=estimator_list, final_estimator=LogisticRegression(), cv=5)
# Set the number of folds and how parameter values are shuffled
kf = model_selection.KFold(n_splits=10, random_state=10, shuffle=True)
# Evaluate model using cross-validation
ensemble_cross_vald=model_selection.cross_val_score(ensemble, df_train[['TRXN_MONTH']].values, df_train[['TRANSACTION_AMOUNT']].values, cv=kf, n_jobs=-1, scoring='recall')
ensemble_cross_vald
以下是运行代码后的输出:
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])
我能够使用每个模型来拟合和预测:
y_pred = lof.fit_predict(df)
lofs_index = where(y_pred==-1)
lofs_index
(array([ 17, 43, 61, ..., 598553, 598561, 598562]),)
y_pred = iforest.fit_predict(df)
lofs_index = where(y_pred==-1)
lofs_index
(array([ 6, 14, 15, ..., 598549, 598556, 598561]),)
这里用于叠加的基本模型都不是分类器本身:都是异常值和/或异常检测算法;它们甚至不是受监督的模型,它们根本不使用标签
y
,正如您从它们各自的fit
文档中所看到的:对于LOF:
对于Isolation Forest:
不属于分类器(也不以任何方式涉及标签
y
),很明显,这些模型不能用于分类任务,不能单独使用,也不能作为堆叠模型的基本分类器,就像您在这里尝试做的那样。因此,召回度量的nan
值是预期的(因为从模型的角度来看,没有任何标签y
,因此实际上首先没有任何召回)相关问题 更多 >
编程相关推荐