44_geojson-2
import warnings
warnings.filterwarnings('ignore')
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import time
row_n = len(df2.index)
col_n = len(df2.columns)
col_h = int(col_n/2)
incli_intercept = list()
for i in range(0,row_n):
#0~10사이의 난수 하나 생성
a=tf.Variable(tf.random_uniform([1],0,10,dtype=tf.float32))
#0~100사이의 난수 하나 생성
b=tf.Variable(tf.random_uniform([1],0,100,dtype=tf.float32))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
#print('a={}, b={}'.format(sess.run(a), sess.run(b)))
for j in range(1,21):
xData = new_df.loc[i][j]
yData = df2.loc[i][j]
y = a/xData + b
#평균 제곱근 오차 공식
rmse = tf.sqrt(tf.reduce_mean(tf.square(y-yData)))
sess = tf.Session()
#경사 하강법 알고리즘을 이용해서 RMSE를 최소로 하는 값을 찾는수식을 만든다.
#학습율을 정한다.
learning_rate = 0.1
#GradientDescentOptimizer(학습율)함수로 학습율에 따른 경사 하강
#알고리즘을 계산한다.
gradient_descent = tf.train.GradientDescentOptimizer(learning_rate).minimize(rmse)
sess.run(tf.global_variables_initializer())
for i in range(1051):
#gradient_descent에 연산결과가 아닌 수식이 들어가 있다.
sess.run(gradient_descent)
#if i % 200 ==0:
#Epoch => 한번 학습을 의미하는 용어,
#넘파이 배열(아래 예시의 경우'[]'안에 데이터가 하나 들어있다)에서
#서식을 지정해서 꺼내려면 [0]붙여줘야 한다.
#print('Epoch : {0:4d}, RMSE : {1:7.4f}, 기울기 : {2:7.4f}, y절편 : {3:7.4f}'
# .format(i, sess.run(rmse), sess.run(a)[0], sess.run(b)[0]))
#time.sleep(0.25)
incli_intercept.append([sess.run(a)[0], sess.run(b)[0]])
#경사하강법 실행후, 자치구별로 구한 기울기&절편값을 출력해본다.
leng = len(incli_intercept)
for i in range(leng):
print("지치구 : {0}, 기울기 : {1}, 절편 : {2}".format(df2.loc[i][0],incli_intercept[i][0], incli_intercept[i][1]))
지치구 : 종로구, 기울기 : 7.756473541259766, 절편 : 0.3182529807090759
지치구 : 중구, 기울기 : 2.289456844329834, 절편 : 0.784624457359314
지치구 : 용산구, 기울기 : 1.863206386566162, 절편 : 0.5738998651504517
지치구 : 성동구, 기울기 : 2.7437825202941895, 절편 : 0.7541283369064331
지치구 : 광진구, 기울기 : 0.9793703556060791, 절편 : 0.6251366138458252
지치구 : 동대문구, 기울기 : 5.23177433013916, 절편 : 0.6371681690216064
지치구 : 중랑구, 기울기 : 5.936285495758057, 절편 : 0.5261245965957642
지치구 : 성북구, 기울기 : -0.9613727927207947, 절편 : 0.7985848188400269
지치구 : 강북구, 기울기 : 5.965977191925049, 절편 : 0.3557838797569275
지치구 : 도봉구, 기울기 : 3.3908543586730957, 절편 : 0.642981767654419
지치구 : 노원구, 기울기 : -1.7002034187316895, 절편 : 0.7406853437423706
지치구 : 은평구, 기울기 : 5.352941513061523, 절편 : 0.5540100336074829
지치구 : 서대문구, 기울기 : 4.961416721343994, 절편 : 0.5014358758926392
지치구 : 마포구, 기울기 : 0.30287814140319824, 절편 : 0.6085236072540283
지치구 : 양천구, 기울기 : 0.5981001257896423, 절편 : 0.6911709308624268
지치구 : 강서구, 기울기 : 1.2118443250656128, 절편 : 0.634680986404419
지치구 : 구로구, 기울기 : 0.47866225242614746, 절편 : 0.688422441482544
지치구 : 금천구, 기울기 : 8.151782035827637, 절편 : 0.40845873951911926
지치구 : 영등포구, 기울기 : 1.1771764755249023, 절편 : 0.888277530670166
지치구 : 동작구, 기울기 : 9.039237022399902, 절편 : 0.37202876806259155
지치구 : 관악구, 기울기 : 6.237686634063721, 절편 : 0.43456652760505676
지치구 : 서초구, 기울기 : 0.49977564811706543, 절편 : 0.7380837202072144
지치구 : 강남구, 기울기 : 8.8569974899292, 절편 : 0.2942074239253998
지치구 : 송파구, 기울기 : 3.685990810394287, 절편 : 0.5663124322891235
지치구 : 강동구, 기울기 : 5.974305629730225, 절편 : 0.523023247718811
#경사하강법으로 학습한 기울기와, 절편의 값들을 불러오고
#실제 데이터와 비교해 본다.
leng = len(incli_intercept)
y_total = []
for i in range(leng):
a = incli_intercept[i][0]
b = incli_intercept[i][1]
xData = []
y_real = []
y_t=list()
for j in range(21,23):
xData.append(new_df.loc[i][j])
y_real.append(df2.loc[i][j])
for k in range(0,len(xData)):
y_t.append([round(y_real[k], 3), round(a/xData[k] + b, 3), round(abs(y_real[k]-(a/xData[k] + b))*100, 3)])
y_total.append(y_t)
res = pd.DataFrame(y_total)
idx = list(new_df['자치구별(1)'])
res.insert(0, '자치구', idx)
res.set_index('자치구', inplace=True)
res.columns = ['2020년 출산율_실제값_예측값_오차(%)',
'2021년 출산율_실제값_예측값_오차(%)']
res
2020년 출산율_실제값_예측값_오차(%) | 2021년 출산율_실제값_예측값_오차(%) | |
---|---|---|
자치구 | ||
종로구 | [0.522, 0.554, 3.201] | [0.531, 0.554, 2.301] |
중구 | [0.688, 0.854, 16.621] | [0.634, 0.854, 21.958] |
용산구 | [0.634, 0.63, 0.372] | [0.664, 0.629, 3.489] |
성동구 | [0.783, 0.838, 5.504] | [0.764, 0.837, 7.29] |
광진구 | [0.527, 0.655, 12.841] | [0.525, 0.655, 13.022] |
동대문구 | [0.699, 0.799, 9.989] | [0.66, 0.798, 13.79] |
중랑구 | [0.66, 0.708, 4.85] | [0.65, 0.708, 5.766] |
성북구 | [0.676, 0.769, 9.332] | [0.656, 0.769, 11.345] |
강북구 | [0.55, 0.539, 1.149] | [0.541, 0.535, 0.552] |
도봉구 | [0.601, 0.747, 14.6] | [0.579, 0.747, 16.768] |
노원구 | [0.695, 0.688, 0.663] | [0.701, 0.688, 1.271] |
은평구 | [0.623, 0.717, 9.421] | [0.604, 0.716, 11.222] |
서대문구 | [0.685, 0.654, 3.137] | [0.635, 0.652, 1.655] |
마포구 | [0.594, 0.618, 2.374] | [0.587, 0.618, 3.066] |
양천구 | [0.644, 0.71, 6.557] | [0.645, 0.71, 6.452] |
강서구 | [0.675, 0.672, 0.292] | [0.617, 0.672, 5.48] |
구로구 | [0.737, 0.703, 3.394] | [0.737, 0.703, 3.405] |
금천구 | [0.668, 0.661, 0.677] | [0.612, 0.658, 4.575] |
영등포구 | [0.705, 0.925, 21.967] | [0.713, 0.924, 21.117] |
동작구 | [0.655, 0.648, 0.654] | [0.602, 0.648, 4.646] |
관악구 | [0.474, 0.629, 15.519] | [0.437, 0.627, 18.979] |
서초구 | [0.656, 0.753, 9.723] | [0.666, 0.753, 8.705] |
강남구 | [0.537, 0.561, 2.398] | [0.523, 0.559, 3.599] |
송파구 | [0.665, 0.68, 1.473] | [0.623, 0.678, 5.501] |
강동구 | [0.748, 0.706, 4.172] | [0.797, 0.705, 9.183] |
댓글남기기