728x90
#1 불균형한 데이터 분포 전처리하기
#2 (Random Forest) train-test 분할 및 간단한 모델 학습
#3 Validation 데이터 분할, K-fold 교차검증
1. 분포 상태 확인 후 그룹화
data.apply(lambda x : len(x.unique()))
모든 인덱스에 대한 값을 한꺼번에 반환하기
- apply: 데이터프레임["컬럼"].apply(함수명)=> 해당 함수를 우리가 기존에 정의한 데이터프레임 중 A컬럼에 대해 적용df['A'].apply(plus_one) / df['A'].apply(lambda x : x+1)
- lambda: lambda 매개변수 : 표현식 => 함수를 딱 한 줄만으로ex. (lambda x,y: x + y)(10, 20)
- len, unique메소드 이용 : unique는 데이터에 고유값들이 어떠한 종류들이 있는지 알고 싶을때 사용하는 메소드
https://wikidocs.net/64
https://koreadatascientist.tistory.com/115
https://jaaamj.tistory.com/112
2. 요소 개수를 기준으로 세 개의 그룹으로 분할
2.1 group_1: 2개 이하
이진변수 인코딩(0과 1로 표현)
data['gender'] = data['gender'].replace(['F', 'M'], [0, 1])
2.2 group_2: 2개 초과 10개 이하
(연속형 숫자) 극소수의 2초과 값 모두 2로 변환
data.loc[data['child_num']>2, 'child_num'] = 2
(문자) sklearn의 preprocessing 가운데 LabelEncoder()를 통해 문자형 카테고리를 숫자형으로 변환
label_encoder = preprocessing.LabelEncoder() for x in ['income_type', 'edu_type', 'family_type', 'house_type']: data[x] = label_encoder.fit_transform(data[x]) print(data[x].unique,"\n---")
2.3 group_3: 10개 초과
(연속형 숫자, 요소 종류가 아주 많을 때)
마찬가지 구간화하되 group_2처럼 통일시키는 게 아니라 구간을 여러 개로 만들어버림:
- numpy의 histogram 메소드(bins=) 통해 bin_dividers 생성
- pandas의 cut 메소드(bins=) 통해 데이터를 실제로 분할
- 그러나 위 결과는 연속형이 아닌 이산형 dtype이므로 pandas의 factorize 함수 통해 int로 변환
=> 일련의 과정을 하나의 함수로 단순화하기.
def make_bin(array, n): array = -array #대부분의 요소가 음수이므로 양수로 변환 ★★★ _, bin_dividers = np.histogram(array, bins = n) cut_categories = pd.cut(array, bins = bin_dividers, include_lowest = True, labels = list(range(n))) bined_array = pd.factorize(cut_categories)[0] return bined_array
*value_counts나 plot 사용하려면 numpy-array가 아닌 pandas-Series 형태여야 함. => pd.Series(~)
https://www.youtube.com/watch?v=AWfgyln0EOM
모두 데이콘 합시다아
728x90
'AI > Data Science' 카테고리의 다른 글
[ML] 빅데이터 메모리 사용량 줄이기 (0) | 2022.12.05 |
---|---|
[이론] The Kalman filter, 칼만 필터 (1) | 2022.10.26 |
[pandas, python] 시계열/날짜 데이터 전처리 (0) | 2022.10.14 |
Validation 데이터 분할, K-fold 교차검증 (0) | 2022.10.07 |
(Random Forest) train-test 분할 및 간단한 모델 학습 (1) | 2022.10.05 |