2016-02-03 4 views
0

Я не могу создать правильную линию регрессии. Мое значение a1 должно быть положительным, но оно отрицательно. Если я пропущу часть маски, то мои значения a1, b1, c1 станут NaN.как построить линию регрессии

kwargs = dict(delimiter = '\t',\ 
     skip_header = 0,\ 
     missing_values = 'NaN',\ 
     converters = {0:matplotlib.dates.strpdate2num('%d-%m-%Y %H:%M')},\ 
     dtype = float,\ 
     names = True,\ 
     ) 

ratingcats = np.genfromtxt('C:\Users\ker\Documents\Discharge_and_stageheight_Catsop.txt',**kwargs) 

dis_rat = ratingcats['discharge'] #change names of collumns 
stage_rat = ratingcats['stage'] 

#create regression line and mask NaN 
dis_ratM = np.ma.masked_array(dis_rat,mask=np.isnan(dis_rat)).compressed() 
stage_ratM = np.ma.masked_array(stage_rat,mask=np.isnan(dis_rat)).compressed() 

a1,b1,c1 = polyfit(dis_ratM, stage_ratM, 2) 

discharge_pred = polyval([a1,b1,c1],stage_ratM) 

print (a1,b1,c1) 

#create scatterplot 

matplotlib.pyplot.scatter(stage_rat,dis_rat,color='red',label='Rating curve') 
matplotlib.pyplot.plot(stage_ratM,discharge_pred,'r-',label='regression line') 
matplotlib.pyplot.show() 
+0

Вы могли бы предоставить свои входные данные для тестирования? – CoMartel

+0

В чем проблема? Является ли полифитовая кривая плохой? Вероятно, NaN происходит потому, что вы рассматриваете missing_values ​​как NaN. –

+0

@HarryPotfleur да, я могу, но ушел большой, как я могу предоставить вам данные? –

ответ

1

Пройдя ваш код во второй раз, я заметил, что аргументы для polyfit находятся в неправильном порядке. Подпись polyfit - numpy.polyfit(x, y, deg).

Попробуйте использовать

a1,b1,c1 = polyfit(stage_ratM, dis_ratM, 2) 

(Обратите внимание на выгружена порядок stage_ratM и dist_ratM) и посмотреть, если он работает в настоящее время.

+0

Спасибо, сейчас это намного лучше, но все равно не хорошо. Похоже, что есть еще несколько строк, а «a1, b1, c1» все еще не звучат. Точка линии регрессии состоит в том, что существует только одна строка? Мой файл данных огромен (полмиллиона значений) был самым «dis_rat» равным нулю, но может соответствовать нескольким значениям «stage_rat». Кажется странным для меня, это проблема? Вот график: http: //i.stack.imgur.com/kvrvS.png –

+0

@ToineKerckhoffs ah yes, сортируйте данные в соответствии с координатами x (т.е. stage_ratM) перед графикой. (В частности, вы можете использовать numpy.argsort для получения отсортированных индексов, а затем использовать эти индексы для сортировки dis_ratM и stage_ratM еще до вызова полифита.) И попробуйте построить его с разными цветами для линии регрессии и точек разброса, так что ясно, что есть. –

+0

извините, я не понимаю вторую часть , как я могу использовать индексы для сортировки dis_ratM и stage_ratM? –

Смежные вопросы