for file in `ls *.gz`; do gunzip "${file}"
-d "${file:0:-4}"; done
for file in `ls *.zip`; do unzip "${file}"; done
2018.03.06
헬스케어를 위한 인공지능2018.03.04
Python - SSL 에러 해결 12018.02.26
R - 특정 버전의 패키지 설치하기 22018.02.25
Python - Pandas isin 구문2018.02.20
R - 리눅스 여러개의 독립적인 R Version 설치하기2018.02.20
GATK4 설치2018.02.18
R - csv 파일 인코딩 문제 해결2018.02.15
리눅스 파일 이름으로 하위 디렉토리의 파일 삭제2018.02.10
리눅스 현재 폴더 내 모든 zip 파일 압축 풀기2018.01.30
역학 연구에서의 스터디 디자인인공지능, 머신러닝은 더 이상 현실 세계와 동떨어진 이야기가 아니다. 헬스케어 분야를 리드하는 기업들은 인공지능, 머신러닝 기술들을 자신의 분야에 이미 적용시키고 있다. 이는 AI 기술들이 헬스케어 분야에 실용적으로 적용되고 있다는 것을 뜻한다. 회사들은 AI를 활용하여 자신들의 서비스를 개선하고, 수익을 증대하며 발생할 수 있는 리스크를 줄인다. 본 포스팅에서는 AI가 헬스케어 분야에 적용되어 불러올 수 있는 사회적 가치와 응용 사례를 살펴보려고 한다.
AI FOR GOOD
기술은 그 자체로도 중요하지만 사회적으로 그 기술을 활용하여 무언가의 이득을 얻을 때 그 가치가 가장 크다고 생각한다. 예를 들어, 기존에 해결할 수 없던 문제를 해결한다거나, 어려웠던 문제를 더 쉽게 만든다거나, 돈을 더 벌어준다더가 하는 것이다. AI FOR GOOD 이라는 말은 이러한 여러 사회적 가치 중 "공익"에 관한 것이다. 인공지능이 헬스케어분야에 적용하는 것의 가장 큰 가치는 바로 공익의 증진이다. AI의 헬스케어 적용은 기존의 헬스케어 분야에서 기존의 해결하기 어렵거나, 해결하는데 시간이 오래걸렸던 문제를 해결하고, 가속화하여 공익의 증가에 기여한다.
AI-based Medicine을 통한 의학 분야의 돌파구
Accenture에 따르면, 현재 가장 큰 가치를 갖고 있는 기술들은 로봇 보조 수술, 가상 환자 돌봄 서비스(virtual nursing assistant), 행정 보조 기술 등이다. 이는 빅데이터, 인공지능 등의 키워드가 뜨기전부터 의학 분야에 적용되어온 기술들이다. 하지만, 의영상 분야도 큰 가치를 갖고 있다. 왜냐하면 취약 계층의 경우, 질병을 진단 받을 때, 의영상 진단 기술의 도움을 받기 힘들다. 전문가의 진단은 비싸며, 일정 수준 이상의 수요를 필요로하기 때문이다. 이러한 취약 계층에 AI 기반의 의영상 진단 기술이 적용될 경우, 공익에 큰 기여를 할 수 있다. 본 포스팅에서는 AI 기반 의료의 실제 사례를 몇 가지 살펴보려고 한다.
AI 기반 의료의 실제 사례
- 개발 도상국 국가에서 X-RAY를 결핵 환자 발견
의영상 이미지에서 무언가의 패턴을 찾는 것은 가장 유망하며, 실제로 AI가 많이 적용되고 있는 분야이다. 많은 연구자들이 이러한 AI 기반의 의영상 진단 기술을 연구하고 있다. (원논문) 이러한 기술들이 개발 도상국 국가에서 활용된다면, 영상의학 전문의의 도움 없이도 결핵에 걸린 환자를 발견해 낼 수 있다. 또, 한 국가의 여러 지역에서 이런 기술을 적용한다면, 결핵 취약 지역을 발견해 낼 수 있다. 만약 결핵 예방, 치료 사업을 한다고 하면, 이러한 방식의 접근 법을 통해 정책의 우선순위를 결정할 수도 있다.
- 응급실에서의 환자 뇌출혈 발견
이스라엘의 회사인 MedyMatch와 IBM Watson은 응급실에서 환자의 뇌출혈을 확인하는데 인공지능을 활용하고 있다.
- 피부 사진을 통한 암 진단
암진단에도 종종 AI가 응용된다. CT, MRI, X-ray 등이 암진단을 위한 의영상 기술로 적용되고 있지만, 이 기술들을 통해 암 진단을 하지 못할 경우, 치명적이다. 암환자가 아닌데 암환자로 진단하는 경우 (false positive, 1종 오류) 보다 암환자인데 암환자로 진단하지 못한 경우(false negative, 2종 오류), 환자의 생명에 영향을 주는 치명적인 판단 오류라고 볼 수 있다. 또한 false negative를 위해 false positive를 늘리는 소위 과잉진료로 인한 문제도 심각하다. 이는 환자에 생명에 영향을 주진 않지만, 잘못된 진단 결과로 인해 의료 비용을 높이고 환자의 심적 부담을 증가시킨다. 따라서 정확한 암 진단 기술이 중요하며, 이 진단 과정에 AI가 적용되어 진단의 속도와 정확성을 높이려는 시도가 이루어지고 있다.
Stanford의 AI 팀은 피부 이미지를 통해 피부암을 진단하는 AI 기술을 내놓았다. 이 AI 기술은 21명의 피부과 의사들과 비교해 진단 능력이 떨어지지 않았다.
- CT 사진을 통한 폐암 진단
Enlitic은 회사는 폐 CT 사진을 통해 폐암을 진단하는 AI 기술을 개발하였다. 딥러닝을 활용해 병변의 존재와 그 위치를 파악하는 것이다. 회사는 정확도가 영상의학전문의의 50% 이상이라고 주장한다.
역사상 많은 기술들이 과대 선전되어 왔다. 누군가는 인공지능 기술이 과대 포장되고 실체는 별로 없는 기술이라고 생각할 수 있다. 또한 누군가는 인공지능이 실제로 산업에 적용되어 가치를 불러올 수 있을까하는 의문을 제기할 수 있다. 인공지능이 인간을 완전히 대체하는 것은 어려울지도 모른다. 오로지 데이터 기반 접근법이라는 문제로 인해, 적절한 수의 훈련 데이터 없이는 동작할 수 없으며, 과적합의 가능성이 있다. 또한 AI의 경우 기기별 차이를 감안하여 모든 기계에 대해 robust한 모델을 만드는 것이 아직까지는 완벽하지 않은 경우가 많다. 하지만, 확실한 것은 특정한 제한된 범위의 태스크에서는 AI가 인간보다 나을 수 있다는 것이다. 현재 의료 산업 분야에 활발히 적용되고 있는 인공지능 기술과, 인공지능 스타트업에 투자되고 있는 금액의 규모가 인공지능의 의료분야에서의 가능성을 보여준다.
참고
https://sigmoidal.io/artificial-intelligence-and-machine-learning-for-healthcare/
임상시험의 단계 정리 (0) | 2019.10.25 |
---|---|
의생명 분야에서의 신경망 모델 (Deep learning in biomedicine) (0) | 2018.12.02 |
Medical Image 분야의 Deep Learning 응용 (0) | 2017.10.31 |
Framinghum Heart Study의 Stroke 예측 모형 (0) | 2017.08.03 |
4p 의학의 개념 (0) | 2017.01.31 |
Python “SSL: CERTIFICATE_VERIFY_FAILED” Error 해결법
Keras에서 ResNet의 weight를 다운 받다가 이러한 에러가 났다. 환경은 리눅스, 파이썬 3 버전이다.
base_model = ResNet50(weights='imagenet', pooling=max, include_top = False)
이 코드를 실행시키다가 에러가 났는데 h5 파일을 다운 받아야하는데, SSL certificate 문제가 있다면서 다운을 받지 못하는 문제이다.
http://blog.pengyifan.com/how-to-fix-python-ssl-certificate_verify_failed/
위 링크를 보고 해결하였는데,
첫번째 해결법은 PYTHONHTTPSVERIFY 환경변수를 0으로 설정하는 방법이다.
export
PYTHONHTTPSVERIFY=0
python your_script
두 번재 해결법은 대안적인 방법으로 문제가 있는 코드 앞에 아래 코드를 넣는 방법이다.
import
os, ssl
if
(
not
os.environ.get(
'PYTHONHTTPSVERIFY'
, '')
and
getattr
(ssl,
'_create_unverified_context'
,
None
)):
ssl._create_default_https_context
=
ssl._create_unverified_context
Python - Pandas 튜토리얼 (데이터프레임 생성, 접근, 삭제, 수정) (12) | 2018.03.21 |
---|---|
Python 중고급 - 정규표현식, 클래스 (0) | 2018.03.18 |
Python - Pandas isin 구문 (0) | 2018.02.25 |
Python - sklearn LabelEncoder, OnehotEncoder 사용 (0) | 2017.11.01 |
Python - 폴더 파일 리스트 가져오기 (4) | 2017.10.31 |
R - 특정 버전의 패키지 설치하기
우선 패키지의 버전을 알아보는 방법은 R을 실행 시킨 후,
library(package_name)
sessionInfo()
를 입력하면 패키지의 버전을 알 수 있다.
특정 버전의 R 패키지를 설치하는 방법은 우선, Install.packages("devtools")로 devtool을 설치한다.
require(devtools)
install_version("ggplot2", version = "0.9.1", repos = "http://cran.us.r-project.org")
위와 같은 방식으로 특정 버전의 CRAN 패키지를 설치할 수 있다. 이미 패키지가 설치된 상태에서도 install_version 을 활용하면 버전이 바뀌어 다시 설치되기 때문에, 패키지를 다운그레이드 시킬 때도 유용하게 쓸 수 있다.
R 유명한 패키지 정리 (0) | 2018.03.19 |
---|---|
R - R에서 날짜 변수 다루기, 시계열 그래프 (as.POSIXct) (0) | 2018.03.09 |
R - csv 파일 인코딩 문제 해결 (0) | 2018.02.18 |
R - 종속변수가 순서 척도인 로지스틱 회귀분석 (4) | 2017.12.03 |
R - Multinomial Logistic Regression(다중 로지스틱 회귀분석) (0) | 2017.11.22 |
Python - Pandas isin 구문
Python에서 테이블 형식의 데이터를 읽고 처리할 때 가장 많이 쓰이는 pandas 라이브러리에서는 다양한 데이터 처리 기능을 구현하고 있다. 이 중에 isin 구문은 열이 list의 값들을 포함하고 있는 모든 행들을 골라낼 때 주로 쓰인다.
예를 들어, 아래 예제를 보면
df = DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f']}) df.isin([1, 3, 12, 'a'])
이와 같이 이진값을 반환한다.
이를 그대로 쓰는 경우보다 Dataframe의 컬럼에서 어떤 list의 값을 포함하고 있는것만 걸러낼 때 isin 구문이 유용하다.
이러한 데이터프레임이 있을 때
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f']})
A | B | |
---|---|---|
0 | 1 | a |
1 | 2 | b |
2 | 3 | f |
A 컬럼의 값이 [1,3,12]를 포함하는 것만 골라낸다.
df[df['A'].isin([1, 3, 12])]
A | B | |
---|---|---|
0 | 1 | a |
2 | 3 | f |
Python 중고급 - 정규표현식, 클래스 (0) | 2018.03.18 |
---|---|
Python - SSL 에러 해결 (1) | 2018.03.04 |
Python - sklearn LabelEncoder, OnehotEncoder 사용 (0) | 2017.11.01 |
Python - 폴더 파일 리스트 가져오기 (4) | 2017.10.31 |
Python - Pandas 변수 정렬하기 (0) | 2017.10.24 |
R - 여러개의 독립적인 R Version 설치하기
리눅스에서 R을 사용하다보면 여러개의 R 버전을 독립적으로 유지하고 싶을 수 있다. 기존의 버전을 삭제하고 재설치하기에는 수많은 패키지들을 다시 설치해야하기 때문이다. 아래 github는 여러 R 버전을 독립적으로 설치하는 것을 해주는 shell script이다.
https://github.com/DominikMueller64/install_R_source
git commit https://github.com/DominikMueller64/install_R_source
위 명령어를 통해 쉘스크립트를 다운받고 폴더 안으로 들어간다. cd install_R_source
Example:
./install_R_source 3.4.1
R is then installed to
/usr/local/R/d.d.d
, where the executable is located at/usr/local/R/d.d.d/bin/R
. The shell scripts creates a symbolic link to/usr/bin/R-d.d.d
, such that the correct R version should be stared by typingR-d.d.d
in a shell.
설치 방법은 위와 같이 ./install_R_source 3.4.3 과 같은 식 커맨드에 입력하면 알아서 설치 및 경로 지정까지 해준다.
GATK4 설치
이곳에서 원하는 버전 zip파일 다운로드
https://github.com/broadinstitute/gatk/releases
예를 들어, 4.0.1.1 버전이면 다운로드를 받은 후,
unzip gatk-4.0.1.1
명령어를 통해 압축을 풀면 설치가 끝난다.
만약에 binary 파일을 다른 곳에 위치시키고 싶다면(예를 들어 /usr/bin), gatk 파일을 카피해서 원하는 폴더 (/usr/bin)으로 옮긴다.
cp gatk /usr/bin
하지만 binary 파일이 다른 파일들과 떨어져있을 경우, 기존 폴더의 경로를 명시적으로 지정해주어야한다. 이는 환경변수를 지정함으로써 할 수 있는데 환경변수 $ GATK_LOCAL_JAR 을 gatk-package-4.0.1.1-local.jar 파일의 위치로 지정하면 된다.
예를 들어, export GATK_LOCAL_JAR=/home/gatk-package-4.0.1.1-local.jar 을 통해 환경변수를 지정하면, binary 파일이 떨어져있어도 실행 가능하다.
Functional genomics - Chip-seq 의 기초 (1) | 2019.09.05 |
---|---|
Samtools, Bcftools 설치 방법 (1) | 2018.05.14 |
Chip-seq 데이터를 통한 binding motif 분석 [rGADEM] (0) | 2018.01.13 |
Variant calling 이란? (0) | 2017.11.20 |
IGV Tutorial [BAM File] (0) | 2017.10.16 |
R에서 csv 파일을 읽어들일 때 UTF-8 포맷의 텍스트 파일을 읽어오지 못하는 문제가 있었다.
temp <- read.table(path, sep=",", stringsAsFactors=FALSE, header=FALSE, nrows=10) head(temp)
V1 V2 V3 V4 V5 V6 V7 V8
1 4 01. 16. 18 \xec삤\xec쟾 08\xec떆 02遺\x84 25珥\x88,26.188 17.695 NA NA NA NA NA
2 5 01. 16. 18 \xec삤\xec쟾 08\xec떆 03遺\x84 25珥\x88,26.456 22.904 NA NA NA NA NA
3 6 01. 16. 18 \xec삤\xec쟾 08\xec떆 04遺\x84 25珥\x88,26.530 19.185 NA NA NA NA NA
4 7 01. 16. 18 \xec삤\xec쟾 08\xec떆 05遺\x84 25珥\x88,26.603 19.383 NA NA NA NA NA
5 8 01. 16. 18 \xec삤\xec쟾 08\xec떆 06遺\x84 25珥\x88,26.676 21.714 NA NA NA NA NA
6 9 01. 16. 18 \xec삤\xec쟾 08\xec떆 07遺\x84 25珥\x88,26.652 21.107 NA NA NA NA NA
위와 같이 파일이 깨지는 현상
temp <- read.table(path, sep=",", stringsAsFactors=FALSE, header=FALSE, nrows=10,fileEncoding = "utf-8")
Error in read.table(paste0(path, date, name, filename_hobo), skip = 5, :
입력에 가능한 라인들이 없습니다
In addition: Warning messages:
1: In readLines(file, skip) :
invalid input found on input connection 'C:\workspace\r\data\mongol\180116\1\MG2018_0116_KSY_HOBO.csv'
2: In readLines(file, skip) :
incomplete final line found on 'C:\workspace\r\data\mongol\180116\1\MG2018_0116_KSY_HOBO.csv'
이후에 읽으니까 파일 읽기에 성공하였다.
R - R에서 날짜 변수 다루기, 시계열 그래프 (as.POSIXct) (0) | 2018.03.09 |
---|---|
R - 특정 버전의 패키지 설치하기 (2) | 2018.02.26 |
R - 종속변수가 순서 척도인 로지스틱 회귀분석 (4) | 2017.12.03 |
R - Multinomial Logistic Regression(다중 로지스틱 회귀분석) (0) | 2017.11.22 |
R - 로지스틱 회귀분석(Logistic Regression) (6) | 2017.11.22 |
리눅스 하위 디렉토리의 특정 파일 삭제
$ find . -name '*.tmp' -exec rm {} \;
설명
find . -name '*.tmp' 는 현재 디렉토리 (.) 아래의 확장자가 tmp인 모든 파일을 찾아 출력한다. 디렉토리를 지정하고 싶다면 . 대신에 디렉토리 path를 찾아서 쓰면된다.
-exec rm {} \; 에서 {}는 find로 찾은 파일들을 나타낸다. -exec rm을 통해 찾은 파일들을 삭제한다
우분투 그룹 관련 명령어 정리 (0) | 2018.08.03 |
---|---|
리눅스 현재 폴더 내 모든 zip 파일 압축 풀기 (0) | 2018.02.10 |
XPress Engine 설치 방법 (0) | 2017.01.24 |
현재 폴더 내 모든 zip 파일의 압축을 푼다.
for file in `ls *.zip`; do unzip "${file}" -d "${file:0:-4}"; done
현재 폴더에 zip 파일의 이름과 같은 폴더가 생성이 되고, 각각의 폴더 아래에 zip 파일의 내용물들이 생성된다.
예를 들어, 1.zip, 2.zip 파일이 있으면, 1, 2폴더가 생성되고 그 아래에 각각 내용물이 생김
현재 폴더 내 모든 gz파일의 압축을 푼다.
for file in `ls *.gz`; do gunzip "${file}"
-d "${file:0:-4}"; done
for file in `ls *.zip`; do unzip "${file}"; done
우분투 그룹 관련 명령어 정리 (0) | 2018.08.03 |
---|---|
리눅스 파일 이름으로 하위 디렉토리의 파일 삭제 (0) | 2018.02.15 |
XPress Engine 설치 방법 (0) | 2017.01.24 |
역학 연구에서의 스터디 디자인을 한 눈에 볼 수 있는 테이블이다. 각각의 스터디 디자인에서 기술 연구, 분석 연구를 할 때 일반적으로 어떤 measure를 사용하는지, 그리고 스터디 디자인마다 장, 단점은 무엇인지 파악할 수 있다.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
쉽게 이해하는 민감도, 특이도, 양성예측도 (12) | 2018.08.08 |
---|---|
Nested case-control study와 Retrospective cohort study (0) | 2018.04.23 |
False Discovery Rate(FDR)이란? (6) | 2018.01.25 |
PBC(primary biliary cirrhosis) 데이터를 통한 생존분석 (0) | 2017.11.25 |
범주형 자료분석 - 맥니마 검정(McNemar Test) (4) | 2017.11.16 |