Cosine Similarity Measure

Cosine similarity is a measure of similarity between two vectors by measuring the cosine of the angle between them. The result of the Cosine function is equal to 1 when the angle is 0, and it is less than 1 when the angle is of any other value. Calculating the cosine of the angle between two vectors thus determines whether two vectors are pointing in roughly the same direction.

This is often used to compare documents in text mining. In addition, it is used to measure cohesion within clusters in the field of Data Mining.


Cosine of two vectors can be easily derived by using the Euclidean Dot Product formula:

\mathbf{a}\cdot\mathbf{b} =\left\|\mathbf{a}\right\|\left\|\mathbf{b}\right\|\cos\theta

Given two vectors of attributes, A and B, the cosine similarity, θ, is represented using a dot product and magnitude as

 \text{similarity} = \cos(\theta) = {A \cdot B \over \|A\| \|B\|} = \frac{ \sum_{i=1}^{n}{A_i \times B_i} }{ \sqrt{\sum_{i=1}^{n}{(A_i)^2}} \times \sqrt{\sum_{i=1}^{n}{(B_i)^2}} }

The resulting similarity ranges from −1 meaning exactly opposite, to 1 meaning exactly the same, with 0 usually indicating independence, and in-between values indicating intermediate similarity or dissimilarity.

For text matching, the attribute vectors A and B are usually the term frequency vectors of the documents. The cosine similarity can be seen as a method of normalizing document length during comparison.

In the case of information retrieval, the cosine similarity of two documents will range from 0 to 1, since the term frequencies (tf-idf weights) cannot be negative. The angle between two term frequency vectors cannot be greater than 90°.

This cosine similarity metric may be extended such that it yields the Jaccard coefficient in the case of binary attributes. This is the Tanimoto coefficient, T(A, B), represented as

 T(A,B) = {A \cdot B \over \|A\|^2 +\|B\|^2 - A \cdot B}

Posted in Similarity Search | Tagged , , , | Leave a comment

TFIDF(term frequency-inverse document frequency)

Tf-idf 가중치

Tf-idf(term frequency-inverse document frequency) 가중치는 언어 자료 내의 특정 문서에서 어떤 단어의 중요도를 평가하기 위해 사용되는 통계적인 수치입니다.
단어의 중요도는 문서 내에서 해당 단어가 많이 나타날수록 증가하며, 전체 언어 자료 내에서 해당 단어가 많이 나타날수록 감소합니다.
Tf-idf 가중치는 정보 검색과 텍스트 마이닝에 주로 사용되며, 검색 엔진에서 사용자 질의에 대한 문서의 유사도 순위를 정하는 데에 이 tf-idf 가중치의 변형들이 사용됩니다.

수학적인 세부 내용
주어진 문서에 대한 term frequency(단어 빈도)는 단순히 그 문서에서 해당 단어가 나타나는 횟수입니다. 그런데 이 경우, 문서의 길이가 더 길면, 해당 단어의 실제 중요도와는 상관 없이 term frequency가 더 커질 수 있습니다. 따라서, 일반적으로 특정 문서 dj에서 단어 ti의 중요도는 다음과 같이 표준화됩니다.

여기서, ni,j는 문서 dj에서 단어 ti가 나타나는 횟수이며, 분모는 문서 dj 내의 모든 단어가 나타나는 횟수입니다.
Inverse document frequency(역 문서 빈도)는 해당 단어의 일반적인 중요도를 나타내는 수치입니다. 전체 문서의 수를 해당 단어가 포함된 문서들의 수로 나눈 값에 로그를 취합니다.

여기서, | D |는 언어 자료 내의 전체 문서 숫자이며,

은 단어 ti가 등장하는 문서들의 숫자입니다.

Tf-idf 가중치는 term frequency와 inverse document frequency의 곱으로 계산됩니다.

Tf-idf 가중치는 주어진 문서에서의 term frequency가 크고, 전체 문서에서의 document frequency가 작을 수록 커집니다. 따라서, 전체 문서에서 공통적으로 등장하는 단어들은 걸러지게 됩니다.



예>
Tf-idf 가중치를 계산하는 방법은 다양합니다.
Term frequency는 어떤 문서 내에서 특정 단어가 나타나는 횟수를 문서에 들어있는 모든 단어 수로 나눈 값입니다. 만약 100개의 단어로 이루어진 어떤 문서에 단어 cow가 세 번 등장한다면, 단어 cow의 term frequency는 0.03(3/100)입니다.
Document frequency를 계산하는 한 가지 방법은 단어 cow가 포함된 문서들의 숫자를 전체 문서의 숫자로 나누는 방법입니다. 만약, 전체 10,000,000개의 문서 중에서 단어 cow가 들어있는 문서들의 숫자가 1,000개라면, document frequency는 0.0001(1000/10,000,000)입니다.
최종 tf-idf 가중치는 term frequency를 document frequency로 나눠서 구할 수 있습니다. 예를 들어, 단어cow의 tf-idf 가중치는 300(0.03/0.0001)입니다.

