어제는 하루종일 정보화 본부에만 있었는데, 도서관 강의실에서 특강이 열린다고 해서 기대했다.
도서관 지하 1층 강의실이다. 처음 갔는데 아늑하고 좋다.
1강. 데이터분석 개요
전반적인 데이터 기초 설명이다.
Regression (회귀 )
회귀는 상관분석과 비교할 수 있다.
똑같은 데이터라도 목적에 따라 분석이 다르다.
상관분석은 변수 사이에서 상관 관계가 존재하는지를 알아보는 것이다. 상관계수를 알아내어 양의 상관관계인지, 음의 상관관계인지 무상관인지 알아낸다.
반면, 회귀는 두 관계의 함수를 구하는 것이다. 인과관계를 설명할 수 있다. 두 변수의 함수를 찾아서 예측까지 가능하다.
예시 1 ) 보스턴의 집값을 예측하라. (왼쪽 그래프) 집의 크기에 따라서 집값이 완전하게 결정되지는 않지만 어느 정도 의미 있는 예측이 가능하다.
예시 2 ) 연도별 북극 얼음의 크기를 예측하라. (오른쪽 그래프) 항상 예측은 일차함수의 모양을 가지지는 않는다. 초록색의 선을 보면 이차함수의 모양과 비슷하다.
복잡하게 차수를 높이면 좋은 모델이 될까? 그건 아니다. 오버피팅이 될 수도 있다.
Classification (분류 )
앞에서는 연속적인 값으로 정보를 나타냈다. 분류는 0 아니면 1인 정보를 나타낸 것이다.
암의 여부를 시각화한 그래프
예시 ) 암의 여부, iris 데이터 분류, 개인지 고양이인지 특히 이미지 분류 문제를 다룬 대회는 사람들이 관심도가 확 높아질 만큼 중요한 대회였다.
DNN을 통한 분류가 가장 성능이 좋다.
Clustering (군집화 )
군집화는 비슷한 특징을 가진 집합으로 묶는 방법이다. 분류와 비슷하지만 레이블의 차이가 있다.
클러스터링은 레이블이 없다
분류는 지도 학습(레이블 있음)이고 클러스터링은 비지도 학습(레이블이 없음)이다.
- 데이터의 정보가 없기 때문에 숨겨진 구조를 찾을 수 있다.
- K-Means Clustering
Deep learning
기계가 사람의 행동을 흉내내도록 하는 것이다. 경험과 데이터를 통해 학습한다.
- 딥러닝 : MLP, 뉴런 인공신경망을 사용한 학습 기법
- 딥러닝 성능이 우수하다.
* 전통적 프로그래밍과 머신러닝
개 / 고양이를 분류하는 문제를 예로 들어보자. input과 output이 다르다. 전통적인 방법으로는 개, 고양이 사진과 분류하는 프로그램을 넣는다. 하지만 머신러닝에서는 인풋으로 데이터와 결과(개인지 고양이인지)를 넣고, 기계가 알아서 학습하여 아웃풋으로 프로그램을 내놓는 것이다.
* 머신러닝 방식
기계학습은 training과 test의 과정으로 이루어져 있다.
- 지도학습, 비지도학습, 강화학습
- 강화학습은 사람과 닮았다. 알파고, 로봇 등에 쓰인다. 액션에 대한 결과 자체가 데이터가 된다. 경험을 토대로 학습한다.
- 준지도 학습 : 레이블이 있는 데이터를 만들기 위해서는 시간과 비용이 너무 많이 들기 때문에 일정 데이터만 레이블이 있는 학습이다. (예 : Proxy-label method)
2강. 데이터전처리
데이터 분석을 봤다면 뒷 부분은 분석할 수 있는 형태로 만들고 데이터에 관한 기본적인 내용을 다루도록 한다.
데이터 전처리를 이론적으로는 별 게 없다. 가장 많이 쓰이고 있는 pandas 라이브러리를 배웠다.
* 판다스의 특징 - 행렬 형태의 데이터 처리 - csv 많이 쓴다. 2차원 표 형태다. - 각각을 , 로 구분한다.
판다스 기초에 대해 배웠다. csv 데이터 받기, 열, 행 처리하기 등등 아주 기초적인 지식을 배웠다.
오후 일정
오후에는 코테를 풀고 프로그래머스 강의를 들었다.
오늘의 문제는 쉬워서 이것저것을 더 풀어봤는데 처음보는 정렬 문제가 나왔다.
제목은 스탈린 정렬이었다. 자기보다 낮은 수가 오른쪽에 있으면 지워버리는 문제였다.
찾아보니까 독재자 스탈린의 맘에 안들면 숙청하는 횡포를 따서 정렬 알고리즘의 이름이 붙여졌다.
ㅋㅋ 이름 잘 지은 것 같아서 웃겼다...
개념은 어렵지 않기에 시간 복잡도가 O(n) 이 나오게 풀었다. stack을 만들어서 stack의 맨 위에 있는 값과 비교하여 그것보다 큰 값만 stack에 넣었다.
프로그래머스 캠퍼스에서 수업도 들었다. Java 기초. 클래스와 배열에 관한 내용을 학습했다. 기초라 쉽게 들었지만 new String() 는 객체 생성 때 메모리에 참조되는 것이라
String str1 = new String("Hello");String str2 = new String("Hello");
str1 == str2 // false가 나온다는 것을 알았다. 그래서 String 클래스의 메소드 equals 를 사용해야 한다... 기초지만 배울 점이 많은 것 같다.