본문 바로가기
2023 활동 - 4학년/[1월 ~ 4월] sw 아카데미 백엔드 과정

[2023.01.03 / CNU SW 아카데미] 특강.데이터분석 및 AI 기초1

by 은행장 노씨 2023. 1. 3.

 

오전 10시에 양희철 교수님의 특강이 있었다.

어제는 하루종일 정보화 본부에만 있었는데, 도서관 강의실에서 특강이 열린다고 해서 기대했다. 

 

도서관 지하 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 를 사용해야 한다... 기초지만 배울 점이 많은 것 같다.