분류 전체보기 96

[PySpark] 오버샘플링(oversampling), 언더샘플링(undersampling)

기계 학습에서 불균형 훈련 데이터 세트로 분류 문제를 다룰 때 오버 샘플링과 언더 샘플링은 결과를 개선하는 두 가지 쉽고 종종 효과적인 방법이다. 1.불균형(imbalanced) 데이터란? 데이터셋의 한 클래스(레이블) 수가 다른 클래스보다 상당히 많거나 적을때 데이터의 클래스가 불균형 상태라고 말한다. '불균형'이라는것이 상당히 분석가나 과학자의 입장에서 주관적인 판단이 개입된다. 그리고 실제 문제를 ML(머신러닝, 기계학습)으로 해결할 때 깔끔하게 균형잡힌 데이터를 만나기는 힘들다. (예를들어, 이상치 탐지, 사기탐지 데이터, 질병 데이터 등) 머신러닝 모델은 맹목적으로 다수의 클래스를 대부분 학습하기 때문에 대다수 예측 데이터를 학습된 다수의 클래스로 예측하려는 경향이 있다. 그렇기 때문에, 소수 ..

[PySpark] round(반올림), ceil(올림), floor(내림) 함수로 소수점 자리까지 다루기

PySpark를 사용하여 DataFrame의 특정 컬럼을 반올림, 올림 또는 내림하는 방법은 round(), ceil(), floor() 함수를 사용한다. PySpark의 ceil 및 floor 함수는 기본적으로 특정 소수 자릿수에서 동작하지 않는다. 특정 소수 자릿수에서 올림 또는 내림을 수행하려면 먼저 원하는 소수 자릿수로 값을 곱한 다음, 올림 또는 내림한 후에 다시 나누는 방법을 사용해야 한다. 즉, 원하는 자릿수 만큼 곱해서 올림이나 내린 다음에 다시 자릿수 만큼 나눠주는 작업이 필요하다. 0.참고사항 from pyspark.sql.functions import expr # DataFrame에서 "value" 컬럼을 소수점 둘째 자리로 올림 df = df.withColumn("ceiled_val..

[PySpark] 특정(여러) 문자열(strings)이 포함된 데이터 필터로 뽑아내기.

우선 데이터 프레임 내에서 한 string 스키마 구조의 컬럼에서 특정 문자열이 포함된 데이터를 filter로 걸러내는 코드는 아래와 같다. 아래에서는 search strings list에 있는 단어들을 포함하고 있는 데이터를 뽑아내는 방법이다. 여러 단어들이 아닌 한 단어를 포함하고 있는 데이터를 뽑고자 할때는 reduce 함수를 쓸 필요 없이 아래와 같이 pyspark 내장함수를 활용하면 된다. df.filter(col("col1").contains("기내용")) - 기내용이 포함된 데이터 산출 df.filter(~col("col1").contains("기내용")) - 기내용이 포함되지 않은 데이터 산출 from pyspark.sql import SparkSession from pyspark.sql...

로지스틱 회귀모형(logistic regression)에서 변수 중요도(feature importance)

로지스틱 회귀 모형에서 범주형 변수인 Y(종속변수)를 예측하는데 기존의 X(독립변수)의 중요도(=기여도)를 파악한다면 데이터 정보 기반의 의사 결정을 내리고 모델 성능을 향상시키는데 필요한 과정이다. 이 게시물에서는 가중치를 사용하여 로지스틱 회귀에서 독립변수의 중요도를 얻는 방법에 대해 작성하고자 한다. 1.로지스틱 회귀모형(logistic regression model)? 로지스틱 회귀 분석은 이항 분류에 사용되는 통계적 방법이다. 즉, 일반적으로 0과 1로 표시된 두 가지 결과 중 하나를 예측하려는 경우에 일반적으로 적용되며. 로지스틱 회귀 분석은 일반적인 선형 회귀 알고리즘이 아닌 분류 알고리즘이다. 로지스틱 회귀 분석의 주요 아이디어는 주어진 입력이 특정 클래스에 속할 확률을 모델링하는 것이다...

[PySpark] 학습된 로지스틱 모형의 계수 확인하기.

우선, 모델의 학습에 필요한 train, test 셋이 있다는 가정하에 다음과 같이 3차 교호법(3 fold crossvaildaition)을 통해 로지스틱 모형을 학습하고 test 데이터 셋에 스코어링 하는 코드이다. pyspark에서 로지스틱 모형의 파라미터 옵션은 https://runawayhorse001.github.io/LearningApacheSpark/reg.html 10. Regularization — Learning Apache Spark with Python documentation 10. Regularization In mathematics, statistics, and computer science, particularly in the fields of machine learning..

