2017-04-19 74 views
0

我是一個Python和機器學習的新手。我試圖使用梯度下降法(也許線性迴歸),以從溫度和時間序列圖的得到的斜率在python 2.7像下面有沒有什麼辦法可以用python的梯度下降法得到時間序列的斜率?

enter image description here

我越來越溫度和時間值從OpenTSDB,而時間值最初出現與unix時間,但我把它用像下面

TIME = time.localtime(float(_time)); 
stime = '%4d/%02d/%02d %02d:%02d:%02d' % (TIME.tm_year, TIME.tm_mon, TIME.tm_mday, TIME.tm_hour, TIME.tm_min, TIME.tm_sec); 

有什麼方法讓上述使用梯度下降曲線的斜率改變爲字符串?

我試着用這個教程https://anaconda.org/benawad/gradient-descent/notebook,但不起作用,給了我一個尷尬的斜率答案。

編輯

def plot_line(y, data_points): 
     x_values = [i for i in range(int(min(data_points))-1, int(max(data_points))+2)] 
     y_values = [y(x) for x in x_values] 
     plt.plot(x_values, y_values, 'b') 

def summation(y, x_points, y_points): 
    total1 = 0 
    total2 = 0 

    for i in range(1, len(x_points)): 
     total1 += y(x_points[i]) - y_points[i] 
     total2 += (y(x_points[i]) - y_points[i]) * x_points[i] 

    return total1/len(x_points), total2/len(x_points) 

    m = 0 
    b = 0 
    y = lambda x : m*x + b; 

    learn = 0.1; 
    for i in range(5): 
    s1, s2 = summation(y, timenum_list, temperature_list) 
    m = m - learn * s2 
    b = b - learn * s1 

    print m; 
    print b; 

    plt.plot(timenum_list, temperature_list, 'bo') 
    title('Time vs Temperature') 
    xlabel('Time') 
    ylabel('Temperature') 

我用梯度下降的上述功能,但沒有很好地工作。

timenum_list是unix時間的列表。 temperature_list是溫度的列表。

回答

1

漸變下降是尋找函數極值(最小值或最大值)的一種算法,問題在於,您沒有函數。你所擁有的是一系列點數。現在,你可以嘗試以適應多項式你的觀點和計算該函數的導數,但可能不會太準確,因爲你的數據是「顛簸」,否則你將不得不使用高多項式。

第二個選項是線性插值:用普通的詞,取兩個點並在它們之間擬合一條直線,並計算該直線的斜率。

真正的問題是:你首先需要做什麼?

+0

感謝您的回答,那麼我可能會使用你的第二個選項什麼建議。 :'( – paulc1111

+0

出於好奇 - 你想用坡度做什麼?我們可能會想到一個更好的解決方案;) –

+0

嗯......我想分析時間和溫度之間的斜率值,以及什麼樣的關係是否有人在房間裏或沒有。 :)我剛剛完成繪圖插值。現在,我必須採取兩個點或所有點​​找出斜率值:'( – paulc1111

相關問題