Не вычисляется параметр линейной регрессии

Я решил разобраться с линейной регрессией на каком-то реальном примере. Для этого я скачал csv-файл, в котором приведены данные о температуре для некоторых городов для каждого месяца с 1850 года по 2015. https://data.world/data-society/global-climate-change-data/workspace/file?filename=GlobalLandTemperatures%2FGlobalLandTemperaturesByMajorCity.csv Чтение файла, вычисление среднегодовой температуры происходит нормально. Но есть проблема с вычислением параметра линейной регрессии w. Он равен nan. В итоге линию регрессии не получается построить. Можете подсказать в чем ошибка? Заранее спасибо!

import matplotlib.pyplot as plt
import csv
import tensorflow as tf
import numpy as np

tf.compat.v1.disable_eager_execution()

def search_stat(start_year,finish_year):
  csv_path="GlobalLandTemperatures_GlobalLandTemperaturesByMajorCity.csv"
  with open(csv_path, encoding='utf-8', newline='') as csv_file:
    csvreader = csv.reader(csv_file)
    array= []
    end_year= str(finish_year)
    temperature=0
    n=-1

    #row[0]- столбец с датами в формате YYYY-MM-DD
    #row[1]- столбец с среднемесячными значениями температуры
    #row[3]- столбец с названиями городов
    for row in csvreader:
      if (row[3]== 'Abidjan') and (start_year<=(int((row[0])[:4]))) and not 
      (row[0].startswith(end_year)):
            if (row[1]!='') and (row[1]!=','):
                temperature=float(row[1])
                array.append(temperature)
                n+=1
            else:
                array.append(array[n])
                  n+=1
      if (row[0].startswith(end_year)):
             return array

def avr_tem_array(start_year,finish_year):
     array=[] #список со значениями температуры в каждом месяце
     array= search_stat(start_year,finish_year)
     i=0
     sum=0
     k=0
     result_array=[]
     months=(finish_year-start_year)*12
     while(i<months):
         sum+=array[i]
         if k==11:
             result_array.append(sum/12) #средняя температура за год 
             sum=0
             k=0
             i+=1
             continue
         i+=1
         k+=1
     print(array)
     return(result_array)

array= []
array= avr_tem_array(1965,1995)#среднегодовые значения температуры 1965-1995
print(array)               

years=np.arange(1965.0,1995.0)
learning_rate=0.01
learning_epochs=100

X=tf.compat.v1.placeholder(tf.float32)
Y=tf.compat.v1.placeholder(tf.float32)

def model(X,w):
    return tf.compat.v1.multiply(X,w)

w= tf.compat.v1.Variable(0.0, name='weights')# параметр регрессии
y_model=model(X,w)
cost=tf.square(Y-y_model)

main_fun=tf.compat.v1.train.GradientDescentOptimizer(learning_rate)
.minimize(cost)  

sess=tf.compat.v1.Session()
init=tf.compat.v1.global_variables_initializer()
sess.run(init)

for epoch in range(learning_epochs):
    for (x,y) in zip(years,array):
        sess.run(main_fun, feed_dict={X: x, Y: y})

w_learned=sess.run(w) #вычисляем окончательное значение линейной регрессии
                   #оно оказывается равным nan
sess.close()
y_lerned=w_learned*years #все значения y_learned оказываются равными nan
print(years)
print(w_learned)
print(y_lerned)
plt.scatter(years,array)
plt.plot(years,y_lerned) #построение линии регрессии
plt.show()

Ответы (0 шт):