또 다른 방법은 document frequency에 로그(일반적으로 자연 로그)를 취하는 방법입니다. 이 방법을 사용하면 idf 값은 ln(10,000,000/1,000) = 9.21이 되어서 tf-idf 가중치는 0.27(0.03 * 9.21)이 됩니다.

벡터 공간 모델에서의 응용
Tf-idf 가중치는 벡터 공간 모델(Vector Space Model)에서 코사인 유사도와 함께 두 문서의 유사도를 결정하기 위해서 자주 사용됩니다.

[출처] Tf-idf 가중치|작성자 곧미남된다

Posted in Document Detection | Tagged , | Leave a comment

SVM 개념

SVM의 개념

SVM은 상당히 다룰 내용이 많은 learning algorithm이다.

하지만, 아직은 SVM을 제대로 공부한 적이 없는 필자와 같은 상태의 사람들은 논문을 보거나 SVM을 프로젝트에 이용하려 할때 기본 개념을 알고 있을 필요가 있다.

SVM(Support vector machine)은 2개의 범주를 분류하는 이진 분류기이다.

다음 그림은 SVM의 개념을 설명하는 것이다. feature들은 그림과 같은 vector공간에 vector로 표시된다. 그림에서 보는 것처럼 하얀 색 vector들을 A그룹에 속하는 white point라고 하고, 그 반대로 검은색 vector들을 B그룹에 속하는 black point라고 하자.


이러한 벡터 가운데 같은 범주를 기준으로 바깥으로 위치한 벡터들의 연결선으로 이루어진 닫혀진 다각형을 convex hull이라고 한다. convex hull안의 벡터들은 그룹을 분류하는 데 그다지 큰 영향을 미치지 않는다. 그룹을 분류하는데 가장 큰 영향을 미치는 것들은 바깥에 위치한 벡터들이다. 그룹을 분류하는 선, 면을 hyperplane이라고 한다.
그림에서 보는 것처럼 그룹을 나눌 수 있는 hyperplane은 무수히 많다.
하지만, 직관적으로 그룹들의 convex hull에 속한 벡터들 중 가장 가까운 벡터와 수직거리로 가장 먼 거리를 가진 hyperplane이 2그룹을 효과적으로 분류할 것이다.
이러한 hyperplane을 maximum hyperplane이라고 부르고 이때 가장 가까운 벡터들을 support vector라고 한다. hyperplane이 재조정 될때는 support vector역시 재계산 되어야 한다. hyperplane은 선형 또는 비선형 모든 형태로 표현이 가능하며 일정 수식의 방정식으로 표현이 가능하기 때문에 간단한 수식으로 두 그룹을 분류할 수 있다.

이제 해야 할 일은 이 두 그룹 간의 거리를 최대한으로 하여 categorization할 때 발생할 수 있는 오류를 최소화 해야 한다. 그룹 간 거리를 최대한으로 하기 위해서 공업 수학 시간에 배운 적이 있을(공학도라면) 다변수 함수의 최대, 최소 값 찾는 데 이용되는 라고랑지의 미정계수법을 사용한다. 라고랑지 미정계수법의 원리는 그리 어려운 내용이 아니다.(수학적 내용 Lable의 라고랑지의 미정계수법 참고)

그런데 SVM 역시 두 그룹간의 거리를 최대로 하는 가중치 값들(다변수)을 정하는 것이므로 다른 머신 러닝 방법과 유사한 측면이 있다. 그렇다면, 왜 Decision tree, Concept learning, 그리고 neural network같은 걸 쓰지 않고 SVM을 쓰는 걸까? 그것을 바로 target이 2그룹 중 하나로 분류되는 경우에 특화되어 있기 때문이다. 예를 들면, 2가지 그룹으로 분류하는 방법으로 Decision tree를 쓸 수도 있고, neural network를 쓸수도 있고 Concept learning을 할 수도 있다. 만약 training set이 선형적인 hyperplane으로 나눠질 수 있다면 모든 경우가 거의 비슷한 성능을 할 것이다. 하지만 비 선형적인 경우 neural network가 가장 좋은 성능을 내게 될 것이라고 하자. 하지만, 만약 이 비선형성이 보다 높은 차원에서 볼 때 선형성을 뛴다고 하면 차원을 확대해서 보다 더 빠르고 쉬운 선형적 머신 러닝 알고리즘을 사용할 수 있지 않을까? 우리는 두 개의 그룹으로 분류하기 때문에 차원의 수를 아주 많이 확대하지 않고도 training set을 선형적으로 바꿀 수 있을 것이라고 직관적으로 생각할 수 있다. 그런 의미에서 SVM이 효과적인 측면을 갖는다고 말할 수 있다.



