선생님은 잔차이탈도 계산은 함수를 써서 로그 우드 값을 추출 후 곱하기 -2를 해서 = 286.93267518507366 여기서 반올림해서 286.93이 되고 저는 summary() 로 알게된 로그우드 값에 곱하기 -2를 해서 = 286.94 이 됩니다. 이럴경우 제가 한 답을 작성시 틀리게 되는건가요? summary 에서 -143.47 이렇게 애초에 소수 둘째짜리 까지만 나타내줫는데.. 틀리면 억울할거같은데 답변 부탁드립니다.
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 풀이 코드에는 print(a.sum(axis=1)) 이렇게 작성이 되어있는데 print(a.T.sum()) 이렇게 해도 되나요?
마지막 팁 부분을 먼저 보고 기출 연습을 하고 있는데요, lightgbm을 하는 경우 object 자료형을 category 자료형으로 바꿔주면 인코딩을 따로 할 필요가 없다고 하여 이 방법으로 연습을 진행하고 있습니다. 또, 성능평가를 구하지 않아도 감점되지 않는다고 하여 오류가 나지 않은 한 인코딩과 성능평가 없이 lightgbm으로 푸는 방법으로 연습 중인데, 아래 코드가 제가 작성한 코드입니다. 오류가 나지 않지만, 제출 파일의 내용을 확인한 결과 강사님의 최종 결과와 차이가 있었습니다. (Attrition_Flag 값의 차이) 뭐가 잘 못된 건가요...? import pandas as pd train = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ceredit%20card/train.csv") test = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ceredit%20card/test.csv") # train = pd.read_csv("train.csv") # test = pd.read_csv("test.csv") # #문제 정의 # 평가: ROC-AUC, 정확도(Accuracy), F1, 정밀도(Precision), 재현율(Recall)을 구하시오 # target : Attrition_Flag (1:이탈, 0:유지) # csv파일 생성 : 수험번호.csv # ROC-AUC -> 분류 # eda # print(train.shape, test.shape) # (8101, 21) (2026, 20) # print(train.info()) # print(test.info()) # print(test.head()) # object -> category cols = train.select_dtypes(include='object') for col in cols: train[col] = train[col].astype('category') test[col] = test[col].astype('category') # 검증 데이터 분리 y_train = train.pop('Attrition_Flag') from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train, y_train, test_size=0.2, random_state=0) # lightgbm 학습 및 예측 import lightgbm as lgb model = lgb.LGBMClassifier(random_state=0, verbose=-1) model.fit(X_tr, y_tr) pred = model.predict_proba(X_val) # print(model.classes_) # target : Attrition_Flag (1:이탈, 0:유지) # 결과: [0 1] -> 유지 이탈 (이 순서임) # 성능 평가 # test 예측 및 제출 pred = model.predict_proba(test) # print(pred.shape) # print(test.shape) # print(pred) submit = pd.DataFrame( {'CLIENTNUM':test['CLIENTNUM'], 'Attrition_Flag':pred[:,1]}) submit.to_csv('수험번호.csv', index=False) # 제출 파일 확인 # print(pd.read_csv('수험번호.csv').shape) # (2026, 1) -> test.shape(2026, 20) 위 사진은 제 코드를 실행하여 만든 csv파일의 내용입니다. 다음 사진은 강사님 코드의 실행 결과입니다.
기출에서는 train, test 모두에 결측치가 없었는데요 혹시 결측치가 있는 데이터가 주어지면 어떻게 해야하는지 궁금합니다. 아래 케이스별로 궁금하고 object 결측치인지 수치형 결측치인지에 따라서도 다르게 해야 할까요? train 에만 결측치가 있는 경우 test 에만 결측치가 있는 경우 train/test 모두에 결측치가 있는 경우
안녕하세요. .thread 연습 하다가 물어 볼꺼 있어서요... Winform에 쓰레드를 생성했습니다. thread 파일을 초기엔 null로 했습니다. 그리고 작업을 진행하다가 아래 StartThread를 호출 합니다. private void StartThread() { if (thread == null) { thread = new Thread(new ThreadStart(GoThread); GoThread.IsBackground = true; GoThread.Priority = GoThread.Normal; GoThread.Start(); } if (!GoThread.IsAlive) { GoThread.Start(); } GoThread.Join(); // 호출 함수가 끝날때까지 대기 해보자. -- 여기 질문 thread = null; // null을 넣는건 좀 부담 스러움 } // 쓰레드 함수 진행 void GoThread() { try { while (queue.Count != 0) { // 큐에 쌓여 있는 작업 진행 queue.Dequeue(); // 쓰레드 안에 있으니 아래 처럼 인보크 사용해서 지행 this.Invoke((MethodInvoker)delegate { textBoxOutputLog.Text = ResultLog; }); Thread.Sleep(1); } } // 작업 완료 아래 처럼 null을 쓰고 싶은데 null을 넣기에는 부담 그래서 호출한 함수에서 join으로 대기해보자. //thread= null; } 질문 입니다. GoThread.Join() 을 하니깐 쓰레드 함수가 다 종료가 될때까지 formview가 멈춥니다. 흠.... 원래 join이 스레드가 종료될때까지 기다린다는건 알겠는데 UI 진행도 멈추는건지 궁금 하네요... 그리고 쓰레드에 null을 넣는건 좋은 방법 인가요? 아 그리고 이건 부가적인 질문인데 .. 클레스가 생성하면 자동으로 종료되는건 알고 있습니다. 프로그램에서 직접 종료하는 방법 없을까요?? 이유을 설명하자면 클래스 생성 . 작업 진행 .. 진행중 쓰레드 처리 ... 쓰레드 처리 끝... (할일을 다함).. 종료... (이게 너무 오래 걸림) C++에는 delete 가 있는데 .. 어째거나 이렇습니다.
# 최종 제출 파일 (lightGBM) pred = lg.predict(test) submit=pd.DataFrame({'pred':pred}) submit.to_csv("result.csv",index=False) 아래처럼 feature가 맞지 않아서 에러가뜹니다. 강의 그대로 했는데 왜그러는 걸까요?? --------------------------------------------------------------------------- ValueError Traceback (most recent call last) /tmp/ipython-input-50-2529582812.py in <cell line: 0>() 1 # 최종 제출 파일 (lightGBM) ----> 2 pred = lg.predict(test) 3 submit=pd.DataFrame({'pred':pred}) 4 submit.to_csv("result.csv",index=False) 2 frames /usr/local/lib/python3.11/dist-packages/lightgbm/sklearn.py in predict(self, X, raw_score, start_iteration, num_iteration, pred_leaf, pred_contrib, validate_features, **kwargs) 1008 n_features = X.shape[1] 1009 if self._n_features != n_features: -> 1010 raise ValueError( 1011 "Number of features of the model must " 1012 f"match the input. Model n_features_ is {self._n_features} and " ValueError: Number of features of the model must match the input. Model n_features_ is 28 and input n_features is 8
작업형2에서 데이터 전처리할 때 라벨인코딩or원핫인코딩 후 랜포 or lightGBM만 준비해서 가려고 하고 기출 계속 돌려보고 있는데 아직 어떤 경우에 라벨인코딩이 적합하고, 원핫인코딩이 적합한지 구분이 안됩니다 1)어떤 데이터들일때 어떤 인코딩이 적합한건지 궁금합니다! (+현재는 오브젝트타입 라벨인코딩해서 모델 학습한거랑 원핫인코딩해서 모델 학습한거랑 각각 비교해보고 수치 더 좋은걸로 선택했었습니다..!) 2)그리고 항상 데이터 전처리(라벨or원핫인코딩) 전에 target 컬럼 먼저 train에서 복사해서 옮겨놓고 그 후에 데이터전처리를 하는게 맞는걸까요??
시험 환경 작업형2 문제에서 라벨 인코딩을 하기 전에, set을 통해서 train과 test의 unique를 확인하보고 "train이 test를 포함하기 때문에 합칠 필요가 없다"고 말씀을 하셨는데요. 혹시 시험을 볼 때 그것까지 미처 확인해보지 못하고 그냥 다음과 같이 진행을 했을 때 문제가 생길까요..? cols = ['주구매상품', '주구매지점'] from sklearn.preprocessing import LabelEncoder for col in cols: le = LabelEncoder() train[col] = le.fit_transform(train[col]) test[col] = le.transform(test[col])
실제 시험을 볼때는 뭔가 정신이 없을거같아서 train과 test의 unique값 차이 여부 생각하지 않고 그냥 무조건 train과 test를 concat으로 합치고 레이블 인코딩 진행한 후 train과 test를 분리하고자 하는데 이렇게 진행해도 괜찮을까요? 데이터 누수(?), 과적합가능성 있다고 들어서 질문드립니다.