본문 바로가기

파이썬3

[scikit-learn] KneighborsClassifier의 OpenBLAS문제 해결법 1. 개요 이해는 안되지만 scikit-learn의 KneighborsClassifier와 같이 OpenBLAS를 이용해 multi-core기능을 활용하는 것들의 경우 그냥 실행하면 에러와 함께 강제 종료되는 경우가 있다.scipy가 업그레이드 되면 해결될거란 글도 봤지만 시도했던 것 중 된 것이 있어서 기록을 해둔다. 2. 해결책  해결책은 바로 OMP_NUM_THREADS 옵션을 조정하는 것이다. 이것은 OpenMP 라이브러리가 병렬 처리를 위해 사용하는 스레드 수를 설정하는 데 사용되는 환경 변수이다.  1) 터미널 상에서 지정하는 방식# 터미널 창에서 아래의 명령어를 실행한다.# 여기서 64는 컴퓨터의 threads에 적절히 맞춰서 사용해야한다.export OMP_NUM_THREADS=64 2) .. 더보기
기준값 (cutoff)에 따른 특이도 (specificity) 추이 계산을 위한 파이썬 함수 1. 개요 scikit-learn에서는 false positive rate (fpr)과 true positive rate (tpr) 또는 precision과 recall값 등에 대한 cutoff 별 계산값이 어떻게 되는지 쉽게 구해주는 함수가 제공되지만 specificity는 없는 문제가 있다.이를 위해 아래의 기능을 만들었다. 2. 방법y 라벨은 0과 1로 구성되어 있고 y_score 값이 어떤 모델에의해 주어진다고 가정하자.그러면 먼저 y_score를 기준으로 y 라벨을 오름차순으로 정렬을 해준다.이후 점수가 증가함에 따라 변화되는 true negative의 수를 구한다.true negative의 라벨이 0인 경우 y라벨에서 -1을 한 후 음수의 누적합을 구하면 된다.그리고 이를 절대값 (np.abs.. 더보기
기준값 (cutoff)에 따른 정확도 (accuracy) 추이 계산을 위한 파이썬 함수 1. 개요 scikit-learn에서는 false positive rate (fpr)과 true positive rate (tpr) 또는 precision과 recall값 등에 대한 cutoff 별 계산값이 어떻게 되는지 쉽게 구해주는 함수가 제공되지만 accuracy는 없는 문제가 있다.이를 위해 아래의 기능을 만들었다. 2. 방법y 라벨은 0과 1로 구성되어 있고 y_score 값이 어떤 모델에의해 주어진다고 가정하자.그러면 먼저 y_score를 기준으로 y 라벨을 오름차순으로 정렬을 해준다.이후 점수가 증가함에 따라 변화되는 true positive의 수를 구한다. 정렬된 값을 기준으로 누적합 (cumulative sum)을 구한 후, 각 cutoff 지점에서의 누적값을 빼면 해당 cutoff지점의.. 더보기
뉴턴의 이항정리를 활용한 원주율 계산법 1. 개요뉴턴 이전의 사람들은 원주율을 계산하는 방식은 아르키메데스가 만든 방식을 사용했다. 그의 방식은 반지름이 1인 원에 내접하는 정N면체와 외접하는 정X면체의 넓이를 구해서 원주율값을 구해나가는 것이었다. 예를들어 원에 외접하는 정사면체의 넓이는 4이고 내접하는 정사면체의 넓이는 2이므로 원주율은 2와 4 사이에 존재하는 것은 쉽게 알 수 있다. 이를 통해 아르키메데스는 정 96면체를 작도해서 3.16정도의 근사값을 얻었다. 뤼돌프 판 쾰런은 정 2^26면체를 활용해서 원주율의 35자리까지 근사했다. 이 때 걸린 시간은 28년이라고 한다. 그러다가 뉴턴은 이항정리를 활용해 원주율 계산방식을 매우 효율적으로 정확하게 계산하게 되면서 아무도 사용하지 않게 되었다. 지금은 라이프니츠의 교대급수를 사용하지.. 더보기
UMAP을 파이썬에서 사용하기 import umap.umap_ as umapimport matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.preprocessing import StandardScaler# Iris 데이터셋 로드iris = load_iris()X = iris.datay = iris.target# 데이터 스케일링scaler = StandardScaler()X_scaled = scaler.fit_transform(X)# UMAP을 사용한 차원 축소umap_model = umap.UMAP(n_neighbors=15, min_dist=0.1, n_components=2, random_state=42)X_umap = umap_model.fit_t.. 더보기
리스트 2개를 묶어서 정리해주는 기능 1. 개요a와 b라는 2개의 리스트를 딕셔너리로 만드는 기능은 간단하다dict(zip(a,b)) 이렇게 하면 a는 key가 되고 b는 value가 된다. 그런데, 이것은 적어도 a의 경우 중복이 없는 경우에만 가능하다.중복과 상관없이 묶어주는 기능을 그래서 따로 만들었다. 2. 기능import numpy as npdef grouper(a,b,progress_bar=True): ''' a를 기준으로 b 리스트를 묶어줌. a = ['a', 'a', 'c', 'd'] b = [1, 2, 2, 3] a와 b의 길이는 같아야함. 결과물은 {'a':[1,2], 'c':[2], 'd':[3]} ''' n=0 total_n=len(b) progress=np.a.. 더보기
슬라이싱 (slicing)을 통한 k-mer 생성기 def slicer(seq,peplen): ''' 정해진 길이로 sequence를 slicing해주는 명령어 seq : 서열정보 peplen : sliced peptide length ''' if len(seq) 더보기
python argparse 사용법 import argparse parser = argparse.ArgumentParser(description='프로그램에 대한 설명') # 입력받을 인자값 등록 # Default값이 없는 경우 parser.add_argument('--a', required=True, help='input에 대한 설명') # Default값이 있는 경우 parser.add_argument('--b', required=False, default='dev', help='default에 대한 설명') # 입력을 실행 def main(): # 입력받은 인자값을 args에 저장 args = parser.parse_args() print(args.a) print(args.b) if __name=='__main__': main() 더보기