Как я могу построить график рассеяния и построить линию предсказания для двух объектов в Python? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь предсказать y, основываясь на двух функциях, хранящихся в X. После прочтения файла Excel и разделения моих данных на столбцы мое значение X выглядит следующим образом:

     SibSp  Parch
0        1      0
1        1      0
2        0      0
3        1      0
4        0      0
5        0      0
6        0      0
7        3      1
8        0      2
9        1      0

y обозначает выживаемость, 1 выжил, 0 умер. Х имеет много много больше строк. Я использую train_test_split(X, y, test_size=0.4, random_state=101) для обучения и тестирования разбивки данных и у меня есть метод обучения и тестирования. Мой тренировочный код выглядит так:

def train():
    # Get Data Split
    X_train, X_test, y_train, y_test = initData()

    # Create LinearRegression Instance
    lm = LinearRegression()

    # Fit Training Values
    lm.fit(X_train,y_train)

    visualise(X_test, y_test, lm.predict(X_test))

    # Return Trained Data With Testing Data
    return X_test, y_test, lm

Мой тестовый код выглядит так:

def test():
    # Get The Trained Classifier
    X, y, lm = train()

    # Fit New Values
    lm.fit(X, y)

    visualise(X, y, lm.predict(X))

Что, похоже, работает нормально - или я так думаю. Сейчас я пытаюсь визуализировать данные в виде точечной диаграммы с графиком линии предсказания.

def visualise(X, y, predictions):
    features = X.shape[1]
    colors   = ['red', 'blue']
    i        = 0
    while i <= features -1:
        plt.scatter(X.iloc[:, i], y, color=colors[i])
        # Update: Forgot to add this line when posting question
        plt.plot(X.iloc[:, i], predictions, color=colors[i])
        i=+1

Но это дает мне сумасшедшие результаты с линиями, идущими повсюду. Я попытался посмотреть онлайн и нашел пример sklearn . Это я пытаюсь повторить это:

Я подумал, что, возможно, из-за того, что у меня есть две функции, мне может понадобиться идентифицировать их отдельно.

def visualise(X, y, predictions):
    newY = np.zeros(X.shape[0], X.shape[1]);
    newY[:, 0:1] = newY.iloc[:, 0]
    plt.scatter(X, y, color='blue')
    plt.plot(X, predictions, color='red')

    plt.xticks(())
    plt.yticks(())

    plt.show()

Мне пришлось создать массив newY, так как у X есть две особенности, у y было 1, поэтому формы были разными. Но сейчас я получаю сообщение об ошибке newY = np.zeros(X.shape[0], X.shape[1]);

TypeError: тип данных не понятен

Обновление

def visualise(X, y, predictions):
    newY = np.zeros((X.shape[0], X.shape[1]));
    newY[:, 0] = y
    newY[:, 1] = y
    plt.scatter(X, newY, color='blue')
    plt.plot(X, predictions, color='red')

Теперь исправляет ошибку, но это мой вывод:

enter image description here

Как я могу построить график рассеяния и построить линию для моих прогнозов?

1 Ответ

0 голосов
/ 08 января 2019

Поскольку у вас есть две функции, вы не можете нарисовать линию предсказания. Во всяком случае, вы, вероятно, хотите построить контурный прогноз.

Ваш пример намного больше похож на этот двухфункциональный пример здесь https://scikit -learn.org / стабильный / auto_examples / SVM / plot_iris.html

...