19일차 내일배움캠프 개발일지

2022. 1. 6. 12:12개발일지/내일배움캠프 TIL

오늘은 무엇을 배웠을까요?

 

바로 알고리즘 강의 중 배열, 링크드 리스트와

머신러닝 강의 중

tensorflow, kaggle을 활용하여

선형회귀 실습 해보기를 진행했습니다.

 

링크드 리스트는 빅오표기법 O(N) 방식으로 특정 원소를 조회하는 것이 가능하며

중간에 삽입 또는 삭제를 할 경우 O(1) 방식으로 가능합니다.

Array의 경우 빅오 표기법은 위와 반대가 되겠습니다.

데이터를 추가하는 경우 모든 공간이 다 찼어도 맨 뒤의 노드만 동적으로 추가한다면 문제 없습니다.

Array의 경우는 새로운 메모리 공간을 할당받아만 합니다.

 

즉 데이터에 접근하는 경우가 빈번하다면 Array를,

삽입과 삭제가 빈번하다면 링크드 리스트를 사용하는 것이 바람직하겠지요.

 

근데 파이썬의 배열은 list 라고 부르는데 왜 그런 것일까요?

파이썬의 경우 내부적으로 동적 배열이라는 걸 사용해서

배열의 길이가 늘어나도 O(1)의 시간 복잡도가 걸립니다.

 

https://en.wikipedia.org/wiki/Dynamic_array

 

Dynamic array - Wikipedia

Several values are inserted at the end of a dynamic array using geometric expansion. Grey cells indicate space reserved for expansion. Most insertions are fast (constant time), while some are slow due to the need for reallocation (Θ(n) time, labelled with

en.wikipedia.org

 

그래서 파이썬의 배열은 링크드 리스트, 배열 두가지 모두로 쓸 수 있습니다.

(근데 링크드 리스트는 아닙니다. 이 부분은 조금 복잡하니 그냥 모두 쓸 수 있다고 생각하는게 좋겠습니다.)

 

https://colab.research.google.com/drive/1TN0zpxNsO7aeX6a0A39fJljlc8CiGNZv?usp=sharing 

 

1주차 머신러닝 숙제

Colaboratory notebook

colab.research.google.com

위 링크로 들어가면 제가 진행한 1주차 머신러닝 강의 숙제를 볼 수 있답니다.

처음 머신러닝 fit을 진행할 때 loss가 줄지 않아서 왜 그럴까 생각해보니

다른 방법으로 시도를 안 해봤더라구요.

 

model = Sequential([
  Dense(1)
])

model.compile(loss='mean_squared_error', optimizer=SGD(lr=0.01)) # mean_absolute_error, Adam, lr=0.1 등으로 바꿔 진행해볼것)

model.fit(
    x_train,
    y_train,
    validation_data=(x_val, y_val),
    epochs=100
)
 

주석 처리한 부분처럼 다양한 시도를 해보며 loss가 잘 줄어드는 지 확인하는 과정을 거치면서

공부를 했답니다.

 

오늘은 여기까지!

내일 볼 수 있다면 좋겠어요.

제발!~