전체 글 (312)

반응형

bam 파일 인덱싱



BAM 파일은 FASTA 파일처럼 sequence 를 저장하는 파일인데 binary로 저장이된다. (저장공간의 효율을 위해 그런것같다.) 시퀀스를 저장하고 있는 모양은 SAM 파일과 같은데, 이를 단지 binary 형태로 저장한 것이다.


bam 파일 인덱싱 관련 정보는 https://www.biostars.org/p/15847/ 이 곳에서 얻었는데, bam 파일은 companion file 인 index 파일을 갖을 수 있다. 이것은 외부에 저장되는 bam 파일의 인덱스 테이블이다. 이 테이블을 통해 프로그램이 bam 파일의 원하는 위치로 점프할 수 있다.


왜 platypus 파일에서 variant calling 할 때 인덱싱된 bam 파일을 제공하라고 하는지 알 것 같다. 인덱스 테이블을 통해 원하는 시퀀스로 점프할 수 있게 하는것 이다. 이 index 파일은 bam 파일과 똑같은 이름에 끝에만 .bai 를 붙인다. (bam 파일 이름이 ch1.bam 이면 인덱스 파일은 ch1.bam.bai 이다. 이러한 naming을 통해 해당 인덱스 파일이 어느 bam 파일로부터 나왔는지를 알 수 있다.


bam 파일 인덱싱하는 법은 쉬운데 samtools 설치 후


samtools index bamfile.bam


를 실행하면 된다.


http://hgdownload.cse.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeUwRepliSeq/


이곳에서 bam 파일을 아무거나 다운 받은 후 테스트 해보자. 제일 위에 있는 것을 다운 받은 후 파일명을 bamfile.bam으로 바꾸었다. 근데 위 command를 실행하니 오류가 떴다. 검색해 보니 먼저 bam파일을 sorting을 한 후 indexing 을 해야하는 것 같다.


samtools sort bamfile.bam

samtools index bamfile.bam


를 실행한다. 참고로 samtools 명령어 모음집은 아래 링크에서 찾을 수 있다.


http://www.htslib.org/doc/samtools.html



반응형

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

Lastz 설치 및 테스트  (0) 2017.08.07
Platypus 를 통한 variant calling  (0) 2017.08.07
platypus 설치  (0) 2017.08.07
samtools 설치시 에러 해결  (0) 2017.07.16
윈도우 우분투에 GATK 설치하기  (0) 2017.06.24
반응형

/* 2017.8.7 */


공부와 메모를 위한 포스팅입니다.


platypus 설치 링크


http://www.well.ox.ac.uk/platypus

https://github.com/andyrimmer/Platypus


위의 매뉴얼대로하면 된다.

압축파일을 다운받고 빌드하면 설치 완료.

또한 두 번째 github 링크 주소에서 나오듯이 htslib를 설치하여야 한다. (dependancy가 있다.)


platypus는 haplotype variant calling 하는 프로그램.

command line에서 실행할 때는 파이썬 프로그램을 command line에서 실행하는 것처럼 하면 된다.


platypus 실행


가장 간단하게 platypus를 실행하는 방법은


python Platypus.py callVariants --bamFiles=input.bam --refFile=ref.fa --output=VariantCalls.vcf


플라티푸스 폴더에 들어가서 저 명령어를 실행하는 것인데,

이 때, 1개 이상의 BAM 파일을 인풋으로 제공할 수 있으며, reference file은 fast파일로 제공하면된다.

또한 BAM 파일은 samtools나 이와 비슷한 프로그램으로 indexing이 되어있어야하며,

FASTA 파일도 마찬가지로 "samtools faidx" 나 이와 비슷한 프로그램으로 indexing 되어있어야한다.


아웃풋은 1개의 .vcf 파일과 log 파일이다.

log 파일의 최하단에 'Finished variant calling' 메시지를 보고 제대로 작동하였음을 확인할 수 있다.


그러면 이제 samtools로 bam 파일과 fasta 파일을 indexing 하는 것을 해보자.

반응형

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

Platypus 를 통한 variant calling  (0) 2017.08.07
bam 파일 인덱싱  (0) 2017.08.07
samtools 설치시 에러 해결  (0) 2017.07.16
윈도우 우분투에 GATK 설치하기  (0) 2017.06.24
non-coding RNA는 어떻게 만들어지나?  (0) 2017.05.28
반응형

수식없이 이해하는 Gaussian Mixture Model


/* 2017.8.4 by. 3개월 */


개요


머신러닝에서 자주 사용되는 Gaussian Mixture Model(GMM)을 알아보겠습니다. GMM은 머신러닝에서 Unsupervised Learning(클러스터링)에 많이 활용이 됩니다. 하지만 다른 K-means와 같은 클러스터링 알고리즘과는 다르게 통계적인 용어나 수식 때문에 한 번에 이해하기가 어렵습니다. 이 포스팅에서는 수식 없이 기초적인 통계 수준에서 Gaussian Mixture Model을 이해할 수 있게 글을 써보려고 합니다.


우선 GMM을 알기 위해서는 Mixture Model을 알아야합니다. Mixture Model 전체 분포에서 하위 분포가 존재한다고 보는 모델입니다. 즉, 데이터가 모수를 갖는 여러개의 분포로부터 생성되었다고 가정하는 모델입니다. 책에서는 보통 이를 두고, "Unsupervised Learning의 모수적 접근법"이라고 합니다. 


이 중에서 가장 많이 사용되는 가우시안 믹스쳐 모델(GMM)은 데이터가 K개의 정규분포로부터 생성되었다고 보는 모델입니다.


<표준 정규분포의 pdf>


샘플 데이터 생성


예를 들어, A, B, C라는 세 종류의 정규분포의 PDF(probability density function)를 상상해봅시다. GMM은 데이터가 이 3가지 정규분포중 하나로부터 생성되었으며, 또 그 안에서 random하게 정규분포 형태를 갖고 생성되었다고 보는 모델입니다.


<3개의 정규분포의 pdf>


정규분포 1 : 평균 = -0.5, 표준편차 = 0.2 (파란색)

정규분포 2 : 평균 = -0.1, 표준편차 = 0.07 (주황색)

정규분포 3 : 평균 = 0.2, 표준편차 = 0.13 (녹색)


<3개의 정규분포로부터 랜덤하게 생성된 데이터>


정규분포 1로부터 2000개, 정규분포 2로부터 5000개, 정규분포 3으로부터 10000개의 데이터를 랜덤하게 생성 후, 분포를 알아보기 위해서 그린 히스토그램입니다. 지금 우리는 데이터가 어느 분포로부터 나왔는지를 알기 때문에 색을 통해서 데이터를 구분하고 있습니다. 하지만 우리가 실제로 보는 데이터는 바로 이 데이터들을 모두 합친 모양일 것입니다.


<실제 업무에서 보게되는 데이터>


세 종류의 데이터를 모두 합치면 위와 같은 모양이 됩니다. 여러분들은 이 데이터를 보고 "아 왠지 데이터가 3개의 정규분포로부터 생성되었을 것 같아." 라고 생각하고, GMM을 적용시키면 되는 것입니다. 그림을 보면 무엇이 떠오르시나요?


첫 번째, 3개의 정규분포의 평균과, 분산을 어느정도 짐작할 수 있습니다.

두 번째, 각각의 분포로부터 생성되는 데이터의 양의 차이가 있습니다.


즉, 우리가 알아야할 건 총 9개입니다. 데이터를 통해 이 9개의 모수를 알아내야합니다. (세 가지 분포의 평균과 모수, 세 가지 분포의 Weight) 이 9개의 모수를 통해 데이터의 분포를 설명할 수 있는 혼합 PDF를 만들어낼 수 있는 것이죠.


모수 추정


GMM에서의 모수는 두 가지 종류가 있습니다. 첫 번째는 3가지 정규분포 중 확률적으로 어디에서 속해있는가를 나타내는 Weight 값이고, 두 번째, 각각의 정규분포의 모수(평균, 분산)입니다. 첫 번째 종류의 모수를 잠재변수 라고 부르며, 잠재변수가 포함된 모델은 Mixture Model에서의 모수 추정은 MLE(maximum likelihood estimation)으로 구할 수 없기 때문에 EM(Expectation Maximazation)이라고 부르는 알고리즘을 통해 iterative하게 구하게 됩니다. (왜냐하면 잠재변수가 포함되었기 때문에 likelihood function을 미분할 수가 없기 때문입니다. - 이 부분은 EM 알고리즘을 공부하시면 됩니다.) GMM에 대한 이해가 우선이므로, 이 포스트에서는 EM 알고리즘을 통해 Mixture Model의 모수를 추정하는 방법은 다루지 않겠습니다.



실제 모수와 추정된 모수의 비교


모수 추정은 파이썬 sklearn 패키지의 GaussianMixture 모듈을 이용하였습니다.


실제 모수


Weight1 = 2000/(2000+5000+10000) = 0.117

Weight2 = 5000/(2000+5000+10000) = 0.29

Weight3 = 10000/(2000+5000+10000) = 0.588

평균1 = -0.5

평균2 = -0.1

평균3=  0.2

표준편차1 = 0.2

표준편차2 = 0.07

표준편차3 = 0.13


추정된 모수


Weight1^ = 0.100714

Weight2^ = 0.39059817

Weight3^ = 0.50868783

평균1^ = -0.54073433

평균2^ = -0.07930454

평균3^ =  0.22779283 

표준편차1^ = 0.1680513611965104

표준편차2^ = 0.094137665150565528

표준편차3^ =  0.11380030755670215





데이터의 분포와 데이터를 통해 추정한 모수를 통해 그린 혼합 모델의 PDF입니다. 물론 왼쪽 그림은 히스토그램이라 Y축이 빈도이고, 오른쪽그림은 PDF이기 때문에 scale은 다르지만 모양이 거의 같다는 것을 알 수 있습니다. sklearn의 GaussianMixtureModel 패키지가 모수를 잘 추정해준 것입니다. 혼합모델의 PDF는 구해진 모수를 통해 구할 수 있는데 혼합모델PDF = Weight1*정규분포1PDF + Weight2*정규분포2PDF + Weight3*정규분포3PDF로 구할 수 있습니다.



클러스터링


모수 추정을 완료하였으면 클러스터링은 쉽습니다. 어떤 데이터를 관측하였을 때, "이 데이터가 어떤 분포에서 왔는가?" 를 확률적으로 알아내기만 하면 됩니다. 즉, 예를 들어 데이터 -1.0을 관찰하였을 때, 정규분포1에서 -1.0을 관찰하였을 확률, 정규분포2에서 -1.0을 관찰하였을 확률, 정규분포3에서 -1.0을 관찰하였을 확률을 비교하여 가장 큰 확률을 갖는 정규분포로 이 데이터를 분류하면 됩니다. 그러면 어떤 정규분포에서 그 데이터를 관찰하였을 확률을 어떻게 구할까요? 바로 p-value를 이용해서 구할 수 있습니다.



반응형
반응형

아나콘다에서 제공하는 IDE인 Spyder를 아나콘다 virtual environment 위에서 실행하기 위해서는 Spyder를 virtual environment 안에도 설치를 해야한다.

conda install -n myenv spyder

myenv는 직접 지정한 virtual environment 이름이다. 위 명령어를 통해 virtual environment 상에 spyder를 설치하게 되고, 그 환경에서 spyder를 실행할 수 있다.


설치 후,


윈도우의 경우


activate myenv spyder

명령어를 통해 해당 virtual environment 안에서 spyder를 실행할 수 있다.


(MAC은 activate 대신에 source activate)

반응형
반응형


Framinghum Heart Study Stroke 모형


논문 Probability of Stroke: A Risk ProfileFrom the Framingham Study (1991)


질병의 위험도 예측 모형은 어떤 질병이 향후 t년간 발생할 확률을 예측하는 모형이다. 위험도 예측 모형은 다양한 모델로 구축할 수 있는데, Cox-proportional Hazard 모형을 많이 사용한다. 질병 발생이 성별로 양상이 다른 경우가 많아 성별로 다른 위험도 예측 모형을 만드는 경우가 많다. 이 논문에서도 성별로 다른 예측 모형을 구축하였다. 이 논문은 Framinghum Heart Study 코호트를 통하여 Stroke의 위험도 예측 모형을 구축하였다.


이 연구에서 Stroke는 아래와 같이 정의하였다.



Atherothrombotic brain infarction : 죽상혈관 뇌경색

Transient ischemic attack only : 일시적인 허혈성 발작

Cerebral embolus : 뇌색전 (ischemic attack의 원인이라고 한다.)

Intracerebral hemorrhage : 출혈성 뇌혈관 질환

Subarachnoid hemorrhage : 지주막하 출혈


위 논문에서 위험도 예측 모형에 사용한 변수 및 회귀 계수는 아래와 같다.






이를 식으로 표현하면 아래와 같다.


p = 1-S(t)^B

(p는 t년 안에 stroke 발생 확률)


이 때,


A = L-M

B = e^A

L = 0.0505xAge+0.0140xSBP-l-0.3263xHyp Rx+0.3384xDM+0.5147xCigs-t-0.5195xCVD+0.6061xAF+0.8415xLVH

M = 0.0505xMeanAge+0.0140xMeanSBP-l-0.3263xMeanHypRx+0.3384xMeanDM+0.5147xMeanCigst 0.5195xMeanCVD+0.6061xMeanAF+0.8415xMeanLVH


(MeanXXXX은 stroke 발생자의 평균 값. 예를 들어 MeanAge는 stroke 발생자의 평균 나이)



이 연구에서 stroke 발생자의 위험인자들의 평균값은 아래와 같다.




또한 stroke 없이 t년간 생존할 확률 S(t)는 성별로 아래와 같이 정의된다.


남자


여자



예제

예를 들어, 70세의 남성이며 수축기혈압이 140mmHg, 흡연자, 고혈압약 미복용, 당뇨병 안걸림, 심세동 및 심방조동 과겨력 X, 좌심실 비대 X인 사람을 생각해보자. 그러면,



L=0.0505x70+0.0140x140+0.3263x0+0.3384x0+0.5147x1+0.5195x0+0.6061x0+0.8415x0=6.0097

또한 M = 5.6770 (Table2에 제시된 평균값 대입)


따라서,


A = 6.0097-5.6770 = 0.3327

B = e^A = e^0.3327 = 1.3947

p=1-S(10)^B= 1-0.9044^(1.3947) = 1-0.8692= 0.1308 = 13.08%




반응형
반응형

SRY Gene


생물학에서 성염색체의 유전자형이 XX이면 여자, XY이면 남자라는 것은 많은 분들이 생물 시간에 배워서 잘 아실 것입니다. 인간의 유전체는 22쌍의 상염색체와 1쌍의 성염색체로 이루어져 있으며, 일반적으로 성염색체가 XX면 여자, XY면 남자로 태어나게 됩니다. 왜 XX면 여자이고, XY는 남자가 되는 것일까요? 유전자 발현 측면에서 보면 Y 염색체에 존재하는 SRY(sex-determining region Y) Gene에 의하여 남자와 여자의 차이가 생긴다고 할 수 있습니다. SRY Gene이 발현하여 SRY Protein 을 생성하게되면 이것이 마치 전사인자(transcription factor)처럼 작용하게 됩니다. 이것이 DNA 특정 부위에 붙여서 특정 gene의 활성화를 돕게 되는 것입니다. 예를 들어, SRY Gene의 산물인 SRY Protein이 상염색체의 SOX9 gene을 활성화시키면 세정관과 고환을 형성하게됩니다. 또한 SRY gene의 산물은 남성으로의 분화를 도우면서 난소, 나팔관 등의 여성의 생식기관의 형성은 억제시킵니다. 여성도 상염색체 상에 SOX9 gene을 갖고 있으나, SRY Gene이 없으므로 활성화되지 않는 것입니다.



SRY Gene의 돌연변이


남성과 여성의 구분이 특정한 유전자에 의해 일어나기 때문에 이 유전자에 돌연변이가 생기면, XY 염색체를 갖은 남자, XX 염색체를 갖은 여자가 태어날 수도 있습니다. Swyer Syndrome(스와이어 증후군)은 XY 염색체를 가지고 있으나 SRY gene의 mutation에 의해 제대로 발현하지 못하여 XY 염색체를 갖고 태어나는 경우로 이 때 XY 염색체를 갖은 여성이 태어나게 됩니다. 이와 비슷한것은 androgen insensitivity syndrome(안드로겐 무감성 증후군)이 있는데 이는 남성호르몬을 수용하지 못해 XY 염색체를 갖은 여성이 생기는 경우입니다.


반면 46, XX testicular disorder of sex development 라는 것도 있는데, 매우 드문 증후군으로 X, Y 간의 translocation에 의해 SRY Gene이 X 염색체에 위치하여 XX 염색체를 가짐에도 불구하고 남성이 되는 것입니다.



Y 염색체 상에서의 위치


<Y 염색체>


SRY 유전자는 Yp11.2에 있으며 이 뜻은 Y 염색체의 p arm의 11.2 position에 SRY 유전자가 위치한다는 뜻입니다. p arm이란 염색체를 동원체를 기준으로 나눴을 때 짧은 부분을 말합니다.




참고


https://ghr.nlm.nih.gov/gene/SRY#conditions

http://blog.naver.com/shinefact/90172920000

반응형
반응형

Keras 모델 저장하고 불러오기


/* by 3months. 2017.7.19 */


keras를 통해 MLP, CNN 등의 딥러닝 모델을 만들고, 이를 학습시켜서 모델의 weights를 생성하고 나면 이를 저장하고 싶을 때가 있습니다. 특히 weights 같은 경우는 파일 형태로 저장해놓는 것이 유용한데, 파이썬 커널을 내리는 순간 애써 만든 weights 가 모두 메모리에서 날라가 버리기 때문입니다. keras에서는 모델과 weights의 재사용을 위해 이를 파일형태로 저장하는 라이브러리를 제공하며, 이를 통해 모델과 weights를 파일 형태로 저장하고 불러올 수가 있습니다.


Keras에서 만든 모델을 저장할 때는 다음과 같은 룰을 따릅니다.

  • 모델은 JSON 파일 또는 YAML 파일로 저장한다.
  • Weight는 H5 파일로 저장한다.


아래는 모델을 저장하고 불러오는 실습 코드입니다.



라이브러리 임포트

from keras.models import Sequential
from keras.layers import Dense
from keras.callbacks import ModelCheckpoint
import matplotlib.pyplot as plt
import numpy
import pandas as pd


데이터 로드

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']

dataframe = pd.read_csv(url, names=names)
array = dataframe.values

X = array[:,0:8]
Y = array[:,8]


모델 생성

# create model
model = Sequential()
model.add(Dense(12, input_dim=8, kernel_initializer='uniform', activation='relu'))
model.add(Dense(8, kernel_initializer='uniform', activation='relu'))
model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))

# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])


모델을 JSON 파일 형식으로 만들어 저장하기

model_json = model.to_json()
with open("model.json", "w") as json_file : 
    json_file.write(model_json)


Weight를 h5 파일 포맷으로 만들어 저장하기

model.save_weights("model.h5")
print("Saved model to disk")


저장된 JSON 파일로 부터 모델 로드하기

from keras.models import model_from_json json_file = open("model.json", "r") loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json)


로드한 모델에 Weight 로드하기

loaded_model.load_weights("model.h5") print("Loaded model from disk")


모델 컴파일 후 Evaluation

loaded_model.compile(loss="binary_crossentropy", optimizer="rmsprop", metrics=['accuracy'])

# model evaluation
score = loaded_model.evaluate(X,Y,verbose=0)

print("%s : %.2f%%" % (loaded_model.metrics_names[1], score[1]*100))


반응형
반응형

Pleiotropy


  • 하나의 유전자가 여러개의 표현형질에 영향을 줌.  (one gene => n pheynotype)
  • ex) 쥐의 rhino 유전자가 homozygous인 경우 무모 형질과 발톱의 이상신장 형질을 동시에 보인다.


Polygenic Inheritance


  • ploygenic Inheritance이란 여러개의 유전자가 하나의 표현형질의 영향을 주는 현상을 말한다. (n gene => 1 phenotype)
  • 피부색, 키와 같은 phenotype이 대표적인 polygenic inheritance의 예이다.
  • 예를 들어 3개의 유전자가 피부색에 영향을 미친다고 가정해보자. A 유전자, B 유전자, C 유전자.
  • AaBbCc * AaBbCc 의 조합결과 64개의 가능한 조합이 있고, 이를 통해 7개의 phenotype이 형성이된다.
  • 이 phenotype의 분포를 보면 중심극한정리에의해 아래와 같이 정규분포를 나타내게 된다.