파이썬 list에서 특정 문자열을 포함하는지 확인하고 제거하기.

1.특정문자열 포함 확인 파이썬에서 리스트 내에 특정 문자열을 포함하는지 확인하는 방법은 다음 네가지를 고려할 수 있다. 대소문자를 무시하려면 비교시 대문자 또는 소문자로 통일후 진행 1) 반복문 사용 def contains_string(lst, target): for item in lst: if target in item: return True return False my_list = ["apple", "banana", "cherry"] target_string = "bana" result = contains_string(my_list, target_string) print(result) # True 2) any() 함수와 list 컴프리헨션 사용 my_list = ["apple", "banana", ..

[PySpark] array_intersect로 array간 같은 value값 찾기

다음과 같은 'data'라는 데이터 프레임이 있다. 그리고 데이터 프레임에 collect_list(site_app)이라는 array 구조의 컬럼이 있는데 해당 컬럼에서 list_A의 list value 값이 몇개가 있는지 궁금하다. data = [("oaid_1", ["app1", "app2", "app3"], [10, 20, 30], [1, 2, 3]), ("oaid_2", ["app2", "app4", "app5"], [15, 25, 35], [2, 4, 5]), ("oaid_3", ["app1", "app3", "app4"], [12, 22, 32], [1, 3, 4])] # Create a DataFrame with the sample data columns = ["oaid", "collect_l..

예랑이 노션(notion)으로 프로포즈 계획하고 성공하기

프로포즈를 준비한다고 한창 바쁜 근 몇개월이었다. 예비 신부랑 같이 살고있는 상황에서 일하랴, 결혼준비하랴 정신없는 한해를 보내고 있지만 잘하고 싶고, 감동을 주고 싶은 마음에 평범한 프로포즈가 아닌 팀 프로젝트형 프로포즈를 계획했다.(나는 파워 J이기 때문에 약 2달이 넘는 해당 프로포즈 프로젝트를 고통스러웠지만 행복한 마음으로 견딜 수 있었음.) 이 장기 프로젝트를 아무런 불만없이 도와준 주변인들에게 감사드리며 잘하겠습니다ㅠ_ㅠ. 1.노션 사용이유? 첫번째로, 해당 프로젝트 상황과 결과를 타지에 있는 사람들도 쉽게 전달받고 공유할 수 있도록 팀프로젝트를 관리할 수 있는 서비스를 활용했는데 내가 선택한 서비스는 'NOTION(노션)' 이다. 이유는 1) 기존에 프로젝트 관리로 사용했고, 2) 프로포즈에..

기타/일상 2023.08.16

2023 상반기 - 몰입

격동의 상반기가 지나갔다. 이미 '선택'을 했다는거에 대해 '후회'를 남기지 않는다 라고 살아왔지만 생각해보니 사람이 참 신기한게 후회 없는 선택은 없을 수 있겠구나 싶더라. 왜냐하면 합리화를 하면서 애써 묻어가거나 외면하는것은 인간의 본능적이고 굉장히 자연스러운 부분이라고 생각하기 때문이다. 일명 도를 닦은 사람들처럼 본능을 제어할 수 있는 사람들이 아니라 지극히 나처럼 평범한 사람이 느낀점이다. 스스로에게 묻고 싶은게 두가지가 있다. Q.몰입을 하고 있는가? 나는 내가 굉장히 평범하고 어디 하나 특출난게 없는 사람이라고 생각한다. 그렇다고 불만이 있거나 아쉽거나 하지는 않다. 그런 내모습 또한 장점이 될 수 있다고 생각하는데 한편으로, 하나 특출난 부분을 갖고 싶어하는 욕심은 있다. 그게 무엇인지 뭐..

기타/회고록 2023.08.07

airflow에서 start_time, execution_time, backfill, catchup

1.airflow의 시간 https://airflow.apache.org/docs/apache-airflow/stable/faq.html#what-s-the-deal-with-start-date: start_date, execution_date 공식문서 1-1.start_date 실행 날짜가 아니라 스케줄 시작 시간으로 DAG 첫 실행은 'start_date + 실행주기' 에 실행하게 된다. start_date: 2023-08-01 00:00:00 hourly job: schedule: 0 * * * * (매시 0분에 실행) → DAG의 첫 실행은 2023-08-01 01:00:00 daily job: schedule: 0 10 * * * (매일 10시 0분에 실행) → DAG의 첫 실행은 2023-08..