[KISA] 빅데이터·AI기반 악성코드 특징 추출(1일차) - 심화 1차
서론부터 떠들어 보도록 하겠습니다!!
2019년 6월 21일
한국 인터넷 진흥원이 주관한
2019년 2분기 사이버 보안 빅데이터 활용 공유 세미나를 시작으로
사이버보안 빅데이터 교육이
활성화 되었어요~
저는
6월 21일 세미나에 참가한 후
교육에 대한 내용을 알게되었구
당시에는 DGA부터 시작해서
알아들을 수 있는 내용이 반도 없었네요..
무룩,,ㅠ
전공이 빅데이터나 인공지능이 아니니까
당연한거겠죠?ㅎ
긍정!
블록체인 같은 경우도
전공은 아니지만 컨퍼런스를
다녀온 이후 디앱이나 스마트컨트렉트,
블록체인 생태계 등에 대해
약간은 시야가 트인 부분도 있어요~
모든분야를 다 할 수는 없지만
대강 말하면 무슨말인지는
알아듣고 싶은 욕심이 있네요 ㅎ
저는
사이버보안 빅데이터 분석의 이해 공통과정 1차를 듣고
활용과정은 연구팀 워크숍이 있어서 신청을 못했어요.
그리고 심화과정 1차를 신청해서
오늘 듣고 왔습니다.
강의 진행은
공통과정 1차때와 동일하게
흥미랩의 서준석 대표님께서
해주셨습니다.
잘생기셨고,
목소리가 크고 또렷해서
말 전달이 잘되는 점이
강사님의 큰 장점이네요.
친절한거는 덤이구요 ㅎ
심화과정 1차는
7월 29일~31일
10시~18시로
총 24시간 진행됩니다.
그럼 오늘(첫날)한 내용을
볼까요?
1. 주제 및 목표
먼저
3일동안의 목표 : 악성코드에서 특징을 뽑고 분석해서 가공하고 머신러닝 모델에 넣어서 탐지하는 것
마지막 3일차 오후 : 미니 챌린지를 진행!!
핵심주제 : 뉴럴네트워크와 딥러닝
시작부터 부들부들하네요..
우리는 인터넷에 없는 내용을 다룹시다.
나는 어디, 여기는 누구..?
초점은 이 데이터가 실제로 도움이 되는 데이터인가??입니다.
판단하는게 생각?보다 어렵습니다
2. 사이버 보안분야의 빅데이터 예시
1) 악성코드
2) 트래픽
3) 단순히 들어오는 것이 아닌 새로운 위협정보
4) 공격에 사용된 서버와 공격패턴
크게 4가지로 나눌 수 있지만
이 강의에서는 악성코드에
초점을 둡니다.
※ 활용과정의 내용일부
1) 데이터과학이란?
[1] 데이터와 관련된 실제 현상을 이해하고 분석하기 위한 통계학,
[2] 데이터분석 및 머신러닝 기술을 통합하는 개념
으로 정의됩니다.
2) 데이터과학에 필요한 기술은?
[1] 프로그래밍 능력
[2] 수학과 통계학
[3] 도메인 지식/경험(현업에서 부딪히면서 배우지 않는 이상 불가능)
[4] 최적의 알고리즘, 효율성(나중문제)
요약을 해보자면
데이터를 가져오고 분석하고 결과를 낼 수 있을정도면 됩니다.
허나, 경험이 없다면 실제 데이터에서 어떤 정보가 더 중요한 것인지 판단하기가 어려워요.
3) 빅데이터란?
[1] 양이 많다?
[2] 실제 조직에서 필요하다.
[3] 다양하다.
[4] 유입속도가 빠르다.
[5] RDBMS에서 처리할 수 없는 다양성과 양
즉, 굉장히 많은 데이터에서
의미가 있는 데이터를 추출하는 것을 말합니다.
실제로 인터넷에서 튜토리얼이 많이 있고
데이터셋을 전부제공하는
곳이 많습니다.
그러나
어떻게 데이터를 가져와야하고?
어떻게 만들어야 하는지!!!
이 부분이 여기서 다를 초점이랍니다.
좀 더 자세히 들여다 볼까요?
비정형데이터(xml, json 등)를
어떻게 사용해야하는지
악성코드, 패킷(헤더규격에 맞게 캡슐화는 되어있지만 단편화하거나..)
로그분석(찍어주는 프로그램 마음, apache, windows로그 등등)
3. 데이터 형식
1) 숫자
2) 문자
딱 두가지 입니다.
예를 들어 방문횟수와 같이 1, 2, 3 ..
키와 같이 연속적으로 이어지는 수 이외에는
모두 문자입니다.
여기서 중요한거 잡고 갑시다!!
만약? TCP(1), UDP(0)
[1] 1
[2] 0
[3] 1
[4] 0
이렇다면 수치형일까요?
이것은 숫자가 수치를 의미하지 않기 때문에
범 주 형 데이터에 속하게 됩니다.
카테고리형 데이터도 마찬가지구요.
실제로 학습할 때 컴퓨터는 수치라는 크기를 가지고 그 의미에 따라
데이터를 분류합니다.
이렇게하면 결과가 잘 나올 경우에
더 위험?한 아이러니한 상황이 벌어지죠~
쉽게 말하면,
1번학생이 10점
2번학생이 50점
3번학생이 100점
이라고 가정해볼까요?
그런데 결과는 빠른번호 일수록 시험을 잘 못본다?
라는 빠른번호 섭섭하게 만드는 결론이 나오네요..?
즉, 1, 2, 3은 숫자로 보면 안된다는 말입니다.
결론은
내가 기대한 자료형이랑 컴퓨터가 원하는 자료형이랑
일치하는지 먼저 확인을 해야 한다는 점입니다.
4. 데이터 분석 프로세스
분석하기에 앞서
목표수립 - 데이터 수집 - 데이터 저장 - 데이터 처리 - 데이터 모델링
의 절차를 이해해야 합니다.
1) 목표는 위에서 세웠고,
2) 데이터 수집은 크롤링이나 정상적인 파일을 구해야 하지만
정상적인 파일이라하면 자료실에 있는 것은
전부 설치파일이지 실행파일이 아니기 때문에
정상적인 파일 구하는 것이 생각보다 어려워요.
3) 악성코드도 종류는 많지만 굉장히 많은 속성을 가지고 있고,
실전에 배치할만한 성능을 내려면 군집을 토대로 모으는 것이
좋은 결과를 보장합니다.
아무리 알고리즘이 좋아도 데이터가 꼬지면 답이 없어요!!!!!!
4) 좋은 모델을 만들기 위해서는!! 두둥
여기서 뽑힌 정보가 무엇인지?, 여기서 중요한 피쳐가 무엇인지 알아야 합니다.(전처리)
5) 모델은 있는 것은 기반으로 씁니다.
그러나 누구는 좋고, 누구는 밥값도 못하는..?
당연히 악성코드를 이해하는 정도에 따라 추후 결과가 달라질 수 있죠
중요한 정보가 무엇인지 알기 때문에~
5. 머신러닝와 인공지능
파이썬으로 짜면 머신러닝,
피피티로 만들면 인공지능
이렇게 부르는 이유가 있을까요?
사람들은
인공지능은 로봇이라고 말합니다.
그 과정에는
1) 인지
↓
2) 처리([1] 추론, [2] 패턴)
↓
3) 행동
이 있습니다.
조금 자세히 알아보겠습니다.
1) 인지
횡단보도의 신호등이 파란불로 바뀐지 확인하는 것과 같습니다.
2) 처리
여러분은 한 발 내딛을 때 어떤발부터 몇도만큼 보폭은 얼마나 내딛을지 생각하시나요?
그러나 인공지능은 이런 것까지 고려해서 움직여야 합니다.
[1] 추론
지금 상황에서 가장 최적의 해를 찾는 것을 말합니다.
수우우많은 해 중에 하나! (알고리즘)
그래서 4년제 대학교에서는
자료구조를 배우고 알고리즘을 배우고 인공지능을 배운답니다.
[2] 패턴
실제 생산된 데이터를 많이 가지고 와서 보는 것을 말합니다.
알파고가 어디에 바둑을 놓을지 생각(=추론)할 수 있지만,
직접 돌려보면 이랬더니 이기고 저랬더니 지고...
데이터를 가지고 분석[복기]을 할 수 있습니다.
보안분야의 방어쪽은 패턴을 많이쓰고,
공격쪽은 주로 추론을 사용합니다.
우리는 3일간
악성코드 데이터를 들고 분석하는
패턴을 공부할 계획입니다.
지금 제가 연구하고 있는 프로젝트 중 하나가
바이너리 취약점을 자동으로 찾아주는 것인데
CGC말씀하기면서 살짝 언급해주시네요.
조금 설명을 보태면
상용프로그램의 분기문은 거의 무한대에 가깝습니다.
취약점을 찾아서 인공지능이 공격한다?
경우의 수도 많고, 해가 있는지 없는지도 모릅니다.
그래서 많은 공격자들이 불가능할 것이라고 예상을 했습니다.
그러나 약간의 사고를 전환해서
"해를 찾지 못하니까 되는 것만 찾아보자"로
관점을 바꾸었습니다.
인공지능 | 보안 | |
취약점 | 20% | 80%(프로그램 분석, 조사, 정보추출) |
악성코드 | 40% | 60%(악성코드에 대한 이해도) |
결국 인공지능 보안을 하기 위해서는
인공지능도 알아야하고 보안도 알아야 한다는 결론이 나왔죠.
패턴부분 == 머신러닝?
이유는 수많은 데이터로 학습하기 때문입니다.
악성코드 탐지모델을 만든 후 이것을 인공지능이라고 부르려면?
새롭게 등장하는 변종도 찾아내야하고,
그러기 위해서는
!!!
샘플이 변경되면 모델을 재학습시켜주어야 합니다.
인공지능 스피커도 듣고(인지)
해석해서 뭐가필요한지 처리하고(처리)
다시 결과를 말해줍니다.(행동)
while, for문을 사용한다고 모두 자동화는 아닙니다.
인공지능과 자동화의 차이는
변화하는 주변황경을 받아들이고 처리하면서 자동화를 하면 인공지능이 됩니다.
취약점을 찾는 솔루션에 automate 등의 단어가 붙는데
이 경우 프로그램 상태를 인지해서 취약점이 발생하는 조건을 찾으면
익스플로잇을 합니다.
6. 머신러닝과 딥러닝
딥러닝의 뉴럴네트워크를 제외한
모든 알고리즘은 정해져있다.
SVM, Random_forest는
다양한 분야에서 좋은 결과를 꺼낸 것입니다.
수학적으로나, 통계적으로나...
이 말은
저같은 사람이 변경한다고해서 더 좋아질 가능성이
매애애우 희박하다는 말이겠죠?
그렇다면 뉴럴네트워크는?
조립하는 방식에 따라 다릅니다.
기존에 머신러닝으로 해결 불가능한 것까지
해결이 가능합니다.
= 딥러닝
딥러닝은 머신러닝의 부분집합이지만,
조립하는 방식에 다르기 때문에 하나의 공학으로
자리잡게 되었습니다.
뉴럴네트워크는 머신러닝의 수많은 방법 중
하나입니다.
기계가 학습을 하려면 데이터에서 패턴을 찾아야하고,
패턴인식 == 머신러닝
패턴을 인식하고, 결과를 내는 것의 차이지만
위에서도 말했지만 같은 말로 보아도 좋다.
추가로 데이터 마이닝은
데이터 안에서 자동적으로
규칙이나 패턴을 찾아주는 분야를
말합니다.
7. 머신러닝의 유형
머신러닝은 삽질이다!!!
라는 말이 있네요..
1) 지도학습(Supervised)
[1] Regression
쉽게말해 집 주변의 술집의 개수를 넣어주면
집 값을 꺼내줍니다.
(술집의 개수와 집값 사이의 관계에서 x에 대한 y를 반환)
[2] Classification
악성데이터와 정상데이터를 넣으면
이 둘을 분류해주는 선을 긋습니다.
이것은 데이터가 있고
그것에 대한 정답이 있는 경우 가능합니다.
패킷의 경우 정답이 없어요.
인터넷 연결이 안돼도 패킷이 나오고,
이게 악성인지 정상인지 누가 언제 다 분류할까요?
2) 비지도학습(Unsupervised)
[1] Clustering
군집을 모아서 분류해 줍니다.
큰 패턴 2개가 있을 경우 등
머신러닝 = 인지 + 처리, 변화하는 상황을 계속 머신에게 넣어줍니다.
3) 강화학습
앞으로만 가는 행동은 좋지 않고,
악당이 왔을 때 점프,
죽지 않고 계속가면 상점,
죽으면 벌점,
죽지 않기 위해 노력하도록!!
머신러닝은 선긋기입니다.
클러스터링도 동그라미지만 선이구요.
선 긋는 것에 따라 결과가 달라지고,
그 선은 모델이 됩니다.
8. 머신러닝 이해하기
컴퓨터가 데이터를 학습하게 해주려면?
형식에 맞는 데이터를 넣어주어야 합니다.
챗봇이 어떻게
사람말을 알아듣고 말을 할까요?
내가 챗봇을 만들고 구현했을 때는
이런생각을 하지 못했죠...
그래서 그런지
질문을 듣고
대답을 하지 못했습니다.
프로그램이 악성코드인지 아닌지를 구별하는 방법은
컴퓨터에게 알려주어야 합니다.
단지 악성코드는 파일이고,
컴퓨터 입장에서는 연속된 바이트스트림일 뿐이고요.
자율주행자동차도 영상을 찍을 것이고,
영상은 이미지의 모임이고,
그 이미지는 컴퓨터입장에서 그냥 바이트스트림입니다.
그래서 정보를 뽑아서 주어야 합니다.
이 헤더는 이미지다!! 라고
분류만 잘하면 그 뒤는 굉장히 쉽습니다.
API를 넣고 돌리기만 하면 됩니다.
9. 머신러닝 이해하기
현재 인터넷에서 돌아다니고 있는
대부분의 악성코드를 탐지하는 과정은
이미 만들어진 데이터셋으로 진행합니다.
그래서 분류알고리즘의 이해, 클러스터링 이해, 모델평가
등의 사용하는 방법에만 초점인 경우가 존재합니다.
처음에도 말했지만
데이터에서 누락된 것이 있는지,
특징을 뽑고, 선별하고,
도움이 되는 것만 확인하고,
안 좋으면 변경하고,
이 부분이 중요합니다.
예를 들어
새와 강아지
두 분류로만 나뉜다고 가정해봅시다.
사진이 있는데
날개가 있어? 없어?로
새인지 강아지인지 구별이 가능할까요?
당연히 있습니다!!
그러나 내 강아지가
너어어어무 예뻐서
천사날개 달아주면?
과연 두군두군..!!
모델은 천사날개 옷 입은 강아지를
새라고 판별합니다.
즉, 예외가 발생한다는 것입니다.
판별 시 날개 색과 몸 색이 같아?
등의 판별기준을 추가해 줍니다.
API를 가져다가 쓰면 됩니다.
그게 왜 잘돌아가는지,
못 돌아가는지,
SVM, 뉴럴네트워크를 사용한다면
API의 장단점을 알고 사용해야 합니다.
우리가 흔히
리버싱은 삽질의 학문이라고 하죠?
답은 있지만 가기 어려운 것..
머신러닝은 더 삽질의 학문입니다.
왜냐하면 아는만큼 보이기 때문입니다.
얼마만큼 해야하는지도 모르고,
당연히 정답도 모르고요.
쉽게 말해
내가 충분히 했지만,
나보다 더 전문가가 올 경우에 더 좋은 결과가 나오고,
그래서 더 이상은 나올게 없어!!
라고 할 때까지 돌려야 하기 때문에
더 삽질의 학문이라고 합니다.
10. 머신러닝 프로세스
뉴럴네트워크 모델을 배제하고
보통은
전처리에 90
모델구축에 10
비율로 시간을 투자합니다.
이 말은
좋은 데이터를 선별해서
넣어주어야한다는 말이랍니다.
누구나 API를 쓸 수 있지만
누구는 판단에 도움이 되지 않는 데이터를
누구는 도움이 되는 데이터를
사용하기 때문에
결과가 다르게 나옵니다.
딥러닝(뉴럴네트워크)의 경우는
뚜껑을 열어서 공구를 변경 가능한 것이라고 보면 됩니다.
모터, 건전지 등등...
그래도 전처리를 해야하긴 하지만
모델을 튜닝하는 부분에도 신경을 써야한다는 말이지요
전처리에 50, 모델구축에 50
반반 비율로 투자하는게 좋습니다.
실습으로 가기 전,
jupyter 실행방법
1) shift + enter = 실행 후 커서 다음으로
2) ctrl + enter = 실행 후 그대로
3) alt + enter = 실행 후 코드공간 추가 생성
마지막에 적은 변수는 출력을 해줍니다.
데이터 분석할 때는 블록단위로 확인을 해야합니다.
마크다운(cell - cell type - mark down)
# 과 함께 사용하면 이쁜주석이 됩니다.
악성코드가 달라져도 추출하는 소스는 동일합니다.
즉, 소스를 잘 만들어 놓으면 좋습니다.
쥬피터의 단점은?
무겁고 웹이기 때문에
딜레이(엄청나게 복잡한 내용을 돌리면)가 있거나
뻗습니다.
11. 뉴럴네트워크와 비뉴럴네트워크
뉴럴네트워크는
API만 가져다 쓰는 것 말고
선을 연결해서 쓰거나 하는 부분 등의
수학적인 공식을 다 알아야 합니다.
비뉴럴네트워크는
수학적인 알고리즘을 알면 좋지만,
몰라도 크게 문제가 되지는 않습니다.
1) Linear Regression = 선형회귀
y = mx + b
와우, m은 기울기, b는 y절편입니다.
어디서 많이 보던 공식 아닌가요?
맞습니다!!
우리는 학습되어 있으니까 점을 따라 선을 그리지만,
컴퓨터는 점이 있지만 선을 어떻게 그려야할 지는 모릅니다.
컴퓨터에게는 단순하게 x와 y의 조합일 뿐입니다.
모델이라고 하면 m값과 b값을 찾는 것을 말합니다.
1차방정식이니 선을 긋는 것도 맞는 말이네요.
x는 데이터를 의미하고,
y는 데이터에 해당하는 값입니다.
그러면 과연 어떻게
선 긋는 것을 학습시킬까요?
1) 아무렇게나(초기화)
2) 비용계산
3) 조정
조금 풀어서 설명하면
1) 랜덤하게 m과 b를 넣고 그립니다.
2) 실제 x에 해당하는 y값이랑 랜덤하게 그린 선의 차이를 확인합니다.
절대값의 차이가 크다는 말은 실제 데이터와 거리가 멀다는 소리이고,
비용(실제 데이터와의 거리)을 최소화하기 위해
3) 조금씩 조정합니다.
만약 Regression이 아니고
Classfication이라면?
검은색과 빨간색 영역을 잘 나눌 수 있는 선을 찾는다.
1) 아무렇게나 긋고
2) 비용계산 대신 / 정답과 맞추어 볼까요?
(비율 = 검정색 몇 개, 빨간색 몇개)
3) 조정합니다.
1) 2) 3)이 가능한 이유는?
정답이 있기에 가능합니다.!!!!
12. 데이터 분석 시 필요한 것
1) import numpy as np
2) import pandas as pd
3) import matplotlib.pyplot as plt
row는 한 줄이 하나의 객체를 의미[ex) 한 명의 고객]하고,
column은 각 속성을 의미합니다.
1) numpy
row * column = 로우 바이 컬럼이라고 불러요.
분석 시에 row와 column을 동등하게 놓고
분석하는 것이 좋습니다.
그래서 numpy를 쓰지만,
column정보가 없고, row번호도 없다는
단점이 있습니다.
그래서
2) pandas
column에 이름이 있고,
row에도 이름이 있습니다.
아무래도 numpy보다는 무겁겠죠?
3) matplotlib
(매틀랏라이브)
numpy와 pandas로 만든 자료형을
시각화로 보여줍니다.
몽고디비, 엘레스틱서치, nosql과 같은 것은
RDBMS와 같이 나오지 않습니다.
그래서 헤더에 맞게 파싱을 해주어야 합니다.
뽑는 방법은 2일차에 진행하고,
오늘은 뽑았다고 가정하고
사전에 주어진 데이터를 가지고
분석을 하네요.
데이터를 csv로 저장하는 이유를
알고계시나요?
가장 적은 용량으로
많은 데이터를 저장하기 때문입니다.
엔터로 row, 쉼표로, column만 구분하지요.
잠깐 옆길로 세볼까요?
올해 9월에 데이터챌린지 대회가 열립니다.
trainset이 제공되고
트레인 셋으로 만든 결과를 제출해서
testset과 비교합니다.
1000개가 있으면 800개 정도만 모델을
충분히 학습하고 그 선으로 200개 정도를
테스트합니다.
그리고 결과가 잘 나오면
잘 만들어진 모델이 됩니다.
그러나 알아야 할 것은
운 없게도 뒤에 200개가 800개와
차이가 심한 데이터라면
문제가 있을 수 있겠죠?
이 부분은 내일
다룹니다.
어쨋든 가장 중요한 것은
학습 데이터를 만드는 과정입니다.
df.shape = row * column을 알려줍니다.
보통 재일 끝 컬럼에 정답지를 넣어 놓습니다.
15개의 column이 있을 때
처음에 ID빼고 정답지를 빼면
13개의 column만 사용이 가능합니다.
최적의 경로와 최적의 조합을 넣어서
학습을 해야하지만,
학습할 때는 x_train과 y_train으로 학습을 해서
모델을 만들고,
x_test를 모델에 대입해서 오차를 구하고
이 오차가 성능이며,
y_pred라고 부릅니다.
이것과 y_test를 비교하는 방식입니다.
데이터의 특징을 많이 쓰고 싶은 마음은 알지만
많은 특징을 계산하려면 최소한의 데이터 개수가 필요합니다.
즉, 다 쓸 수 없습니다.
도움이 되지 않는 특징이 들어가면 오히려 성능이 떨어질 수도 있습니다.
실제로 그렇게 나오구요.
그래서 요약해보면?
1) 개수는 최소한으로!!
2) 그 중 좋은 column을 선별
어떤컬럽이 좋은지 그림을 그려보면
그림이 안그려지는 경우가 있습니다.
이유는 future가 2개면 이미 2차원이기 때문에
2차원 이상은 그림으로 그리지 못해서
에러가 발생합니다.
13. Future Engineering
(특징공학)
피쳐엔지니어링은
굉장히 중요한 부분입니다.
특징공학에 대해
간단히 정의해보자면?
처음 보는 데이터에 대해서
모델의 정확도를 향상시켜주는 방법을
말합니다.
즉, 좋은 특징은 유연성을 제공하고,
더 단순한 모델을 사용하고,
더 좋은 결과를 뱉어내지요.
특징공학 프로세스는
관찰 -> 전처리 -> 추출 or 구현 -> 변환 -> 선택
의 순서를 가지고 있습니다.
조금 천천히 볼까요?
Random Forest에 던져놓으면
도움이 되는 속성을 추출해줍니다.
추출된 속성을
절대적인 기준으로 볼 수는 없지만
10개 중에 3개를 골라야한다면?
여기있는 속성을 고르는게
조금은 낫지 않을까요?
< 추출(parsing) >
데이터가 너무 많은 정보를 들고 있다면,
특징만 뽑아서
그냥 파싱을 하는 겁니다.
예를 들면
파형 -> 주파수,
이미지 -> 경계선정보
등 처럼 말이지요.
< 구현(processing) >
직접 특징을 추출하는 방법으로
헤더의 의미까지 생각해서 파싱을 합니다.
조금 상세하게 적어볼까요?
1) 데이터 그대로(raw data)
2) 데이터 형식(exe면 exe에 맞게 파싱)
3) 통계값(수치)을 가지고 뽑기(경향 값을.. 특수한 경우에)
4) 도메인 지식을 가지고 뽑기(보안의 악성코드 등의 지식을 활용)
이 경우 높은 정확도를 가져다 줍니다.
결국 많이 알아야 된다는 말이겠죠?
고를 때 주의할 점을
말씀드리죠~
예를 들어
첫 번째 팀의 경우
데이터 모델링을 할 때
100개만 뽑아놓고
그 중에 선별하는 팀과
두 번째 팀의 경우
악성코드에서 뽑을 수 있는 특징은
싸그리 다 뽑고,
이후 선별하고 선택하는 팀이
있습니다.
뽑을 때는 개인적인 생각 배제하고
싸그리 긁어서 뽑고,
선택!!
할 때는 실제 결과에 도움이 되는
특징들만 선별하고
그 중에서 최소한의 column으로~
도움이 되지 않는 특징은
과감히 거르는 것이
모델의 복잡도를 감소시키고
모델을 단순화하도록 도와줍니다.
14. Future Engineering의 변환방법
예를 들어
프로그램의 섹션이름을 뽑았지만
컴퓨터는 문자를 모릅니다.
즉,
숫자로 바꿔주거나 문자로 바꾸거나
해야한다는 말이지요.
이것을 One-Hot incoding이라고 부릅니다.
조금 풀어서 설명하면
유일한 개수만큼 특징을 추가하고,
각 특징을 0또는 1로 표시합니다.
예를 들어
1 - [1, 0, 0, 0]
2 - [0, 1, 0 ,0]
3 - [0, 0, 1, 0]
4 - [0, 0, 0, 1]
이렇게 바꿀 수 있지요
원핫인코딩의 목표는
성능이 좋은 적은 속성을
추출하는 것입니다.
패커의 타입은 굉장히 많습니다.
몇백개에서 몇천개정도 되겠지요?
악성코드라는 도메인을 생각해보면
특징이 많더라도 넣어야 한다는 것입니다.
저의 경우
악성코드 자동분석 솔루션을
만드는 프로젝트를 하고 있습니다.
그 중
동적분석을 하고나면 report에
악성코드의 행위를 분석하는
behavior 섹션이 들어 있는데
이 섹션 안에 행위를 분석한 내용이
담겨있었습니다.
그러나 너무 길고
악성코드별로 길이도 천차만별입니다.
그렇다고 버리자니
중요한데이터 같구요..
그래서 우선
데이터를 들고가기로 했고
원핫인코딩을 하는데
자세한 방법은 아직 고민 중입니다.
아!! 물론
이제 막 걸음마를 뗀
제가 원핫인코딩을 하지는 않고
다른팀원이 하고있어요.
이제
특징을 선택해야하는데
통계학에서 사용하는 방법을 사용하는 것이 좋습니다.
분석을 하고 선택을 하는
기본통계학을 알아야겠죠?
15. 통계
통계란 현상을 분석하는 것을
말하지요.
머신러닝은 선을 긋죠..
통계와 머신러닝 모두
데이터에서 의미를 찾는 학문이라는 점은
동일합니다.
의미를 바탕으로 어떠한 결정을 하겠죠?
단, 통계학에서는 분석이 끝이고,
머신러닝은 선까지 그어줍니다.
많은 머신러닝들이
내부적으로 알고리즘 설계할 때 통계학
기반으로 설계하고 있습니다.
16. 데이터의 중심경향
1) 평균값의 경우
극단값이 있다면 문제가 있겠죠?
2) 중간값의 경우
오름차순 정렬 후 가운데 값
2, 3, 4, 5, 100, 300, 500 중
가운데 값은 5네요?
조금 문제가 있어보이죠..
3) 최빈값의 경우
데이터에서 가장 많이 나타나는 값을
말하는데요
군집이 2개이거나 근소하게 같은 수 있는
문제가 있네요..
하루에 한 양이 너무많고
실습내용도 있지만
내일 또 들으러 가야하기 때문에
이만 자고 내일 작성하겠습니다.
'Participation' 카테고리의 다른 글
케이쉴드주니어 3기 입교식 (0) | 2019.08.14 |
---|---|
WISET 공학연구제팀 연구팀 워크숍[서울] (0) | 2019.08.14 |
케이쉴드주니어 3기 지원후기 (0) | 2019.08.13 |
World IT SHOW 2019 (0) | 2019.04.27 |
12th CODEGATE 2019 (0) | 2019.04.27 |
댓글