반응형
반응형

http://www.htslib.org/download/


위 웹사이트에서 samtools를 다운받고 설치하는 도중에 에러가 출력되면서 설치가 제대로 되지 않는 문제가 있었다.



문제

cd htslib-1.5 && make lib-static
make[1]: Entering directory `/mnt/c/samtools-1.5/htslib-1.5'
gcc -g -Wall -O2 -I.  -c -o cram/cram_io.o cram/cram_io.c
cram/cram_io.c:60:18: fatal error: lzma.h: 그런 파일이나 디렉터리가 없습니다
 #include <lzma.h>
                  ^
compilation terminated.
make[1]: *** [cram/cram_io.o] 오류 1
make[1]: Leaving directory `/mnt/c/samtools-1.5/htslib-1.5'
make: *** [htslib-1.5/libhts.a] 오류 2



해결

apt-get install -y liblzma-dev


반응형

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

bam 파일 인덱싱  (0) 2017.08.07
platypus 설치  (0) 2017.08.07
윈도우 우분투에 GATK 설치하기  (0) 2017.06.24
non-coding RNA는 어떻게 만들어지나?  (0) 2017.05.28
tRNA란 무엇인가?  (0) 2017.05.25
반응형

TF-IDF를 통해 sentence classification 해보기


/* 2017.7.7 by 3months.*/


