Python sklearn,如何在适当的维度中更改数组

Python sklearn,如何在适当的维度中更改数组,python,scikit-learn,Python,Scikit Learn,我正在使用sklearn做项目,我对多维数组和inproper索引有问题。这是我使用Python的第一个项目(对不起) 以下是代码: for classifier, classifier_name in classifiers: feature_results = [] for feature in feature_numbers: features = [x[0] for x in best_features[:feature]] train_s

我正在使用sklearn做项目,我对多维数组和inproper索引有问题。这是我使用Python的第一个项目(对不起) 以下是代码:

for classifier, classifier_name in classifiers:
    feature_results = []
    for feature in feature_numbers:
        features = [x[0] for x in best_features[:feature]]
        train_selected_features = X[:,features]
        rskf = RepeatedStratifiedKFold(n_splits=2, n_repeats=5)
        scores = []
        for train_index, test_index in rskf.split(train_selected_features, Y):
            X_train, X_test = train_selected_features[train_index], train_selected_features[test_index]
            y_train, y_test = Y[train_index], Y[test_index]
            test = train_selected_features[X_train]

            classifier.fit(train_selected_features[X_train], Y[y_train])

            scores.append(classifier.score(train_selected_features[X_test], Y[y_test]))
我有两个错误。第一个
ValueError:找到具有dim 3的数组。预计估计员使用以下方法:

import numpy as np

# build artificial X
x=[2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1 ,1 ,2 ,1 ,1 ,1 ,1]
X=[x for i in range(410)]
X = np.array(X)
X.shape
#(410, 20)

best_features = [(4, 112.95204710846082),
                 (17, 61.046858861185996),
                 (19, 55.064337711834064),
                 (2, 52.168346298312485),
                 (14, 50.004023585296),
                 (18, 41.96290891060357),
                 (12, 19.59769266560766),
                 (15, 14.883924792279542),
                 (6, 11.920742454442108),
                 (10, 11.062850868379167),
                 (13, 10.667800318033635),
                 (20, 10.667800318033635),
                 (11, 8.301076254737337),
                 (5, 8.078569220877426),
                 (7, 8.003708818567706),
                 (16, 7.794623436938262),
                 (9, 7.077799520283073),
                 (8, 5.867933581615914),
                 (3, 3.735103501864392),
                 (1, 1.7623125985633417)]

feature_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

classifiers = [
(MLPClassifier(hidden_layer_sizes=(20,), activation='relu'), 'MLP_20__relu'),
(MLPClassifier(hidden_layer_sizes=(100,), activation='relu'), 'MLP_100_relu'),
(MLPClassifier(hidden_layer_sizes=(200,), activation='relu'), 'MLP_200_relu'),
(MLPClassifier(hidden_layer_sizes=(20,),activation='identity' ), 'MLP_20_identity'),
(MLPClassifier(hidden_layer_sizes=(100,), activation='identity'), 'MLP_100_identity'),
(MLPClassifier(hidden_layer_sizes=(200,), activation='identity'), 'MLP_200_identity')]

# artificial Y
Y = np.arange(1,21)
Y = np.repeat(Y,21)
Y = Y[:410]

for classifier, classifier_name in classifiers:
    feature_results = []
    for feature in feature_numbers:
        features = [x[0] for x in best_features[:feature]]
        features = [i-1 for i in features]
        train_selected_features = X[:,features]
        rskf = RepeatedStratifiedKFold(n_splits=2, n_repeats=5)
        scores = []
        for train_index, test_index in rskf.split(train_selected_features, Y):
            X_train, X_test = train_selected_features[train_index], train_selected_features[test_index]
            y_train, y_test = Y[train_index], Y[test_index]
            test = train_selected_features[X_train]
            classifier.fit(X_train, y_train)
            scores.append(classifier.score(X_test, y_test))


请尝试改进格式。数据类型是numpy.array吗?我在这部分代码中不使用numpy,我使用Pandasy。您有很多问题。如果你做
X=np.array(X)
然后做
X.shape
你会得到什么?在这之后我得到(410,20)ok,现在我有相同的错误,但在下一行分类器中。fit(train_selected_features[X_train],Y[Y_train])我得到(410,20)错误值error:Found array with dim 3。估计器现在期望代码可以正常工作。考虑接受和支持我的回答。Cheeselsat错误抱歉,行内分数.append(分类器.score(train_selected_features[X_test],Y[Y_test]))错误值错误:找到了具有dim 3的数组。预计估计数
import numpy as np

# build artificial X
x=[2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1 ,1 ,2 ,1 ,1 ,1 ,1]
X=[x for i in range(410)]
X = np.array(X)
X.shape
#(410, 20)

best_features = [(4, 112.95204710846082),
                 (17, 61.046858861185996),
                 (19, 55.064337711834064),
                 (2, 52.168346298312485),
                 (14, 50.004023585296),
                 (18, 41.96290891060357),
                 (12, 19.59769266560766),
                 (15, 14.883924792279542),
                 (6, 11.920742454442108),
                 (10, 11.062850868379167),
                 (13, 10.667800318033635),
                 (20, 10.667800318033635),
                 (11, 8.301076254737337),
                 (5, 8.078569220877426),
                 (7, 8.003708818567706),
                 (16, 7.794623436938262),
                 (9, 7.077799520283073),
                 (8, 5.867933581615914),
                 (3, 3.735103501864392),
                 (1, 1.7623125985633417)]

feature_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

classifiers = [
(MLPClassifier(hidden_layer_sizes=(20,), activation='relu'), 'MLP_20__relu'),
(MLPClassifier(hidden_layer_sizes=(100,), activation='relu'), 'MLP_100_relu'),
(MLPClassifier(hidden_layer_sizes=(200,), activation='relu'), 'MLP_200_relu'),
(MLPClassifier(hidden_layer_sizes=(20,),activation='identity' ), 'MLP_20_identity'),
(MLPClassifier(hidden_layer_sizes=(100,), activation='identity'), 'MLP_100_identity'),
(MLPClassifier(hidden_layer_sizes=(200,), activation='identity'), 'MLP_200_identity')]

# artificial Y
Y = np.arange(1,21)
Y = np.repeat(Y,21)
Y = Y[:410]

for classifier, classifier_name in classifiers:
    feature_results = []
    for feature in feature_numbers:
        features = [x[0] for x in best_features[:feature]]
        features = [i-1 for i in features]
        train_selected_features = X[:,features]
        rskf = RepeatedStratifiedKFold(n_splits=2, n_repeats=5)
        scores = []
        for train_index, test_index in rskf.split(train_selected_features, Y):
            X_train, X_test = train_selected_features[train_index], train_selected_features[test_index]
            y_train, y_test = Y[train_index], Y[test_index]
            test = train_selected_features[X_train]
            classifier.fit(X_train, y_train)
            scores.append(classifier.score(X_test, y_test))