Я пытаюсь создать линейную регрессию на графике рассеяния, который я сгенерировал, однако мои данные находятся в формате списка, и все примеры, которые я могу найти, polyfit
требуют использования arange
. arange
не принимает списки. Я много и мало искал, как преобразовать список в массив, и ничего не кажется ясным. Я что-то упускаю?
Далее, как лучше всего использовать свой список целых чисел в качестве входных данных для polyfit
?
вот пример полифита, которому я следую:
from pylab import *
x = arange(data)
y = arange(data)
m,b = polyfit(x, y, 1)
plot(x, y, 'yo', x, m*x+b, '--k')
show()
python
numpy
matplotlib
linear-regression
curve-fitting
Сиддхант Сараф
источник
источник
regplot
сseaborn
: stackoverflow.com/a/42263217/911945Ответы:
arange
генерирует списки (ну, массивы numpy); введитеhelp(np.arange)
подробности. Вам не нужно называть его в существующих списках.>>> x = [1,2,3,4] >>> y = [3,5,7,9] >>> >>> m,b = np.polyfit(x, y, 1) >>> m 2.0000000000000009 >>> b 0.99999999999999833
Я должен добавить, что я предпочитаю использовать
poly1d
здесь, а не писать «m * x + b» и эквиваленты более высокого порядка, поэтому моя версия вашего кода будет выглядеть примерно так:import numpy as np import matplotlib.pyplot as plt x = [1,2,3,4] y = [3,5,7,10] # 10, not 9, so the fit isn't perfect coef = np.polyfit(x,y,1) poly1d_fn = np.poly1d(coef) # poly1d_fn is now a function which takes in x and returns an estimate for y plt.plot(x,y, 'yo', x, poly1d_fn(x), '--k') plt.xlim(0, 5) plt.ylim(0, 12)
источник
Этот код:
from scipy.stats import linregress linregress(x,y) #x and y are arrays or lists.
выдает список со следующим:
Источник
источник
import numpy as np import matplotlib.pyplot as plt from scipy import stats x = np.array([1.5,2,2.5,3,3.5,4,4.5,5,5.5,6]) y = np.array([10.35,12.3,13,14.0,16,17,18.2,20,20.7,22.5]) gradient, intercept, r_value, p_value, std_err = stats.linregress(x,y) mn=np.min(x) mx=np.max(x) x1=np.linspace(mn,mx,500) y1=gradient*x1+intercept plt.plot(x,y,'ob') plt.plot(x1,y1,'-r') plt.show()
Использовать это ..
источник
from pylab import * import numpy as np x1 = arange(data) #for example this is a list y1 = arange(data) #for example this is a list x=np.array(x) #this will convert a list in to an array y=np.array(y) m,b = polyfit(x, y, 1) plot(x, y, 'yo', x, m*x+b, '--k') show()
источник
Еще один быстрый и грязный ответ - вы можете просто преобразовать свой список в массив, используя:
import numpy as np arr = np.asarray(listname)
источник