TF-IDF 는 TF/DF 이며, TF(Term Frequency)와 DF(Document Frequency)는 아래와 같이 정의된다.


TF : 현재 문서에서 단어 A가 나타난 횟수

DF : 모든 문서에서 단어 A가 나타난 총 횟수


예를 들어 문서1에서 Mars라는 단어가 3회 나타났고, 모든 문서를 통틀어서 5번 나왔다고 하면

TF-IDF 값은 3/5 = 0.6이다.


문서1에서 Have라는 단어가 100회 나타났고, 모든 문서를 통틀어서는 100000번 나왔다고 하면

TF-IDF 값은 100/100000 = 0.001 이다.


이러한 방식으로 어떠한 단어에 대한 TF-IDF 값을 통해 문서를 feature화 할 수 있고, 이것은 특정 단어의 상대적인 빈도를 나타내주는 값이므로 합리적으로 그 문서를 나타낼 수 있는 feature가 된다.


TF-IDF 모델로 sentence classification


from sklearn.feature_extraction.text import TfidfVectorizer
sentences = ['This is the first document.',
              'This is the second document.',
              'And the third one.',
              'Is this the first document?']
vect = TfidfVectorizer()
X = vect.fit_transform(sentences)
X.todense()


위와 같이 4개의 문장이 있다고 해보자. 그러면 sklearn 라이브러리에서 제공하는 함수를 통해 이를 tfidf vector로 만들 수 있다. 각각의 sentence에 이것을 적용하면 결과 X는 매트릭스가 될 것이다.


y = [1,2,3,4]


위와같이 label을 임의로 정의해보자.


from sklearn.linear_model import SGDClassifier
model = SGDClassifier(loss='logloss')
model.fit(X, y)


tf-idf vectorization을 통해 sentence의 feature를 정의했으면 다시 sklearn의 라이브러리를 이용해 classifier를 만들고, 적합을 시키면된다. 여기서는 SGDClassifier (Stochastic Gradient Descent)라는 linear classifier를 사용하였는데, 아무 classifier나 사용해도된다. (ex LogisticRegression 등등)


X_pred = vect.transform(['My new document third'])

y_pred = model.predict(X_pred)


이제 테스트 데이터를 위와 같이 정의하고 구축한 모델로 예측해보자.


print y_pred


결과

[3]


구축한 모델은 해당 문장을 3번으로 분류했다. third라는 단어가 포함돼서 그런 것 같다. 만약 테스트 데이터에 second라는 단어나 first를 포함시켜보면 모델이 다른 label로 분류한다는 것을 확인할 수 있다.


반응형
반응형