전체 글 (317)

Domains/Bioinformatics

Sam File

2017. 10. 16. 02:46
반응형

Sam File


sam file은 시퀀스 정보를 저장하는 파일이다. 근데 fasta 포맷처럼 시퀀스가 일렬로 쭉 나열되 있는 것이 아니라 reference 시퀀스에 align된 시퀀스를 저장한다. 그래서 시퀀스와 함께, 그 시퀀스가 referecne 시퀀스에 매핑된 정보를 CIGAR 포맷으로 나타낸다. 또 bam file로 변환할 수 있는데 bam file은 sam file과 같은 정보를 갖고 있지만 binary 형태로 변환된 데이터이다. sam file은 텍스트 데이터인데 이를 binary로 변환함으로써 데이터를 압축하는 효과를 나타낸다.





이것이 sam 파일의 기본적인 포맷. (https://genome.sph.umich.edu/wiki/SAM)


그리고 각각의 필드에 대한 설명은 https://en.wikipedia.org/wiki/SAM_(file_format)에 나와 있다.

반응형

'Domains > Bioinformatics' 카테고리의 다른 글

Variant calling 이란?  (0) 2017.11.20
IGV Tutorial [BAM File]  (0) 2017.10.16
K-MERS 란  (2) 2017.10.12
Chip-seq 관련 정리 - 데이터 받기  (1) 2017.10.07
dbSNP 관련 정리  (4) 2017.09.25
반응형



적절한 조합에 대한 다양한 시도가 stacking의 성능을 높일 수 있다.


http://blog.kaggle.com/2016/12/27/a-kagglers-guide-to-model-stacking-in-practice/

반응형

'Domains > Kaggle' 카테고리의 다른 글

Stacking을 위한 패키지 vecstack  (0) 2017.10.18

Domains/Bioinformatics

K-MERS 란

2017. 10. 12. 01:59
반응형

k-mer 이란


genomics에서 k-mers란 어떤 시퀀스가 주어졌을 때, 길이가 k 가능한 모든 substring의 집합이다.


위키피디아에 따르면 다음과 같다.

The term k-mer typically refers to all the possible substrings of length k that are contained in a string.


즉, 아래 시퀀스의 경우

ATCGAAGGTCGT


k=4이면 4-kmers는 아래와 같다.

ATCG  TCGA  CGAA  GAAG  AAGG  AGGT  GGTC  GTCG  TCGT


이를 이처럼 Sequence Assembly에도 활용할 수 있다.

Bioinformatics에서는 주로 k-mers가 어떤 시퀀스의 "시그니쳐" 를 나타낸다. 즉, 어떤 시퀀스에서 feature를 뽑을 때, 이 k-mers를 이용한다.

반응형

'Domains > Bioinformatics' 카테고리의 다른 글

IGV Tutorial [BAM File]  (0) 2017.10.16
Sam File  (0) 2017.10.16
Chip-seq 관련 정리 - 데이터 받기  (1) 2017.10.07
dbSNP 관련 정리  (4) 2017.09.25
NGS 분석의 기초 개념  (2) 2017.09.10
반응형

EM 알고리즘을 통한 haplotype frequency 추정


우선 EM 알고리즘의 정의부터 알아보자.


EM 알고리즘은 관측되지 않는 잠재변수(unobserved latent variables)에 의존하는 확률 모델에서 최대우도(maximum likelihood)최대사후확률(Maximum A Posteriori)을 갖는 매개변수를 찾는 반복적인 알고리즘이다.


[출처] EM 알고리즘(1/2)|작성자 lhm0812


그렇다면 왜 haplotype frequency 추정할 때 EM 알고리즘 쓸 수 있는가? 관측되지 않은 변수가 있기 때문이다. 모수를 추정하고자 하는데 모수 추정에 필요한 값이 관측할 수 없는 잠재변수를 포함하고 있을 때 쓸 수 있다.


아래와 같은 세팅을 생각해보자.


Locus 1 has alleles A; a
Locus 2 has alleles B; b


Genotype counts are observed at the two loci for N individuals in the population.


homozygous for both loci: nAABB; naaBB ; nAAbb; naabb
homozygous for one loci: nAABb; naaBb; nAaBB; nAabb
heterozygous for both loci: nAaBb


근데 문제는 여기서 nAaBb는 2개의 가능한 하플로타입 nAB/ab or nAb/aB 이 있다. (즉, 두 loci 모두 genotype이 heterozygous인 경우 haplotype을 결정할 수 없다는 사실을 알 수 있다.)


우리가 알고 싶은건 pAB; pAb; paB; pab. 바로 이 haplotype frequency들이다.

여기서 pAB를 예로 들어 EM 알고리즘을 적용하는 과정을 살펴보자. 우선 pAB의 MLE는 아래와 같다.



p^AB = nAB/2N (N=관측된 사람 수. 하플로타입은 개인당 2개이므로 2N)



또한 nAB = 2nAB/AB + nAB/Ab + naB/AB + nAB/ab


이 때 문제는 nAB/ab를 모른다. 이를 잠재변수라고 하고, 이는 추정하려는 모수들 (pAB; pAb; paB; pab)과 관련되어 있다. 그래서 모수가 있다면 구할 수 있는 값이다. EM 알고리즘에서는 이를 모수를 적절한 값으로 초기화한 후, 반복적으로 nAB/ab를 구한다.



EM 알고리즘에서는 추정하려는 모수 pAB; pAb; paB; pab 를 적절한 값(ex. 0.25)으로 초기화한다. 그리고 이를 p0AB 처럼 표기한다.


관측한 값

Y = (nAABB; naaBB; nAAbb; naabb; nAABb; naaBb; nAaBB; nAabb; nAaBb)


와 초기화된 모수 p가 주어졌을 때, nAB의 기댓값은 아래와 같이 구할 수 있다.




여기서 E[nAB/ab]는 무엇인가?



왜 이렇게 되냐하면, nAB/ab는 nAaBb는 nAB/ab 또는 nAb/aB 이므로, 두 하플로타입(AB/ab, Ab/aB)이 등장하는 확률 값의 비율을 통해 nAB/ab의 기댓값을 구할 수 있다.


이를 통해 n0AB를 구했으면 pAB의 MLE를 통해 이를 업데이트한다.


p^AB = nAB/2N


이 과정을 반복하면 p^AB가 수렴해가고 이를 통해 추정값을 얻을 수 있다. 다른 모수들에 대해서도 이와 같이 한다.



출처 - http://courses.washington.edu/b516/lectures_2010/EM_Algorithm_Haplotype_Frequency_2010.pdf


반응형

'Domains > Genetics' 카테고리의 다른 글

Genetics - Genetic Mapping1  (0) 2017.11.11
Genetics - Recombination  (0) 2017.11.11
DNA 결합 단백질  (2) 2017.08.12
유전체학을 위한 신경망 모델  (0) 2017.08.12
Regulatory Genomics 개념과 ENCODE 프로젝트  (0) 2017.08.08
반응형
 

Chip-seq


Chip-seq은 특정 단백질과 결합하는 시퀀스를 알아내기 위한 방법이다. 유전자 발현을 조절하는 전사인자의 결합위치를 알아내는데 많이 활용된다. 실제로 Chip-seq 데이터를 통해 연구를 해야되는 연구자들이나 분석가들을 위해 정리된 튜토리얼이 필요해서 찾아보다 발견한 것이 아래 링크이다.


http://www.biologie.ens.fr/~mthomas/other/chip-seq-training/



위 링크에서 Downloading 파트에 가면 Chip-seq 퍼블릭 데이터를 다운 받는 방법이 나와있다. 우선, 이 튜토리얼은 FNR이라는 단백질에 관한 Chip-seq 데이터를 대상으로 하고있다. 튜토리얼에서 사용할 데이터는 GSE41195이다. GSE41195란 GEO(Gene expression omnibus)에서 사용되는 식별자(Identifier)이다. 이를 통해 해당 데이터에 접근할 수 있다. GEO홈페이지에서 다시 SRA 식별자 SRX189773를 알아낸다. GEO, SRA는 다 퍼블릭 DB이다. 같은 시퀀스인데 여러 DB에 저장되어있는 것이다. 근데 다시 이 SRA 식별자를 아래 링크 ENA 데이터베이스에서 검색해야지 데이터를 얻을 수 있다.



위 링크에 들어가서 SRX189773를 검색한다. 그러면 위 사진처럼 나오고 여기서 SRX189773을 클릭한다.






그러면 이와같은 화면이 나오는데 여기서 FASTQ files File1을 클릭하면 된다. 저 링크는 ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR576/SRR576933/SRR576933.fastq.gz 여기다. (하지만 이 링크를 클릭하면 아이디/패스워드 인증이 뜬다. 따라서 위 방법대로 차근차근 들어가야함) 결국 Chip-seq 데이터는 fastq 파일로 제공되는 것이었다. sequencing된 read들이 fastq 파일 형태로 나오며, 이를 align 한 후에, 많이 겹치는 부분을 단백질 결합 위치로 예상하는 것이다. 이를 peak라고 한다.


다운로드 받은 fastq 파일을 열어보면 이렇게 생겼다.



반응형

'Domains > Bioinformatics' 카테고리의 다른 글

Sam File  (0) 2017.10.16
K-MERS 란  (2) 2017.10.12
dbSNP 관련 정리  (4) 2017.09.25
NGS 분석의 기초 개념  (2) 2017.09.10
ClinVar DB 를 통한 질병 연관 변이 찾기  (0) 2017.09.09
반응형



진화 심리학의 대가 데이비드 버스가 쓴 이 책은 진화심리학의 내용을 매우 포괄적으로 담고 있다. 심리학이란 인간의 마음에 관한 학문이다. 진화 심리학의 큰 틀은 이러한 인간의 마음을 "진화적 관점"에서 이해하고자 하는 것이다. 그리고 인간의 마음을 진화적 관점에서 보고자 한다는 것은 합리적이다. 왜냐하면 인간의 마음도 결국 진화론에 따르면 긴 진화의 시간동안 환경에 적응한 결과로 볼 수 있기 때문이다. 인간의 마음은 결국 함수이다. 인풋이 있고, 이 인풋에 따라 아웃풋을 내놓는다. 이 책에서 이 함수를 "기제" 라고 부른다. 이 기제는 인간이 맞닥트려온 수많은 환경속에서 오랜 시간에 걸쳐 만들어진 진화의 산물이다.


진화론적 관점에서 인간 삶의 가장 중요한 이슈는 바로 생존과 번식이다. 생존과 번식이 중요한 이슈인 이유는 자신의 유전자를 영속적으로 보존하기 위해서는 생존과 번식이 필수적이기 때문이다. 진화심리학의 대부분은 이 생존과 번식의 관점에서 인간의 행동과 마음을 이해한다. 


왜 우리는 단 음식을 좋아할까? 왜 단 음식은 맛있게 느껴지고, 먹었을 때 기분이 좋아질까? 우리의 선조는 단 음식을 먹고 이를 통해 생존했으며, 한 가지 해석은 단 음식을 먹은 사람들이 더 많이 생존했기 때문에, 단 음식의 냄새를 좋다고 느끼도록 진화하게 되었다는 것이다.  왜 우리는 배우자의 외도에 질투를 느낄까? 책에 따르면 남자는 자신의 배우자의 단기적 외도에 민감하며, 여자는 배우자의 장기적 이탈에 민감하다. 진화론적으로 남자는 배우자가 낳은 아이가 자신의 아이인지 여부에 민감하도록 진화했다. 오랫동안 키워온 아이가 자신의 실제 아이가 아니라면, 자신의 유전자를 공유하지 않은 아이를 키운 것이 되므로 유전자의 입장에서 손해이기 때문이다. 이로 인해 남자는 진화적으로 배우자의 단기적 외도에 질투를 느끼도록 진화했다. 반면 여자의 경우 배우자의 다른여자와의 감정적 연결과 이에 따른 자신에 대한 장기적 이탈에 민감한데, 이 배우자가 다른 여자에게 빠져 자신에게 장기적으로 이탈하는 상황은 자신과 유전자를 공유한 아이를 키우기 힘든 상황에 직면하게 한다. 그렇기 때문에 여자는 남자의 단기적 외도보다는 장기적 이탈에 더 민감하고, 다른 여자와의 감정적 교류에 질투를 느끼도록 진화했다. 이 책은 이러한 사회 문제나 인간의 행동에 대한 연구 결과를 담고 있다. 이러한 연구 결과들은 진화론에 입각한 가설을 실제 데이터를 통해 통계적으로 검증한 연구들이다.


이처럼 진화심리학을 이해하면 수많은 사회적 현상과 인간의 마음을 이해할 수 있는 하나의 관점을 얻을 수 있다. 물론 이것은 "사실" 과는 다른 문제이다. 진화심리학이 사회의 모든 부분을 설명할 수는 없을 것이며, 또 진화심리학적 해설이 반드시 사실일 수는 없다. 하지만 이 세상의 문제에 대한 완벽한 해설이 없다고 가정했을 때, 진화심리학은 세상을 설명하는 합리적인 방법이 될 수 있다고 생각한다.


반응형
반응형

dbSNP 관련 정리


유전체 데이터 분석 (김주한 저) 269p 부터 쓰여져 있는 SNP 데이터 분석을 참고하여 개인적으로 실습하고 정리한 자료. SNP 데이터 분석을 위한 데이터베이스 중 dbSNP 데이터베이스 관련하여 정리하였다. 모르는 부분이 많아 개인적으로 정리하는 차원의 포스팅이다.


dbSNP


dbSNP 은 NHGRI와 NCBI가 함께 만들어 운영하는 사이트로써 SNP에 대한 정보를 담고 있다. dbSNP에는 두 가지 고유 아이디가 있는데 ssId와 rsID이다. ssId는 사용자들이 제출한 데이터이고 rsID는 관리자가 교정한 데이터이다.


실습 예


rs380390 이라는 아이디가 붙은 SNP을 검색해보고 관련 유전자를 알아보자.

https://www.ncbi.nlm.nih.gov/snp 에 접속하여 rs380390 검색. 그러면 아래의 정보를 볼 수 있다.


해당 SNP는 1번 염색체의 196731921 위치에 있으며, CFH Gene에 존재한다. GeneView를 통해 CFG Gene 정보를 볼 수 있다. 또한 해당 SNP은 단백질을 코딩하지 않는 유전자 상의 부분인 intro에 생긴 intron variant이다. 다소 이해 안 가는 부분은, rs380390을 클릭하여 들어가면 


MAF

G=0.2450/1227 (1000 Genomes)
G=0.3264/9505 (TOPMED)



라고 된 것을 볼 수 있다. 이는 minor allele frequency/minor allel count 이다. ancestral allele이 G인 것으로 보아 G가 minor allele이 아닌 것 같은데 왜 MAF를 G= 이라고 표시 한 것인지 헷갈린다. G가 아닌 다른 allele을 minor allele로 정의하고 그들의 MAF가 저렇다는 것인가? 즉, 저부분엔 ancestral allel인 G=을 표기해주고 G 이외의 다른 allele이 24.5%가 있다는 것일까? 또 궁금한 것은 HGVS Names부분이다. 저 부분에 저렇게 많은 variant에 대한 notation들이 있는데, 왜 저렇게 많이 있는지 궁금하다. 어떠한 variant에 대한 HGVS notation 은 1개만 있으면 되는 것 아닌가..?


Gene view를 선택하면 해당 SNP가 포함된 gene인 CFH Gene에 있는 SNP들의 정보를 알 수 있다. 해당 snp은 intron variant이므로 in gene region을 클릭하여 검색해야지 나온다. (SNP들이 엄청 많아 페이지 로드하는데 시간이 좀 걸릴수도 있다..) default로 되어있는 cDNA를 클릭하면, 이건 exon 부분만 있는거기 때문에 안나오는듯 하다. 아래처럼 rs380390을 확인할 수 있고, heterozygosity=0.37과 MAF=0.245을 알 수 있다. (근데 heterozygosity와 MAF는 왜 다른거지?..)



dbSNP는 NCBI의 Entrez 시스템에 통합되었다. 따라서 질의문을 이용하여 SNP을 검색할 수 있는데, 예를 들어 이런 경우이다. '5번 염색체와 6번 염색체에 존재하는 모든 frameshift SNP를 찾아라' 같은 경우에 질의문을 통하여 검색하면 이 조건에 해당하는 SNP들을 골라낼 수 있다. 이 질의문에는 물론 문법이 있는데, 이 부분은 포스팅에서는 다루지 않았다. 어렵지는 않아보여, 필요할 때 바로 검색해서 사용하면 될 듯하다!

반응형

'Domains > Bioinformatics' 카테고리의 다른 글

K-MERS 란  (2) 2017.10.12
Chip-seq 관련 정리 - 데이터 받기  (1) 2017.10.07
NGS 분석의 기초 개념  (2) 2017.09.10
ClinVar DB 를 통한 질병 연관 변이 찾기  (0) 2017.09.09
CIGAR Format  (0) 2017.08.13
반응형

SAS - 산점도와 히스토그램


descriptive analysis에서 변수별로 기본적으로 해보는 것이 바로 산점도와 히스토그램이라고 할 수 있습니다. 산점도는 두 변수의 관계를 파악할 때 쓰이며, 히스토그램은 한 변수의 분포를 알아보기 위해 쓰입니다. 이번 포스팅에서는 SAS로 산점도와 히스토그램을 그리는 법을 정리해보았습니다.


기본 산점도


proc gplot data=data;
    plot var1*var2;
run;


  • 기본 산점도는 위와 같이 간단하게 구할 수 있습니다. 근데 분석을 하다보면, 산점도를 그려도 두 변수의 관계가 확실히 보이지 않을 때가 있습니다. 이 경우에는 선형 회귀 선을 함께 그림으로써 그 경향성을 더욱 잘 파악할 수 있는데요. 링크 에는 산점도와 함께 선형회귀선을 그리는 코드를 보여주고 있습니다.


산점도 with 선형회귀선


ods graphics off;
proc reg data=data;
   model y= x;
   ods output ParameterEstimates=PE;
run;

data _null_;
   set PE;
   if _n_ = 1 then call symput('Int', put(estimate, BEST6.));   
   else            call symput('Slope', put(estimate, BEST6.)); 
run;

title 'y*x';
proc sgplot data=data noautolegend;
   reg y=y x=x;
   inset "Intercept = &Int" "Slope = &Slope" /
         border title="Parameter Estimates" position=topleft;
run;


  • 코드를 정리하면 위와 같은데요. 선형회귀분석의 결과로 나온 파라미터들을 임시 데이터셋에 저장해놓고 이를 매크로변수에 저장하여 산점도를 그릴 때 불러오는 방식입니다. 만약 추정된 파라미터 값이 굳이 필요없으면 마지막 proc sgplot 만 실행하면 되고, reg y=y x=x; 라인만 추가하면 선형회귀선이 산점도에 나타나게 됩니다.



히스토그램 및 밀도함수(density plot)


  • 히스토그램과 밀도함수는 아래의 코드로 그릴 수 있습니다. histogram statement와 함께 density statement를 추가하며 적당한 밀도함수를 그려주게 되며, 정규분포 밀도함수를 함께 그려주어 해당 데이터가 정규분포와 얼마나 유사한지를 보여줄 수 있습니다.


proc sgplot data=data;
  histogram var_name ;
  density var_name / type=normal legendlabel='Normal' lineattrs=(pattern=solid);
  density var_name   / type=kernel legendlabel='Kernel' lineattrs=(pattern=solid);
  keylegend / location=inside position=topright across=1;
  xaxis display=(nolabel);
 run;







반응형

'Tools > SAS' 카테고리의 다른 글

SAS - 표본 추출  (0) 2017.12.07
SAS - proc report 의 옵션들  (0) 2017.09.20
SAS - 상관분석 기초  (0) 2017.06.12
SAS - Signed Rank Sum Test  (0) 2017.04.02
SAS - Paired Sample에 대한 비모수 검정  (0) 2017.04.02
반응형

SAS Proc report 옵션들


/* 2017.9.20 by. 3months */


SAS Base programming 자격증 공부하다가 proc report 관련 정리를 하였습니다. proc report는 데이터셋을 통해 무언가를 report할 때 쓰이는 SAS의 프로시져입니다.


데이터 정의


data a;
 input a$ b;
 cards;
 a 1
 a 2
 a 3
 a 4
 c 5
 c 6
 b 7
 b 8
 b 9
 b 10
 ;
run;


proc report 프로시져


proc report data=a;
   column a; * 이 컬럼에 대한 리포트를 하겠다;
   define a/group; * 중복값을 제외하고 group으로 묶겠다 ;
run;

proc report data=a;
 column a;
 define a/across; * across 옵션은 갯수를 센다;
run;

proc report data=a;
 column b;
 define b/analysis; * b 컬럼 분석 sum을 낸다. ;
run;

proc report data=a;
 column b;
 define b/display; * 그냥 그대로 보여준다.;
run;



차례 대로 각각의 proc report에 대한 결과


The SAS System

a
a
b
c



The SAS System

a
a b c
4 4 2



The SAS System

b
55



The SAS System

b
1
2
3
4
5
6
7
8
9
10



출처


http://blog.naver.com/sonobono88/220271045853

반응형

'Tools > SAS' 카테고리의 다른 글

SAS - 표본 추출  (0) 2017.12.07
SAS - SGPLOT을 통해 산점도와 히스토그램 그리기  (0) 2017.09.24
SAS - 상관분석 기초  (0) 2017.06.12
SAS - Signed Rank Sum Test  (0) 2017.04.02
SAS - Paired Sample에 대한 비모수 검정  (0) 2017.04.02
반응형

강화학습 Q-learning on non-deterministic worlds



출처



Frozen Lake 게임이 non-deterministic인 경우 Q를 어떻게 학습하는지 알아보겠습니다. 이 포스팅은 Frozen Lake 게임과 강화학습의 기본 개념을 안다는 전제로 김성훈 교수님의 강화학습 강의를 제 나름대로 정리한 포스팅입니다. 우선 non-deterministic이 무슨 의미인지부터 살펴보면 non-deterministic 이라는 것은 원하는대로 되지 않는다는 의미입니다. (stochastic이라고도 합니다.) 이런 경우에는 무조건 Q가 가라는 대로 가는 것보다는 "기존의 믿음" 을 차근 차근 업데이트 해나가는 것이 Q 학습이 더 잘 된다고 합니다. 이는 현실 세계와도 많이 닮아있습니다. 이를 멘토에 비교해볼 수 있는데, 무조건 멘토가 하라는 대로 하기보다는 결국 무언가를 하기 위해서는 타인의 조언 보다는 자기 자신의 신념이 더 중요하다고 할 수 있습니다.


이를 식으로 표현하면 기존 알고리즘은  


Q(state, action) = R + λmax(Q(new state)) (λ < 1)


이었는데


Q(state, action) = (1-a)Q(state, action) + a(R+λmax(Q(new state)) (a = learning rate)

Q(state, action) = R + max(Q(new state))

출처: http://3months.tistory.com/173 [Deep Play]


사용하게 됩니다. learning rate 개념을 통해 Q를 한 번에 업데이트 하지 않고, 기존에 믿음을 토대로 조금씩 업데이트 해나가는 것입니다. 이를 구현하는 코드를 보겠습니다. 기존 코드에서 Q 업데이트 하는 부분만 달라지기 때문에 크게 다르지는 않습니다.



라이브러리 로드

import gym
import numpy as np
import matplotlib.pyplot as plt 
from gym.envs.registration import register
import random as pr


environment 생성 및 하이퍼 파라미터 초기화

env = gym.make('FrozenLake-v0')
# Q-table 초기화
Q = np.zeros([env.observation_space.n, env.action_space.n])

# Learning Rate
learning_rate = 0.85

# discount factor
dis = .99
    
# learning 횟수
num_episodes = 2000

# 학습 시 reward 저장
rList = []


Q-learning 알고리즘

for i in range(num_episodes):
    
    # env 리셋
    state = env.reset()
    rAll = 0
    done = False
    
    #decaying E-greedy
    e = 1./((i//100)+1)
    
    # Q-table Learning algorithm
    while not done:
        
        # Choose an action by e greedy
        '''
        if np.random.rand(1) < e:
            action = env.action_space.sample()
        else:
            action = np.argmax(Q[state, :])
        '''
        
        # add Random noise
        action = np.argmax(Q[state, :]+ np.random.randn(1, env.action_space.n)/(i + 1))
        
        # new_state, reward 업데이트 
        new_state, reward, done, _ = env.step(action)
        
        # update Q-table
        Q[state, action] = (1-learning_rate) * Q[state, action] + learning_rate*(reward + dis*np.max(Q[new_state, :]))
        
        rAll += reward
        state = new_state

    rList.append(rAll)

action을 선택하는 부분에서 e-greedy 방법을 사용하는 방법과 random noise를 사용하는 방법이 있는데 둘 다 exploit & exploration을 구현한 것으로 둘 중 하나를 사용하면 됩니다. 밑에 #update Q-table 부분에 Q를 업데이트하는 코드를 볼 수 있습니다. learning rate를 통해 기존의 믿음을 얼마나 받아들일지, Q의 판단을 얼마나 받아들일지를 조정합니다.

print('success rate: ', str(sum(rList)/num_episodes))
print('Final Q-table values')
print(Q)
plt.bar(range(len(rList)), rList, color = 'blue')
plt.show()

('success rate: ', '0.4135')
Final Q-table values
[[  6.05216575e-01   4.77802714e-03   7.66890982e-03   1.14402756e-02]
 [  1.89070559e-04   2.71412272e-05   2.94641678e-03   6.06539650e-01]
 [  6.20782244e-03   3.96037865e-03   2.02160738e-03   5.88158391e-01]
 [  1.38851811e-04   1.81853506e-04   1.08700028e-03   3.36662917e-01]
 [  5.63057417e-01   1.35053120e-03   4.64530097e-04   1.81633578e-03]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  8.64124213e-05   2.51760080e-04   7.21585211e-02   3.41902605e-05]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  3.70706358e-05   1.37044981e-03   2.40643636e-04   7.95889822e-01]
 [  1.09162680e-04   5.60870413e-01   9.16914837e-04   2.64997619e-04]
 [  9.20012820e-01   5.54630225e-05   7.32392792e-05   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  4.37606936e-04   4.03103644e-04   9.16837079e-01   3.65822303e-04]
 [  0.00000000e+00   0.00000000e+00   2.34205607e-03   9.98477546e-01]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]]

success rate는 0.4135인데, 이는 0.4135의 확률로 Goal에 도착한다는 것입니다. non-deterministic world 에서는 상당히 높은 성공률입니다. 또 이 부분에서 중요한 점은 이 non-deterministic world에서의 강화학습 알고리즘의 성공률은 사람의 성공률 보다 높을 수 있다는 것입니다. 왜냐하면 deterministic world에서는 사람이 한 눈에 게임의 rule을 알 수 있고, 매우 쉽게 Goal을 찾을 수 있는 반면, non-deterministic world에서는 사람에게는 Goal을 찾아가는 것이 쉽지 않습니다. 하지만 non-deterministic world에서도 확률적으로 패턴이 존재하고, 이 사람이 이해하기 힘든 패턴속에서 강화학습 알고리즘은 에러를 최소화할 최적의 경로를 찾는다는 것입니다. 이 부분이 진정한 강화학습의 강점이 아닐까 생각해보았습니다.



반응형
반응형