1. Linear Regression 란?
하나 이상의 독립변수로부터 종속변수의 값을 선형으로 모델링하는 것. 로지스틱회귀분석은 분석하고자 하는 대상들이 두 집단 혹은 그 이상의 집단(다변수 데이터)으로 나누어진 경우에 개별 관측치들이 어느 집단으로 분류될 수 있는가를 분석하고 이를 예측하는 모형을 개발하는데사용되는 대표적인 통계 알고리즘 이다.
ex) X축, y축 평면이 있을 때 우리가 찾고 싶은 직선은 어느 어느 한 직선을 정했을 때 그 직선과 각 점 간의 거리의 합이 가장 짧은 직선의 방정식이다.
2. matrix 란?
유명한 영화 중에 matrix 란 영화가 있다. 이 영화 제목 matrix 의 뜻은 자궁이란 뜻과 행렬이란 뜻이 존재한다. 영화의 내용을 보면 가상세계에 들어가 목숨을 걸고 싸우는 내용인데 내용처럼 matrix는 숫자로 된 디지털 세계(행렬)와 가상세계를 품고 있는 자궁같은 폐쇄된 공간을 의미한다.
지금까지 많은 수학식이 증명을 위해 행렬을 사용해왔다.
3. PARI/GP를 사용한 행렬 연산 예제
1) 2X2 행렬을 만들어본다.
M = matrix(행, 열, 행에 대한 변수, 열에 대한 변수, 엔트리에 들어갈 함수) |
위와 같은 패턴으로 행렬을 생성하면 된다.
만약 다음과 같이 행렬을 만들면
M = matrix(2,2, i, j, i+j) |
아래와 같은 결과를 볼 수 있다.
2) 랜덤한 값을 이용한 1000X1000 행렬 만들기
우선 행렬을 만들기 전에 메모리를 크게 늘려주어야 한다.
allocatemem(10^9) |
다음 1)에서 설명했던 방식으로 배열을 생성한다.
M = matrix(1000,1000, i, j, random(10^10)) |
3) 역행렬 구하기
2X2 행렬을 만들고 역행렬을 구해본다.
우선 1)와 2)를 참고하여 랜덤한 값으로 2X2 행렬을 만든다.
역행렬을 만드는 방법은 다음과 같다.
M^-1 |
분수가 매우 지저분해보이므로 분수를 소수로 바꾸어준다.
1.0 * M^-1 |
소수점이 너무 길게 출력되므로 소수점이하 4자리만 출력되도록 설정해준다.
\p 4 |
4. PARI/GP 행렬의 판별식과 대각선의 합
통계 프로그램 중에는 대표적으로 R 과 같은 프로그램이 있지만 여기서는 간단하게 PARI/GP 를 가지고 악성코드를 분석해볼 것이다.
행렬의 곱셈의 규칙은 다음과 같다.
여기서 주의 점은 이 연산의 역은 성립하지 않는다는 것이다.
하지만 특이하게도 판별식은 AXB와 BXA와 동일하다.
중학교 때 배운 것이라 잊어먹을 수도 있지만
2X2 행렬의 판별식은 1/ad-bc이다 따라서 ad-bc가 0이 아니면 역행렬이 존재한다. 이처럼 판별식이 0이 아니면 이 행렬은 역행렬을 가지고 있음을 의미한다. 이때 이 판별식을 구하는 식이 matdet() 이다.
또 특이한 점은 왼쪽 위부터 오른쪽 아래까지의 대선의 합은 MXN 이나 NXM이나 동일하다는 점이다. 이때 함수 trace 를 사용해 행렬의 대각선의 합을 구할 수 있다.
대각선의 중심을 바꾸고 싶을 경우 ~(물결표시)를 이용하면 된다. 이를 transpose라 한다.
5. Logistic Regression 를사용해 악성코드 판별하기
결정을 할 때는 여러 요인을 보고 결정을 한다.
구매를 해야할때도..
병을 판별할 때도 의사는 암 환자인지 결정을 해주어야한다.
마케팅 또한 마찬가지..
여기서 판별을 하기 위해선 수집된 데이터가 필요한데 이때 수집된 데이터를 표현한 행렬을 predictor 이라 한다.
많으면 많을 수록 좋다
지금은 16*16이지만 더 큰 수가 될 수도 있고 그럴 땐 빅데이터라 표현한다.
결과는 벡터 또는 행렬로 표현된다.
아래의 예는 스마트폰 구입시에 대한 의사결정이다.
이제 이런 악성코드를 엄청 많이 가지고 통계를 내어 악성코드임을 판단해본다.
악성코드 개수(10만개) * 판별방법(250) 개
라 가정해보면 판별방법을 뽑는게 매우 어렵고 중요하다.
가중치를 주어야 하는데 주관적일 수 도 있고 객관적으로 값을 매겨야하기 때문이다.
예를 들어 0 1 또는 5까지 또는 소수만 줄 수 도 있다.
무수한 확률 분포 중 여기서는 logit 을 사용한다. 달라보이나 결국 정규분포랑 같다.
악성코드는 다음과 같은 방법으로 구할 수 있다
6. PARI/GP에서 Logistic Regression 를사용해 악성코드 판별하기
1) 시작하기전에 소수점크기와 메모리크기를 설정해준다.
\p 4 |
allocatemem(10^9) |
2) 악성코드 개수와 결정인자의 수는 다음과 같다.
- 수집한 악성코드는 n : 1000
- 결정인자 m : 200
3) 원래 각 인자에 대한 점수가 있는데 이것은 랜덤한 값으로 준다.
인자마다 가중치가 다 다른데 균등하게 0~5점까지 준다고 가정한다.
X=matrix(n,m,i,j,random(5)*1.0); /* predictor */ |
4) 악성코드 이다 아니다 여부 또한 랜덤하게 정한다.
y=matrix(n,1,i,j,random(2)*1.0); /* response = "1" or "0" */ |
5) 베타 = 계수를 구해준다.
beta=((X~*X)^-1)*X~*y; |
6) V = 새롭게 들어온 악성코드를 결정인자에 맞추어 값을 매긴다.
V=matrix(1,m,i,j,random(2)*1.0); /* trial */ |
7) 알파 = 계수와 측정한 값을 곱한 값을 구한다
alpha=V*beta; |
8) 확률을 구한다
p=exp(alpha)/(1+exp(alpha)); /* logistic function */ |
9) 전체 평균을 구해본다
y_bar=sum(i=1,n,y[i,]/n); |
10) 전체 평균보다 크면 악성코드이다.
if(p[1,1]>=y_bar[1], print("Malicious code!")) |
if(p[1,1]<y_bar[1], print("Good code!")) |
'보안 > 프로그램' 카테고리의 다른 글
DLL을 디버깅하기 위해 필요한 프로그램 (0) | 2015.05.20 |
---|---|
PARI/GP 시험문제 (0) | 2015.04.21 |
PARI / GP 를 사용한 빅데이터 연산 : RSA 암호화 및 복호화 (0) | 2015.03.23 |
PARI / GP 를 사용한 빅데이터 연산 : diffie hellman key exchange (0) | 2015.03.12 |
PARI / GP 를 사용한 빅데이터 연산 : 기본 명령어 (0) | 2015.03.12 |