제시된 문제를 해결하기위한 실제 레시피 (하나의 가능한 해결책)
내가 좋아하는 기계 학습 도구 인 vowpal wabbit 를 사용하여 -q 옵션을 통해 2 차 (크로스) 기능을 지원하는 것은 간단 합니다 .
Vowpal Wabbit 배경
사용법에 대해 자세히 알아보기 전에 vowpal Wabbit는 분류 및 회귀를위한 빠르고 확장 가능한 온라인 머신 러닝 소프트웨어입니다. 온라인 학습 도구로서 전체 데이터를 메모리에로드 할 필요가 없기 때문에 데이터 크기 (예)의 제한없이 데스크탑에서 초당 약 5 백만 개의 기능 (학습) 속도를 얻습니다. 다른 학습 알고리즘 지원, 다중 손실 함수, 스파 스 기능, 혼합 기능 유형 등과 같은 많은 매력적인 기능이 있습니다.이 질문의 범위를 벗어납니다.
주석으로 문제를 해결하는 3 단계는 다음과 같습니다.
0 단계 : github에서 vowpal wabbit 다운로드 및 빌드 (지원되는 환경의 하단에있는 참고 참조)
1 단계 : 각 줄이 다음과 같은 훈련 세트를 준비하십시오.
1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...
훈련 세트 형식에 대한 설명 :
가장 왼쪽에있는 숫자 1.0 은 레이블 (상호 작용 값, 임의의 숫자 값일 수 있음)이고 두 번째 문자열 ' protein1 / protein2 '는 줄에 ID를 부여하는 태그입니다. "이 줄은 protein1과 단백질 2 "; 선택 사항이므로 주석으로 생각할 수 있습니다. 이 태그 문자열은 또한 어떤 예측이 어떤 예제에 속하는지를 식별하기 위해 모델 예측에서 에코되지만 여기서는 예측하지 않고 모델을 모델링하고 연구하는 것입니다. 다음은 protein1에 대한 입력 피처 네임 스페이스를 제공합니다 |A
(우리는 네임 스페이스 를 정의하여 다른 네임 스페이스 사이를 교차 할 필요가 있음).A
실제로 어떤 단어라도 될 수 있지만 첫 글자는 네임 스페이스마다 달라야하므로 command1에서 입력 기능 목록이 뒤 따르는 명령 호출에서 이들을 교차 할 수 있습니다 p1_...
. 마지막으로 protein2의 이름 공간이 온다 : protein2 |B
의 특징 이름이 뒤 따른다 p2_...
.
vowpal Wabbit의 아름다움 중 하나는 기능 이름에 임의의 문자열을 사용할 수 있다는 것입니다 (내부적으로 해시하지만 신경 쓰지 않아도 됨). 훈련 세트의 유일한 특수 문자는 다음과 같습니다.
- 공백 (분명히)
|
, 입력 기능 및 네임 스페이스 접두사
:
피쳐 이름을 해당 값과 분리
는 :
우리가 그들의 값은 기본값 있도록 모든 단백질의 기능 이름 부울 (유)를 나타냅니다 가정하기 때문에, 여기에 사용하지 않는 1
그들은 명시 적으로 값을하지 필요합니까.
이제 vowpal_wabbit (실행 파일 이름이 실행될 수 vw
있음) -q AB
모든 사이 (상호 작용 측면 일명) 간 기능을 하나 개의 기능에서 선택되는 기능의 가능한 쌍의 자동 생성에 protein1 (네임 스페이스로 시작 A
)와에서 다른 protein2을 ( 로 시작하는 네임 스페이스 B
). vowpal_wabbit는 데이터 쌍을 읽고 단백질의 쌍 사이에 약간의 상호 작용을 일으키는 모든 기능 조합에 대해 가중치가있는 모델을 학습하고 만듭니다. 여기서는 vw
직접 실행하는 대신 vw-varinfo
마지막 단계로 vowpal wabbit과 함께 제공되는 래퍼 유틸리티를 통해 실행합니다 . 모델을 만들기 위해 vw-varinfo
실행 vw
하고 사람이 읽을 수있는 형태로 모델을 덤프합니다.
3 단계 : 다음 과 같이 vw-varinfo를 호출 하십시오.
vw-varinfo -q AB -c --passes 20 your_data_set_file
vw-varinfo는 모든 옵션 ( -q ... -c --passes ...
)을있는 그대로 전달합니다 vw
. 만 -q AB
두 기능의 이름 공간을 횡단하기위한 필수적이다. 위의 옵션을 여러 개 추가하여 여러 단계를 실행하면 더 나은 결과를 얻을 수 있다고 생각합니다.
이 명령은 vowpal wabbit ( vw
)를 호출 하여 데이터 세트를 학습하고 원하는 출력을 인쇄합니다. 강도 및 상대 가중치 순서에 따른 모든 기능 상호 작용.
입력 및 출력 예
입력 값에 prot.dat
3 개의 단백질 사이에 3 방향 상호 작용이 포함되어 있다고 가정합니다 .
1.0 protein1/protein2|A a b |B k m
0.6 protein2/protein3|A k m |B b c d
2.2 protein1/protein3|A a b |B b c d
이것은 의도적으로 매우 최소한의 예입니다. vw
더 큰 데이터 세트 (예 : 수백만 행, 수백 가지 기능)에 문제가 없어야하며, 예제에서 상호 작용 강도 레이블을 변경했습니다. 상호 작용이 부울 "예"또는 "아니오"인 경우 각 행의 첫 번째 필드로 (상호 작용 0
없음) 또는 1
(상호 작용 존재)를 사용하십시오.
달리는:
vw-varinfo -q AB -c --passes 20 prot.dat
가능한 모든 상호 작용 (이름 공간 A
및 B
출력 무시 )과 가중치를 산출합니다.
FeatureName HashVal MinVal MaxVal Weight RelScore
A^k 220268 0.00 1.00 +0.3804 100.00%
A^k^B^k 254241 0.00 0.00 +0.3804 100.00%
A^k^B^m 93047 0.00 0.00 +0.3804 100.00%
B^k 178789 0.00 1.00 +0.1011 26.58%
B^m 17595 0.00 1.00 +0.1011 26.58%
[... trimmed for brevity ...]
A^m^B^m 141879 0.00 0.00 +0.0000 0.00%
Constant 116060 0.00 0.00 +0.1515 0.00%
A^b 139167 0.00 1.00 -0.0641 -16.86%
A^b^B^k 204424 0.00 0.00 -0.1233 -32.43%
A^b^B^m 43230 0.00 0.00 -0.1233 -32.43%
이 데이터에서 일반적으로 상호 작용에 가장 큰 영향을 미치는 요인은 1) k
기능 의 단순한 존재 , 2) k
자체와 상호 작용 하는 기능 (단백질에 있다고 가정) 및 3)과 k
상호 작용하는 기능 m
입니다. 가장 약한 (단백질 상호 작용에 대한 부정적인 기여)은 b
특징과 쌍을 이루는 m
특징입니다.
다음은 vw-varinfo에 대한 하우투 페이지입니다
vowpal wabbit은 소스 (위 링크 참조)에서 빌드하며 Linux (및 기타 유닉스), Mac OS-X 및 Windows에서 실행됩니다.
HTH