首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PythonM透镜系综: KeyError:“[Int64Index([.dtype=‘in 64’,length=105)]都不在[列]中。”

PythonM透镜系综: KeyError:“[Int64Index([.dtype=‘in 64’,length=105)]都不在[列]中。”
EN

Stack Overflow用户
提问于 2021-02-03 21:36:41
回答 1查看 170关注 0票数 0

下面是我得到此错误的代码的一个小版本: KeyError:“[Int64Index(.,dtype=‘in 64’)]没有列中”

“.”是一系列似乎与我的X和y数据格式的索引相匹配的数字。

我正在使用M透镜包在一个非常大的数据集中使用SuperLearner进行建模(因此可伸缩性很重要)。我的目标是使用dataframe结构而不是Numpy数组。这将解决下游问题。

到目前为止,我已经探索过this和其他相关的文章,但是解决方案似乎不适用于这里。

数据集是在这里作为.csv:<https://datahub.io/machine-learning/iris#data/找到的Iris数据集。

注意,自定义随机森林函数运行良好。但是镜头/超级学习者的错误。

代码语言:javascript
复制
from sklearn.ensemble import ExtraTreesClassifier, RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from mlens.ensemble.super_learner import SuperLearner
import numpy as np
import pandas as pd

df = pd.read_csv("/home/marktest/iris_csv.csv")
type(df)
N_FOLDS = 5
RF_ESTIMATORS = 100
RANDOM_STATE = 42
class RFBasedFeatureSelector(BaseEstimator):
  
    def __init__(self, n_estimators):
        self.n_estimators = n_estimators
        self.selector = None

    def fit(self, X, y):
        clf = RandomForestClassifier(n_estimators=self.n_estimators, random_state = RANDOM_STATE, class_weight = 'balanced')
        clf = clf.fit(X, y)
        self.selector = SelectFromModel(clf, prefit=True, threshold = 0.01)

    def transform(self, X):
        if self.selector is None:
            raise AttributeError('The selector attribute has not been assigned. You cannot call transform before first calling fit or fit_transform.')
        return self.selector.transform(X)

    def fit_transform(self, X, y):
        self.fit(X, y)
        return self.transform(X)
df.head()
X = df.iloc[:,0:3]                                    # split off features into new dataframe
y = df.iloc[:,4]                                     # split off outcome into new dataframe

X, X_val, y, y_val = train_test_split(X, y, test_size=.3, random_state=RANDOM_STATE, stratify=y)
from mlens.metrics import make_scorer
from sklearn.metrics import roc_auc_score, balanced_accuracy_score
accuracy_scorer = make_scorer(roc_auc_score, average='micro', greater_is_better=True)

clf = RandomForestClassifier(RF_ESTIMATORS, random_state=RANDOM_STATE,class_weight='balanced')
scaler = StandardScaler()
feature_selector = RFBasedFeatureSelector(RF_ESTIMATORS)
clf.fit(feature_selector.fit_transform(scaler.fit_transform(X), y), y)
accuracy_score(y_val, clf.predict(feature_selector.transform(scaler.transform(X_val))))

ensemble = SuperLearner(folds=N_FOLDS, shuffle=True, random_state=RANDOM_STATE, scorer=balanced_accuracy_score, backend="threading")

preprocessing = {'pipeline-1': [StandardScaler(), RFBasedFeatureSelector(RF_ESTIMATORS)]
                 
                }

estimators = {'pipeline-1': [RandomForestClassifier(RF_ESTIMATORS, random_state=RANDOM_STATE, class_weight='balanced'),                 
                                         ]
                 }

ensemble.add(estimators, preprocessing)

ensemble.add_meta(LogisticRegression(solver='liblinear', class_weight = 'balanced'))
ensemble.fit(X,y)```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 17:03:28

我认为问题出在shuffle=True。我也遇到了类似的问题,当设置为‘霉运=假’时,它将不再给出错误消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66036057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档