머신러닝/FAQ
데이콘 관련 FAQ & Tip
Stevelee_HMC
2022. 8. 25. 08:46
제출파일을 만들 때 , index = False 꼭 잊지 말기
submission.to_csv("submission_횟수_방법.csv" , index = False)
subplot 플로팅하기 (histogram)
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize = (40,40)) ## 해당 셀에서 실행될 fig size 설정
cols = train.columns
for i in range(len(cols)):
plt.subplot(8 , 3 , i +1) ### cols가 24개보다 크면 8:행 , 3:열 값 키워줘야함
plt.title(cols[i] , fontsize = 25)
plt.hist(train[cols[i]] , bins = 40)
plt.show()
### seaborn 활용
### 분류문제일때 , 회귀일때는 hue 쓰면 안됨
for i in range(len(cols)):
plt.subplot(8 , 3 , i +1) ### cols가 24개보다 크면 8:행 , 3:열 값 키워줘야함
plt.title(cols[i] , fontsize = 25)
sns.histplot(x = cols[i] , hue = "target" , bins = 40 , data = train)
plt.show()
subplot 플로팅하기 (scatter) 보통 회귀문제일때 사용
hist와 다 똑같고 ploting 하는 부분만 다름
import matplotlib.pyplot as plt
import seaborn as sns
cols = train.columns
for i in range(len(cols)):
plt.subplot(8 , 3 , i +1) ### cols가 24개보다 크면 8:행 , 3:열 값 키워줘야함
plt.title(cols[i] , fontsize = 25)
plt.scatter(x= train[cols[i]] , y = train["Target"])
plt.show()
seaborn 의 pairplot을 활용 모든 feature들 간의 상관관계 그래프로 띄어보기
sns.pairplot(train)
특정 column의 특정 값을 다른 값으로 변경하기
train.loc를 사용
train.loc[train["A"] > 0.5 , "B"] = 1 ### "A"컬럼이 0.5보다 큰 데이터의 "B" 컬럼 값은 1로 바꾼다.
이상치(outlier)제거하기
그래프를 띄워보면 혼자 굉장히 동 떨어진 값을 발견 , 이상치라고 판단하면 제거하기
train[train["A"] > 1000] ### 이상치가 있는 컬럼 "A"에서 대략 평균보다 훨씬 큰 1000보다 큰것으로 indexing
위 그림과 같이 특정 인덱스가 나오면 해당 인덱스를 drop
train_01 = train.drop([1248,1249] , axis = 0) ## 행을 삭제하므로 반드시 axis = 0 으로 설정
주의할것은 test데이터는 컬럼은 삭제해도 행은 절대로 삭제하면 안됨
X_train , y_train 합치기 (concat)
나누는것만 하다보면 합치는것에 익숙치 않음
train = pd.concat([X_train ,y_train] , axis = 1)
Scaling 할때의 유의점
1) 1개의 컬럼만 할때는 pd.DataFrame 활용
A = pd.DataFrame(train["A"])
scaler.fit(pd.DataFrame(A)
train["A_Scaled"] = scaler.transform(A)
Scaling 할때의 유의점
2) 전체 데이터를 동일하게 Scaling할땐 , y값(target)까지 한번에 scaling 하지말고 y값은 빼고 scaling'
X_train = train.drop("Target" , axis = 1)
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
Self - Label Encoding
sklearn에서 임의로 정한 encoding 이 아닌 직접 정할 수 있다.
### train["A"]value_counts() 에서 "사자" , "호랑이" , "꿩" , "참치" 일때
### 각각을 별도의 번호로 라벨링해서 학습시키고 싶을 때 사용
### 가장 직관적인 방법
train.loc[ train["A"] == "사자" , "A"] = 1
train.loc[ train["A"] == "호랑이" , "A"] = 4
train.loc[ train["A"] == "꿩" , "A"] = 5
train.loc[ train["A"] == "참치" , "A"] = 6
### test데이터도 동일하게 별도 라벨링이 들어가줘야함
회귀분석의 경우 log 씌우는법
보통 y값에 log를 씌우는데
데이터를 읽어온 후에 log 씌우고 - 학습 - 예측 - 역함수 순서로 해야한다. 학습 이후 로그를 하는것은 전혀 의미가 없음
y_train = train["Target"]
y_train_loged = np.log1p(y_train)
model.fit(X_train ,y_train_loged)
pred = model.predict(X_test)
pred_exp = np.expm1(pred) ### 최종 역함수해서 정상적인 값 도출
학습돌리고 예측하기전에 항상 확인할 것
결측치 , object 있는지 info()로 확인 , shape 확인
X_train.shape[0] , y_train.shape[0] ### 행이 같아야함
X_train.shape[1] , X_test.shape[1] ### 열이 같아야함
학습데이터로 예측하는 오류
반드시 test 데이터로 predict 해야함.
model.fit(X_train , y_train)
pred = model.predict(X_train) ### 실수로 train을 예측할 경우 하지만 인지 못하는 경우
submission = pd.read_csv("sample_submission.csv")
submission["Target"] = pred <--- 여기서 에러난다. pred와 submission이 행 갯수가 틀림.
### 꼭 주의하자
GridSearchCV 활용시 유의점
분류문제에선 scoring = 'Accuracy' ,
회귀문제를 활용할땐 scoring = 'neg_mean_squared_error' #MSE 의미
아래 공식홈페이지 참조해서 다양하게 변경 가능
https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter 공식홈페이지 참조