안녕하세요, 강사님. 2유형 train_test_split 관련 질문이 있어 글 적습니다. 제가 깊은 이해보다는 2유형에서 기본만 확실하게 해서 40점을 얻는 것이 목표입니다. 그래서 랜덤 포레스트 모델로 기본적인 과정만 진행하고 정답을 제출하려고 합니다. 불필요 칼럼 제거, 결측치 대체, 라벨 인코딩 정도를 진행한 후 train_test_split을 test size 0.2로 할 계획이었습니다. 그런데 생각해보니, train_test_split을 쓰는 이유 자체가 현업의 실제 데이터 분석에서는 test 데이터라는 것이 따로 없으니 기존 데이터를 분할해서 일부는 학습, 일부는 검증을 하기 위해 쓰는 것이라고 이해되는데, 빅데이터분석기사 실기 2유형에서는 애초에 학습하라고 준 train 데이터와 검증 예정인 test 데이터를 주는데, 왜 굳이 train 데이터를 train_test_split로 분리를 해서 fit시킨 모델로 결과를 제출해야 하는 것인지 이해가 되지 않습니다. 그냥 train 데이터를 분리하지 않고 전부 fit시켜 제출하면 되지 않나요? 저도 여러 커뮤니티에서 관련 글들을 찾아 보았는데, 그렇게 하면 과적합 우려가 있다는 얘기들이 많은데 이 부분에 관련해서 강사님 같은 전문가의 설명이 필요해서 질문드립니다. 애초에 과적합 우려가 있다는 의견들은 test 데이터가 train 데이터와 분포나 이런 것들이 거의 일치한다는 가정이 있어야 하는 것 아닌가요? 그리고 처음 말씀드렸듯이 '빅데이터분석기사 실기 2유형 40점 취득'을 목표로 했을 때, train_test_split(test size 0.2)를 fit한 모델을 제출하는 것이 맞을까요? train_test_split 없이 전체 train 데이터를 fit한 모델을 제출하는 것이 맞을까요?
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 지수표기법은 숫자 뒤에 e-10 이렇게 나오는거 일거 같은데, 컬럼 전체보기는 무슨말인가요?? head 쳤을때 컬럼 개수가 많으면 중간에 .... 으로 생략되는걸 다 본다는건가요???
저는 코드를 이렇게 작성을 해보았는데, import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p1/members.csv") df = df.sort_values('views',ascending = False) df.loc[:21,-1] = 9690.0 ->이렇게 입력을 하니 views컬럼의 값들이 9690.0으로 대체 되는 것이 아니라 , views컬럼의 값들은 그대로 있고, -1이라는 컬럼이 옆에 하나 더 생성 되는데 어떻게 해야하나요?ㅜㅜ df.head(13) # cond = df['age'] >= 80 # print(df[cond]['views'].mean())
안녕하세요 강의 잘 보고있습니다. 작업형1 캐글에 올려주신 연습문제들 계속 막혀서 풀지를 못하는데, 현 시점에서 작업형1 어떻게 하는게 좋을까요? 작업형 2랑 3은 어느 정도 이해해서 외우면 될 것 같은데 작업형1은 도무지 괄호안에 어떤 값을 넣어야 하고, 어떤 괄호를 써야하는지 헷갈립니다. 현시점에서 작업형1을 어떻게 해야 최대한 점수를 끌어올릴 수 있을지 조언 부탁드립니다 🥲 감사합니다.
회귀모델의 평가방법 중 RMSLE 함수를 외우려고 했는데요. 쉽지가 않습니다. 좀 더 간단한 방법 없을까요..? def rmsle(y_test, y_pred): #RMSLE return np.sqrt(np.mean(np.power(np.log1p(y_test) - np.log1p(y_pred), 2)))
# missing_cols = set(train.columns) - set(test.columns) # for col in missing_cols: # test[col]=0 # test = test[train.columns] # train.head() 질문1) train의 컬럼이 test에 없을 때 train의 컬럼을 test 컬럼과 동일하게 삭제하거나 test를 위의 코드를 통해 컬럼을 만들고 '0' 값으로 채운다. 그리고 train 컬럼의 순서대로 맞춘다. 여쭤보는 이유는 반대로 test에 있는 컬럼이 train에 없다면 위의 코드를 사용해도 되지 않을까 싶어서요... 제가 이해하는게 맞는지 모르겠네요.. 질문2) train과, test의 범주형 컬럼이 다를 때 concat하라고 말씀하셨는데요. 좀 어려워서 원핫인코딩 한적이 있는데 잘 되더라구요... concat을 해야 하나요..?
해당 예시 문제를 밑의 식으로 풀이를 해보았는데, import pandas as pd df = pd.read_csv('mtcars.csv') from sklearn.preprocessing import minmax_scale print('변환 전 :',df['qsec'].head()) df['qsec'] = minmax_scale(df['qsec']) print('변환 후 :', df['qsec'].head()) cond = df['qsec'] >0.5 sum(cond) 제가 알기로 스케일링 할 수 있는게 min-max, standard,robust 이렇게 3가지가 있는데, 만약 minmax가 아닌 standard,robust를 이용하게 된다면 코드를 어떻게 작성을 해야할까요?
print('rmsle: ', mean_squared_log_error(y_val, pred)) 이 코드를 실행할 때, 해당 오류가 나옵니다. Mean Squared Logarithmic Error cannot be used when targets contain negative values. 궁금한 것이, 회귀모델을 사용할 때 pred에서 음수값이 나오면 어떻게 처리하면 되는지 궁금합니다. 사실 y_tr 통계값에서 min값이 0이기 때문에 예측 모델에서 음수값이 나오면 안된다고 생각하는데 혹시나 나오게 되면 어떤식으로 전처리를 해야하는지 궁금합니다. 또한 선생님이 실행하신 랜덤포레스트 모델에서 r2_score가 0.77정도 나오는데 저는 같은 과정으로 해도 0.24정도 나와 차이가 큽니다.. 완전히 같을 순 없지만 비슷해야한다고 생각하는데 너무 차이가 나서 저의 코드가 잘못되어 그런것일지 궁금합니다.
주어진 데이터셋(members.csv)의 앞에서부터 순서대로 80% 데이터만 활용해 'f1'컬럼 결측치를 중앙값으로 채우기 전 후의 표준편차를 구하고, 두 표준편차 차이 계산하기 (단, 표본표준편차 기준, 두 표준편차 차이는 절대값으로 계산) 여기서 제가 이해한 바로는 80퍼센트 데이터만을 활용하여 중앙값을 도출하고 그것을 통하여 f1컬럼을 채워넣고 전체 f1컬럼의 전후 표준오차를 계산하라고 이해하였습니다. 문장을 여러번 읽어보아도 80퍼센트 데이터 활용의 정의가 모호한거 같은데요(80퍼센트 데이터를 활용해 중앙값으로 채우기 / 전후 표준오차 구하기 인지 80퍼센트 데이터를 활용해 중앙값 채우고 전후 표준오차 까지 구하기인지) 이런 경우 감독관에게 그 범위를 질문을 할수 있나요? 자의적으로 시험장에서 판단하기 힘든것 같아 질문드립니다.