이 글은 http://channelofchaos.blogspot.com/2007/08/svm_10.html 에서 포스팅 되었습니다.

Posted in SVM | Leave a comment

Ghost 부팅 디스크 만들기!!

윈도우 설치를 위한 부팅이나, 노턴고스트 복구모드 부팅을 USB로 하는 방법입니다.

방법은 간단한합니다. UltraISO 를 이용하여, CD굽듯이 USB를 구워버리면 그만입니다.

준비물로써는 UltraISO 프로그램, 부팅가능한 윈도우 또는 노턴고스트 CD이미지, 그리고 당연히 USB가 필요합니다.

UltraISO 프로그램의 경우 아래링크로 따라가 다운로드 받으시기 바랍니다.

1.jpeg

설치가 필요없는 포터블 버전이니 다운받으셔서 압축만 풀어주면 사용가능합니다.
* 관련 포스팅 : ‘UltraISO v9.3.5. 2716′ 무설치 포터블(한글)

저같은경우 지금 노턴고스트 15 기준으로 작성하고 있습니다만, 윈도우7 역시도 동일합니다.

우선 처음 절차로써, 기존에 USB 안에 넣어두었던 내용 모두를 백업해놓으시기 바랍니다.

왜 그런지는 아래에서 자연스럽게 설명됩니다.

보고 그대로 따라하세요.

2.jpeg

지금부터 UltraISO를 이용하여, 노턴고스트 15의 부팅정보 파일들만 추출해오겠습니다.

파일탭을 클릭하여 열기를 눌러줍니다.

3.jpeg

부팅가능한 윈도우7 CD또는, 노턴고스트 CD 이미지를 선택한 뒤 열기를 눌러줍니다.

저같은경우는 개인적으로 입수한 노턴고스트15 설치+리커버리 CD를 열겠습니다.

4.jpeg

파란색 박스부분이 노턴고스트15 CD이미지 안에 존재하는 내용입니다.

이걸 다 구워버리셔도 상관없으나 용량을 차지하므로, 필요없는건 다 지워버리겠습니다.

여기서 복구모드 부팅(and 윈도우 설치)만을 위한 파일은 몇가지 안됩니다.

Boot 폴더, SOURCES 폴더, BOOTMGR 파일만 제외하고 다지우시면 됩니다.

윈도우7 역시도 남겨야 할 파일&폴더명은 동일합니다.

다른게 있다면 SOURCES 폴더 안에 있는 내용의 차이(=용량)인데요.

5.jpeg

보시면 아시겠지만, 윈도우7의 SOURCES 폴더에는 3기가 가량의 많은 내용들이 담겨있고

노턴고스트15의 SOURCES 폴더에는 Boot.wim 이라는 160mb짜리 파일하나만 들어있습니다.

6.jpeg

자, 다시 본론으로 돌아가, 위의 그림처럼 나머지는 다지워주셨다면, 이제 USB를 구워줘야겠죠?

여기서, 이 파일을 단순하게 복사 붙여넣기 방식으로 USB에 담으면 되지 않나? 라는 생각이 들수도 있으실겁니다.

허나, 안됩니다. 반드시 한번은 CD굽듯, 구워줘야 합니다.(왜 반드시 한번은.. 인지는 아래에서 설명하겠습니다.)

USB를 본체에 연결하여 주세요.

7.jpeg

부팅탭에서 디스크 이미지 기록을 눌러줍니다.

8.jpeg

창 하나가 나타났습니다 USB가 선택된것이 맞는지 잘 확인하시구요.

기록방법은 USB-HDD+, Xpress Boot 등이 되어야 합니다.

이제 쓰기 버튼을 눌러 USB를 구워주세요.

* 단, 이 작업을 하실경우 USB가 포맷되므로 기존에 있던 자료는 모두 백업해놓으시기 바랍니다.

자, 모두 끝났습니다. 제 설명만 길었지(-_-) 적용방법은 아주 간단했습니다.

