어떤 타겟은 구분 안가는 경우도 있다
[(x, df[x].isnull().sum()) for x in df.columns if df[x].isnull().any()]
any: 하나라도 True 인지 비교 출처
import re
pattern = "내가 찾고 싶은 문구"
sub_word = "바꾸고 싶은 문구"
script = "문구를 찾을 대상"
result = re.함수(pattern,sub_word, script)
[예시]
import re
pattern = '동'
sub_word = '구'
script = '나는 서초동에 삽니다. 친구는 송파동에 삽니다.'
result = re.sub(pattern, sub_word, script)
print(result)
[출처](https://blog.naver.com/mathesis_time/222219401818)
def txt_prep(text):
replacements = [
['Dom Rep|DR|Domin Rep|Dominican Rep,|Domincan Republic', 'Dominican Republic'],
['PNG', 'Papua New Guinea, '],
]
for i, j in replacements:
text = re.sub(i, j, text) # https://blog.naver.com/mathesis_time/222219401818
return text
모델을 만들고 평가를 진행했는데 예측을 100% 가깝게 잘 하는 경우를 종종 보게 될 것
but, 정보의 누수가 존재할 가능성이 크다.
정보의 누수가 일어나 과적합을 일으키고 실제 테스트 데이터에서 성능이 급격하게 떨어지는 결과를 확인할 수 있음
그러므로 정보의 누수가 일어나는 특성을 제거해줘야한다.
타겟 특성의 클래스 비율이 차이가 많이 나는 경우가 있음
class-weight
y_train.value_counts(normalize=True) ----------------------- False 0.824268 True 0.175732
custom = len(y_train)/(2*np.bincount(y_train)) custom -------------------- array([0.60659898, 2.8452381 ])
DecisionTreeClassifier(max_depth=5, class_weight{False:custom[0],True:custom[1]}, random_state=2)
DecisionTreeClassifier(max_depth=5, class_weight='balanced', random_state=2)
why?
1. 일반적으로 특성과 타겟간에 선형관계를 가정
2. 특성 변수들과 타겟변수의 분포가 정규분포 형태일때 좋은 성능을 보임
df['SalePrice'] = df[df['SalePrice'] < np.percentile(df['SalePrice'], 99.5)]['SalePrice']
df = df[df['SalePrice'].notna()]
방법 2. 로그 변환
- 타겟이 right-skewed 상태라면 로그변환을 사용하여 정규분포형태로 변환
from sklearn.compose import TransformedTargetRegressor pipe = make_pipeline( OrdinalEncoder(), SimpleImputer(), RandomForestRegressor(random_state=2) ) tt = TransformedTargetRegressor(regressor=pipe, func=np.log1p, inverse_func=np.expm1) tt.fit(X_train, y_train) tt.score(X_val, y_val)