python

    [python] 이진탐색 라이브러리 bisect

    이진탐색 알고리즘을 푸는 경우 유용한 bisect 라이브러리를 활용해본다. bisect_left(a,x) : 정렬된 순서를 유지하면서 배열 a에 x를 삽입할 가장 왼쪽 인덱스 반환 bisect_right(a,x) : 정렬된 순서를 유지하면서 배열a에 x를 삽입할 가장 오른쪽 인덱스 반환 bisect를 이용하여 값이 특정 범위에 속하는 데이터 개수 구하기 from bisect import bisect_left, bisect_right def count_by_range(a,left_value, right_value): right_index = bisect_right(a,right_value) left_index = bisect_left(a,left_value) return right_index - left_..

    [python] 예외처리 / EOF / try,except

    늘 조건문을 작성할 때는 if/else로 작성했기에 오류에 대한 예외처리를 해주는 try/except를 사용할 때는 흔하지 않았다. 하지만 백준 A+B-4 문제를 해결할 때는 try/except과정이 필수적으로 요구되었기에 다시금 들여다볼 수 있었다. 또한 input()과, sys.stdin.readline()의 구체적인 차이까지 다시 숙지했다. 1) input()과 sys.stdin.readline() 우선 input()과 달리 굳이 sys.stdin.readline()을 쓰는 이유는 많은 양의 데이터를 받아오는 상황에서 보다 효율을 높이기 위해 사용한다. 그래서 input() 한 단어로 간결하게 불러올 수 있는 것도 import sys: sys.stdin.readline()으로 받아오는 것이다. 하지..

    [python] zip함수 정리

    프로그래머스로 문제를 풀고 나서 다른 사람들의 풀이를 볼 때 흔히 zip()함수를 쓰는 것을 볼 수 있다. 늘 리스트나 문자열의 원소를 for문을 돌려서 자료를 하나씩 빼곤 했는데 여러 원소를 한 번에 빼내야 하는 경우 zip함수의 가독성이 더욱 높다고 판단했다! 1) 여러 변수의 객체를 인자로 받아 차례로 반환 * for문을 사용하는 경우 numbers = [1,2,3] letters = ['A','B','C'] for i in range(3): pair = (number[i],letters[i]) print(pair) *zip 함수를 사용하는 경우 number = '12345' upper = 'ABCDE' lower = 'abcde' for n,u,l in zip(number, upper, lower..

    [python] 재귀함수 파헤치기

    코딩테스트를 위해서는 알고리즘과 자료구조 공부가 필수적이라고 생각해 알고리즘 공부를 하고 있다. 여러 내용들 중에도 재귀함수가 은근 헷갈리고 어렵게 다가와 복습 겸 정리해보려고 한다. 우선 공부에 활용한 도서는 '모두의 알고리즘 with 파이썬'으로 '더북' 사이트에서는 각 챕터별로 내용이 요약되어 있어 해당 사이트를 활용하고 있다. https://thebook.io/006935/ 더북(TheBook): 모두의 알고리즘 with 파이썬 thebook.io 재귀함수 ? 우선 재귀함수란 함수가 자기 자신을 다시 호출하는 것을 뜻하는 함수이다. 가장 기본적인 예시로 def hello(): print('hello') hello() ## 함수 다시 호출 hello() 좋지 않은 예시이기는 하지만 이를 출력하면 '..

    [NLP] pipeline을 활용한 직관적인 코드짜기!

    2022.05.02 - [python/파이썬 머신러닝 완벽가이드] - [python] NLP 피처백터화 / 희소행렬 [python] NLP 피처백터화 / 희소행렬 2022.04.30 - [python/파이썬 머신러닝 완벽가이드] - [python] NLP 기초, 텍스트 전처리의 모든 것 [python] NLP 기초, 텍스트 전처리의 모든 것 텍스트 분석은 단어마다 쪼개는게 상당히 어렵고, 내 나름대로 coding-potato.tistory.com ** 본 포스팅은 앞선 글과 이어집니다! sklearn의 pipeline 클래스를 활용하면 피처 백터화와 ML알고리즘 학습/예측을 위한 코드 작성을 한 번에 진행할 수 있다. 이는 수행시간을 절약해주어 더욱 효과적인 코드를 작성하도록 도와준다!! Pipeline..

    [NLP] 피처백터화 / 희소행렬

    2022.04.30 - [python/파이썬 머신러닝 완벽가이드] - [python] NLP 기초, 텍스트 전처리의 모든 것 [python] NLP 기초, 텍스트 전처리의 모든 것 텍스트 분석은 단어마다 쪼개는게 상당히 어렵고, 내 나름대로 진입장벽이 꽤 높다고 생각해서 쉽게 도전하지 못했던 분야였다. 이번에 데이콘 NLP대회에 경험삼아 참가해서 여러 코드도 참고해 coding-potato.tistory.com 앞서는 NLP의 전반적인 설명과 텍스트 클렌징, 토큰화, 스톱워드 제거, Stemming/Lemmatization 에 대하여 개괄적으로 살펴보았다. 이번은 전처리된 텍스트를 어떤 방식으로 피처화를 진행하는지 살펴본다. 또한 단어를 피처화하게 되면 0값을 갖는 단어들이 무수히 많이 발생하게 되는데 ..

    [NLP] NLP 기초, 텍스트 전처리의 모든 것

    [NLP] NLP 기초, 텍스트 전처리의 모든 것

    텍스트 분석은 단어마다 쪼개는게 상당히 어렵고, 내 나름대로 진입장벽이 꽤 높다고 생각해서 쉽게 도전하지 못했던 분야였다. 이번에 데이콘 NLP대회에 경험삼아 참가해서 여러 코드도 참고해서 따라해보고 적용해봐야겠다는 생각에 기초부터 다지자!! 결심했다. [파이썬 머신러닝 완벽가이드]에서 나오는 텍스트분석은 어떤 프로세스로 분석을 전개해가야 하는지 틀을 잡을 수 있게 도와주었다. 텍스트 분석 수행 프로세스 1) 텍스트 사전 준비작업 ( 텍스트 전처리 ) : 텍스트를 피처로 만들기 전, 미리 클렌징, 대/소문자 변경, 특수문자 삭제, 단어토큰화 작업, 스탑워드 제거, 어근추출 등의 텍스트 정규화를 진행 2) 피처 백터화/추출 : 사전 준비작업으로 가공된 텍스트에서 피처를 추출하고, 이에 백터값 할당 => B..

    [python] SMOTE를 활용한 오버샘플링

    [python] SMOTE를 활용한 오버샘플링

    이번에는 SMOTE를 활용한 오버샘플링을 적용해보겠습니다. 일반적으로 언더샘플링보다 오버샘플링이 예측 성능상 더 유리한 경우가 많아 주로 사용됩니다. ## 오버샘플링? 이상 데이터와 같이 적은 데이터 세트를 증식하여 학습을 위한 충분한 데이터를 확보하는 방법으로, 동일한 데이터의 단순 증식은 과적합을 유발할 수 있기 때문에 의미가 없으므로 원본 데이터의 피처값들을 아주 약간씩 변형하여 증식 여기서 주의할 점은 SMOTE를 적용할 때는 반드시 학습 데이터 세트만 오버샘플링을 해야합니다!!! 검증 데이터 세트 혹은 테스트 데이터 세트를 오버샘플링 하는 경우 결국 원본 데이터가 아닌 데이터 세트에서 검증되기 때문에 올바른 검증이 되지 않습니다. 캐글의 Credit Card Fraud Detection 데이터를..

    [python] LGBMClassifier 단번에 성능 높이기

    [python] LGBMClassifier 단번에 성능 높이기

    Light GBM은 XGBoost보다 개선된 성능과 빠른 수행률을 보여주어 많은 대회의 상위 랭커들이 활용하는 모델이라고 할 수 있습니다! 저는 LGBMClaasifier 모델을 활용할 때 특히 주의해야 할 부분을 짚어보려고 하는데요, LGBMClassifier hyper parameter 중 'boost_from_averge' 설정입니다. Light GBM이 버전업 됨에 따라 boost_from_average 파라미터의 디폴트 값이 False에서 True로 변경되었습니다. 레이블 값이 극도로 불균형한 분포인 데이터의 경우 boost_from_average = True 값은 재현율과 roc_auc_score를 매우 저하시킵니다! Light GBM 2.1.0이상 버전이거나, 불균형한 데이터 세트에서 예측 ..

    [python] 교차검증을 간단하게 cross_val_score()

    sklearn은 kfold 교차검증을 보다 편리하게 수행할 수 있는 API를 제공합니다. 바로 cross_val_score() 인데요! 기존에 폴드 세트를 지정하고, for 루프에서 반복으로 학습 및 테스트 데이터의 인덱스를 추출하고, 반복적으로 학습과 예측을 수행하는 일련의 과정을 한번에 수행해주는 API입니다. 특히 classifier 학습을 진행하는 경우 자동으로 stratified KFold 방식을 진행해주기 때문에 더할나위 없이 편하다고 할 수 있겠네요! cross_val_score() 사용법 cross_val_score(estimator, X, y, scoring=평가지표, cv=교차 검증 폴드 수) 까지가 주요 파라미터라고 할 수 있습니다. * 여기서 estimator가 classifier ..