부팅을 한번 테스트 해봐야겠군요. USB를 꼽은 상태로 컴퓨터를 재부팅해줍니다.

9.jpeg

del키, 또는 f2, f1 등의 버튼을 눌러 CMOS 화면으로 진입하신다음 USB를 First 부팅으로 맞춰주시면 됩니다.

이 화면은 메인보드마다 틀리기 때문에 저와는 다를수 있습니다.

어떤 메인보드는 어떤식으로 해야되고.. 어떤건 다르고.. 이런건 정확히 말씀드릴수가 없습니다.

10.jpeg

이제, USB 부팅을 통하여 윈도우7 설치 또는, 노턴고스트의 복구모드 진입이 가능합니다.

(추가설명)

부팅이 가능하다는 이 USB 내부는 어떻게 생겼는지 한번 보겠습니다.

11.jpeg

제가 쓰는 XTICK 4G USB 입니다.

초록색 박스로 표시한 것들은 노턴고스트15(또는 윈도우) 복구모드 부팅을 위한 파일 & 폴더들이구요.

갈색 박스로 표시한 것들은 제 그냥 개인자료 입니다. 공인인증서, 각종 프로그램, 바이오스ROM파일 등등..

이렇듯, 이것저것 생각할 필요없이 여유용량은 이전에 USB 썼었던것처럼 그냥 쓰시면 됩니다.

초록색 박스의 파일들을 지운다면? 당연히 부팅 USB로 사용하실수가 없겠죠. 다만,

12.jpeg

한번이라도 USB를 구워놓으셨다면 USB를 전체포맷하지 않는이상 위에서 했던 작업을 또 하실필욘 없습니다.

필요없을땐 파일 삭제해버리시고, 다시 USB부팅이 필요할때는 복사 붙여넣기 방식으로 붙여넣으면 그만입니다.

※ USB를 구웠을때 설령 고스트 CD로 하셨다 하더라도, 윈도우 파일들을 넣어주시면 윈도우USB로 쓰실수 있습니다.



이 글은 http://bigshit.tistory.com/59 에서 포스팅 되었습니다.

Posted in Tip | Leave a comment

Outlook에서 winmail.dat 파일 첨부 문제

Winmail.dat 첨부파일 문제 때문에 불편을 격고 있다. Thunderbird나 Outlook Express는 서식이 있는 문자열(RTF)로 된 메시지를 처리하지 못하는 경우 Winmail.dat라는 파일이 메시지의 끝 부분에 자동으로 첨부된다. 그래서 메일 내용을 모두 볼 수 없는 경우가 생긴다.



쉽게 해결할 수 있는 방법은 보내는 사람이 다음과 같이 설정을 바꾸면 된다.



Outlook에서 Winmail.dat를 보내지 않게 하려면, 발송자가 TNEF(전송 중립 포장 포맷, Transport Neutral Encapsulation Format)를 꺼놓으면 된다.



[영문 아웃룩]


Tools > Options > Mail Format > Message Format -> Internet Format 선택

Outlook Rich Text options에서 Convert to HTML format 이나 Convert to Plain Text format 을 선택 한후에

메일을 발송하면 된다.



[한글 아웃룩]

도구 > 옵션 > 메일 형식 -> 인터넷 메일 형식 선택

‘Outlook 서식있는 텍스트 옵션’에서 HTML 형식으로 전환 나 일반 텍스트 형식으로 전환 을 선택 한후에

메일을 발송하면 된다.




1. 도구(Tool) -> 옵션(Option) -> 메일형식(mail format) 탭을 선택한다.



2. “아웃룩 서식있는 텍스트 메시지를 보낼 때 “HTML 형식으로 변환(Convert to HTML format)” 또는 “일반 텍스트 형식(Convert to Plain Text Format)”으로 설정한다.






하지만 불가능하다면 winmail.dat 를 볼 수 있게 해주는 프로그램이 있다. Winmail_opener 로 무료기는 하지만 첨부된 Winmail.dat를 다운로드해서 로드해야하는 불편함이 있다. 그렇지만 Thunderbird에서도 Winmail.dat를 볼 수가 있기 때문에 조금은 위안을 삼는다.




Winmail_opener는 http://www.eolsoft.com/freeware/winmail_opener/ 에서 구할 수 있다.







Winmail.dat 파일이 전송되지 않도록 하는 방법을 MS에서도 다음 페이지에서 게시해놨다.

http://support.microsoft.com/kb/q138053/

기업메일 시스템과 호환성을 보장하기 위해서 이러한 부분은 설정해 보자.

Posted in Tip | Leave a comment