학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 코랩에서 작업형 2의 경우, 주어진 평가방식에 따라 테스트 데이터와 검증데이터를 평가한 후 평가 코드를 주석 처리했었는데, 시험 환경에서는 점수에 영향이 있을 것 같아 질문드립니다.
선생님 안녕하세요. 5-3 강의보면서 따라하는데 roc_auc, f1, 정확도 평가지표 값이 전부 1로 나옵니다.... 검증 데이터 분리까지 똑같이 따라 했고요 (random_state = 값은 동일하게만 주면 된다고 해서 전 그냥 다 100으로 놓고 했습니다) 일단 작성한건 아래와 같고요 # 랜덤포레스트 ROC-AUC, 정확도(Accuracy), F1 from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import f1_score, accuracy_score, roc_auc_score rf = RandomForestClassifier(random_state=100) rf.fit(X_tr,y_tr) pred_rf = rf.predict(X_val) proba_rf = rf.predict_proba(X_val) print(roc_auc_score(y_val,proba_rf[:,1])) # "ROC_AUC:", print(f1_score(y_val,pred_rf)) # "F1:", print(accuracy_score(y_val,pred_rf)) # "Accuracy:", 결과 값은 다 1.0 1.0 1.0 으로 나오는데... 이거 뭔가 잘못 된거 같은데, 뭘 잘못한걸까요...?
안녕하세요 강사님! LabelEncoder 작업 중 한 번씩 오류를 마주하는 경우가 생깁니다. 아마 강의 중에 말씀해주셨던 train_data 와 test_data 를 합친 후 인코딩 작업을 진행하면 될거라는(?) 얘기와 관련이 있을 것 같은데.. (혹시 제가 잘못 이해하고 있는거면 정정 부탁드립니다 ㅠㅜ) 인코더 돌릴 때 테스트 데이터랑 합친 후 학습한다고 가정했을 때, fit_transform() 과 transform() 중 어떤 걸 사용해야하는지와 두 메소드의 차이점이 궁금합니다. 제가 이해한 내용으로는 train_data 는 fit_transform(), test_data 는 transform() 을 사용해야한다고 이해했는데 합쳐서 작업해야한다고 할 때 뭘 사용해야하고, 어떻게 사용하는게 맞는 방법인지 잘 모르겠습니다 ㅠ 매 번 질문에 답변해주셔서 감사합니다! 많이 배워가고 있습니다! ======== 질문 추가 ======== 혹시 아래와 같은 방식으로 진행되면 될까요...? for col in col_obj: encoder = LabelEncoder() encoder.fit(pd_concat[col]) X_tr[col] = encoder.transform(X_tr[col]) X_val[col] = encoder.transform(X_val[col])
train_test_split() 함수내에서 y_train 을 나누는 방법에 차이가 있는 이유가 무엇일까요? 첫번째 사진은 y_train['Reached.on.Time_Y.N'] 으로 했고 열에 값이 출력되지 않았는데, 두번째 사진은 y_train.drop('ID', axis=1) 로 했는데 열값이 1이 나왔습니다. 두 방법 모두 결국에는 y_train에서 'Reached.on.Time_Y.N' 만 남기는 것은 동일한데 왜 열값의 출력이 다른지 궁금합니다.
안녕하세요. 작업형 2 회귀모델 사용하고 평가지표로 모델 평가하는 부분에서 질문이 있어서 문의합니다 넘파이 없이 해보려고 아래처럼 간단하게 만들어봤는데요. from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error # 릿지 모델 from sklearn.linear_model import Ridge rd = Ridge(random_state=100) rd.fit(X_tr,y_tr) pred_rd = rd.predict(X_val) mse = mean_squared_error(y_val,pred_rd) # rmse 간단 사용을 위해 우선 mse()를 변수 할당 rmse = mse ** 0.5 # 그런 다음 rmse 처리 방식에 맞는 변수 생성 print("r2:",r2_score(y_val,pred_rd)) print("mae:",mean_absolute_error(y_val,pred_rd)) print("mse:",mean_squared_error(y_val,pred_rd)) print("rmse:",rmse) r2: 0.06396849293045404 mae: 75.39756630227993 mse: 62725.96352602316 rmse: 250.4515193126669 # 라쏘 모델 from sklearn.linear_model import Lasso ls = Lasso(random_state=100) rd.fit(X_tr,y_tr) pred_ls = rd.predict(X_val) mse = mean_squared_error(y_val,pred_ls) rmse = mse ** 0.5 print("r2:",r2_score(y_val,pred_ls)) print("mae:",mean_absolute_error(y_val,pred_ls)) print("mse:",mean_squared_error(y_val,pred_ls)) print("rmse:",rmse) r2: 0.06396849293045404 mae: 75.39756630227993 mse: 62725.96352602316 rmse: 250.4515193126669 선형회귀,XGB,랜덤포레스트 등은 결과값이 모델별로 각각 다르게 나왔는데 (랜덤포레스트의 결정계수 값이 제일 높아서 실습하면서 저도 랜덤포레스트를 적용했습니다) 릿지랑 라쏘 이 2가지 모델은 위에서 처럼 결과값 출력이 완전 동일하게 나와서..... (rmse는 선형회귀를 제외한 나머지 4가지 전부 동일 값이 출력 되었습니다...이건 뭘 잘못한걸까요..?) 검증데이터 예측값 계산 변수 다 할당했고, 할당한 예측 변수를 각 평가 모델에 대입했는데... 왜 이런 결과가 나오는지, 뭔가 잘못한 부분이 있으니 값이 같게 나오는거 같은데... 어느 부분이 잘못 되었는지 알려주시면 감사하겠습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래와 같이 하니 프레임 전환 없이 본문 입력이 됩니다. 이렇게 해도 되나요? 다른 문제는 없을까요? # 내용 입력 iframe = driver.find_element(By.CSS_SELECTOR, "#content > div.contents_area > div > div.editor_area > div > div.editor_body > iframe") iframe.click() iframe.send_keys("안녕하세요.", Keys.ENTER)
안녕하세요 강의 잘 듣고 있습니다! 작업형2 관련 질문 세개 있습니다. Q1) 랜덤포레스트 하이퍼파라미터 조절 max_depth나 n_estimator (아래처럼 ) 분류가 아닌 회귀분석일때도 사용해도 되나요?? Q2) 데이터개수가 너무 많으면 원핫인코딩보다 라벨인코더가 낫다고 하셨는데 개수가 많은 기준이 보통 어느 정도인지 궁금합니다! Q3) 검증데이터 분리 시에 test_size는 어느 정도가 적당한지 궁금합니다. 데이터가 적으면 0.1 ~ 0.15 아니면 0.2 정도로 해도 될까요?
공부삼아서 과제 프로젝트에 테스트를 도입하다가 궁금한 게 잇어서 질문드립니다. 거래내역 조회를 구현할 때 2024-05-30 같은 거래가 발생할 날짜는 auditing, @CreatedAt 통해 저장된 createdAt에서 가져오도록 구현했습니다. (디자인과 달리, 최근 거래일수록 위로 오도록 변경되었습니다) 구현이 끝난 뒤, 테스트할 때 createAt을 임의로 변경하기 위해 BaseEntity의 private를 protected, 그리고 createdAt을 변경하는 메서드를 추가햇습니다. (이게 맞는 접근인지는 잘 모르겟네요... 할 때에도 이렇게 해도 되나? 라는 의문이 계속 들엇습니다...) @DisplayName("유저의 계좌 내역을 불러올 수 있다.") @Test void getUserStatements() { // given (6/5 18:00) LocalDateTime now = LocalDateTime.of(2024, 6, 5, 18, 0, 0); User u1 = User.of("test1", "id1", "pw"); User u2 = User.of("test2", "id2", "pw"); List<User> users = userRepository.saveAll(List.of(u1, u2)); User loginUser = users.get(0); User notLoginUser = users.get(1); Account a1 = Account.of("111-222-3333", 1000, loginUser); Account a2 = Account.of("111-222-3334", 2000, notLoginUser); List<Account> accounts = accountRepository.saveAll(List.of(a1, a2)); Account loginUserAccount = accounts.get(0); Account notLoginUserAccount = accounts.get(1); // 자신 계좌로 입금 (조회 대상), 6/5 발생 Statement s1 = createStatementForTest(loginUserAccount, loginUserAccount, 100, DEPOSIT); // 자신 계좌에서 출금 (조회 대상), 6/6 발생 Statement s2 = createStatementForTest(loginUserAccount, loginUserAccount, 200, WITHDRAW); // 자신 계좌에서 타 계좌로 이체 (조회 대상), 6/7 발생 Statement s3 = createStatementForTest(loginUserAccount, notLoginUserAccount, 300, TRANSFER); // 타 계좌에서 자신 계좌로 이체 (조회 대상), 6/8 발생 Statement s4 = createStatementForTest(notLoginUserAccount, loginUserAccount, 400, TRANSFER); // 타 계좌에서 타 계좌로 출금 (조회 대상 X), 6/9 발생 Statement s5 = createStatementForTest(notLoginUserAccount, notLoginUserAccount, 50000, WITHDRAW); statementRepository.saveAll(List.of(s1, s2, s3, s4, s5)); // when StatementResponse userStatement = statementService.getUserStatements(loginUser); // then assertThat(userStatement.getStatementInfos()).as("거래 이력을 조회할 수 있다.").hasSize(4) .extracting("amount", "type") .containsExactly( tuple(400, "이체"), tuple(-300, "이체"), tuple(-200, "출금"), tuple(100, "입금") ); assertThat(userStatement.getBalance()).as("계좌 잔액을 조회할 수 있다.").isEqualTo(1000); } (위 테스트 코드는 시간 설정 및 검증 코드를 제거한 테스트입니다.) 위 메서드와 plusDays() 통해 시간 설정 후, extracting에 "date" (createdAt에 yyyy-MM-dd를 적용시켜 String 형태로 저장) 를 추가해서 확인했을 때에는 의도한 대로 2024-06-08, 2024-06-07, 2024-06-06, 2024-06-05가 아닌, 전부 테스트를 실행한 시간으로(2024-06-05) 나오는 걸 확인했습니다. 일단은 date를 검증하는 로직을 빼고 테스트를 통과시켰고, postman에서 입금/출금/이체 등 실시 후 조회했을 때에도 의도한 대로 최근 거래가 위로 오도록, 날짜 형식도 의도한 대로 나온 것도 볼 수 있었습니다. 하지만 이 date를 postman이 아닌, auditing 없이 임의로 날짜를 설정한 후 테스트해 확인해보고 싶은데, 이 경우에는 어떻게 하면 될까요? auditing 잇는 상태로도 가능하다면 알려주시면 감사하겟습니다! 아래는 BaseEntity와 거래 내역을 저장하는 Statement Entity 코드입니다 @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseEntity{ @CreatedDate private LocalDateTime createdDate; } import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import java.time.LocalDate; import java.time.LocalDateTime; import static jakarta.persistence.EnumType.*; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Statement extends BaseEntity{ @Id @GeneratedValue(strategy= GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="from_account") private Account from; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="to_account") private Account to; private int amount; @Enumerated(STRING) private TransactionType type; @Builder private Statement(Account from, Account to, int amount, transactionType type) { this.from = from; this.to = to; this.amount = amount; this.type = type; } public static Statement of(Account from, Account to, int amount, transactionType type){ return Statement.builder() .from(from) .to(to) .amount(amount) .type(type) .build(); } } 긴 글 읽어주셔서 감사합니다~
선생님, 강의 내용 a = a[:int(len(a)/2)] cond = a['target'] == 0 a = a[cond] print(int(a['proline'].mean())) 에서 a = a[:int(len(a)/2)] a = a['target'] == 0 <-- cond 대신 a a = a[a] <-- cond 대신 a print(int(a['proline'].mean())) 로 실행해보았습니다. 데이터 프레임 값을 새로 갱신해 저장하는데, 'proline'에서 오류가 나는 이유가 궁금합니다. 새로운 조건명(con)을 넣어야만 실행되는지 궁금합니다.
강의 내용 외 개인적인 실습 사이트의 질문은 답변이 제공되지 않습니다. 문제가 생긴 코드, 에러 메세지 등을 꼭 같이 올려주셔야 빠른 답변이 가능합니다. 코드를 이미지로 올려주시면 실행이 불가능하기 때문에 답변이 어렵습니다. 답변은 바로 제공되지 않을 수 있습니다. 실력 향상을 위해서는 직접 고민하고 검색해가며 해결하는 게 가장 좋습니다. 네이버에서 뉴진스 검색하면 view 탭이 없어서 카페 탭으로 대신 이동해보려고 합니다. XPATH 사용해서 카페로 이동할 때 >>"//*[text()='카페']"<< 이 방식을 사용하려고 하는데요 웹에서 '카페' 키워드 검색하면 텍스트가 6개 나옵니다. 원하는 요소 text가 여러개 있는 경우 어떻게 찾아나가는지 궁금합니다. 아래와 같이 해봤는데 안되었어요. driver.find_elements(By.XPATH, "//*[text()='카페']")[3].click()