Как мне определить этот столбец в моем учебном наборе данных? - PullRequest
0 голосов
/ 27 февраля 2019

Я построил набор данных с двумя столбцами X и Y и использовал для этих данных подходящие модели порядков 1, 2 и 7. (показано в коде ниже).

Я хочу создать такой графикчто появляются только линии регрессии и исходные данные отображаются в виде черных точек рассеяния, однако, когда я строю график каждой подходящей модели, она получает и линию регрессии, и исходные данные в назначенном цвете.Это означает, что исходные точки разброса данных не выглядят черными, а легенда очень грязная.Как это исправить?

Кроме того, я хотел бы добавить прогнозируемые значения для каждого соответствия (порядки 1, 2 и 7) в качестве дополнительных столбцов в моем обучающем DataFrame.Какой самый эффективный способ сделать это?

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

X = np.linspace(0, 18, num=10)
Y = (0.05*X**2)+4*np.sin(X)+1.15*X+2*np.random.randn()

combi = {'X':X, 'Y':Y}
train = pd.DataFrame(combi)
print(train)

linear = np.polyfit(X, Y, 1)
linear_fn = np.poly1d(linear)
#linear_fn is now a function which takes in X and returns an estimate for Y
quadratic = np.polyfit(X, Y, 2)
quadratic_fn = np.poly1d(quadratic)
#quadratic_fn is now a function which takes in X and returns an estimate for Y
order7 = np.polyfit(X, Y, 7)
order7_fn = np.poly1d(order7)
#order7_fn is now a function which takes in X and returns an estimate for Y
plt.scatter(X,Y, color = 'black', label = 'Original Data')
plt.plot(X, Y, 'yo', X, linear_fn(X), '--k', color='red', label='Linear')
plt.plot(X, Y, 'yo', X, quadratic_fn(X), '--k', color = 'green', label='Quadratic')
plt.plot(X, Y, 'yo', X, order7_fn(X), '--k', color = 'purple', label='Order 7')
plt.title('Training Data - Fits')
plt.legend()
plt.show()

1 Ответ

0 голосов
/ 27 февраля 2019

Вы без необходимости повторно наносите исходные данные 3 раза, поэтому у вас есть повторяющиеся записи легенды.Сначала вы можете построить свои линии соответствия только , а затем в конце построить исходные данные только один раз .Таким образом, вы избавитесь от своих беспорядочных избыточных легенд и получите желаемые точки рассеяния черного цвета.

Я бы предложил опубликовать ваш второй вопрос, который не о matplotlib, а pandas, как отдельный вопрос.

plt.plot(X, linear_fn(X), '--k', color='red', label='Linear')
plt.plot(X, quadratic_fn(X), '--k', color = 'green', label='Quadratic')
plt.plot(X, order7_fn(X), '--k', color = 'purple', label='Order 7')
plt.scatter(X,Y, color = 'black', label = 'Original Data') # This line can also go first
plt.title('Training Data - Fits')
plt.legend()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...