Невозможно построить 2 класса в линейном дискриминантном анализе в Python с использованием sklearn

#python #scikit-learn

#python #scikit-learn

Вопрос:

Спасибо, что прочитали мой вопрос — я был бы очень признателен за любой вклад!

В настоящее время я работаю над проблемой LDA в Python — я немного новичок в ML, так что это может быть одной из причин, почему я столкнулся с этой проблемой. Несмотря на это, вот оно:

У меня проблема с классификацией, для краткости мы будем называть это T и не-T. У меня есть фрейм данных с именем PODall, который содержит мои данные и их метки (0 (не-T) против 1 (T)).

Я использовал модуль sklearn LDA для выполнения этого анализа. Я могу получить точность классификации и т. Д., Просто не могу фактически отобразить мои данные для визуализации.

Я позаимствовал код из https://sebastianraschka.com/Articles/2014_python_lda.html#principal-component-analysis-vs-linear-discriminant-analysis , чтобы иметь возможность визуализировать мои данные, а именно функцию построения графика:

 X_lda_sklearn = sklearn_lda.fit_transform(X, y)

def plot_scikit_lda(X, title):

    ax = plt.subplot(111)
    for label,marker,color in zip(
        range(1,4),('^', 's', 'o'),('blue', 'red', 'green')):

        plt.scatter(x=X[:,0][y == label],
                    y=X[:,1][y == label] * -1, # flip the figure
                    marker=marker,
                    color=color,
                    alpha=0.5,
                    label=label_dict[label])

    plt.xlabel('LD1')
    plt.ylabel('LD2')

    leg = plt.legend(loc='upper right', fancybox=True)
    leg.get_frame().set_alpha(0.5)
    plt.title(title)

    # hide axis ticks
    plt.tick_params(axis="both", which="both", bottom="off", top="off",  
            labelbottom="on", left="off", right="off", labelleft="on")

    # remove axis spines
    ax.spines["top"].set_visible(False)  
    ax.spines["right"].set_visible(False)
    ax.spines["bottom"].set_visible(False)
    ax.spines["left"].set_visible(False)    

    plt.grid()
    plt.tight_layout
    plt.show()
plot_step_lda()
plot_scikit_lda(X_lda_sklearn, title='Default LDA via scikit-learn')

 

Когда я запускаю это, я получаю сообщение об ошибке, что X является одномерным массивом, и, следовательно, X[:,1] ошибки.

Если я добавлю еще один класс, т. Е. «pre-T», «T» и «post-T», я смогу построить эту визуализацию.

Если мне нужно прояснить мою проблему, пожалуйста, дайте мне знать!!

Спасибо!

~ CJ

Комментарии:

1. Что вы получите, если напечатаете X, прежде чем передавать его в функцию?

2. До этого фрагмента кода sklearn_lda = LDA() X_lda_sklearn = sklearn_lda.fit_transform(X,y) X имеет размеры (2506,56). Итак, я подгоняю X и y к модели, и то, что возвращается, является одномерным массивом, следовательно, откуда берется моя ошибка в графике.

3. Но LDA() должен возвращать массив numpy, подобный этому (n_samples, n_features). Почему вы получаете одномерный массив?

4. Вот где я в замешательстве.