[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] ```java public void add(Object e, int index) { if (size == elementData.length) { grow(); } for (int i = elementData.length - 1; i > index; i--) { elementData[i] = elementData[i - 1]; } elementData[index] = e; size++; } ``` for문 조건에서 for (int i = elementData.length - 1; i > index; i--) i의 초기값을 배열의 길이로 주는 것보다는 현재 배열에 담고 있는 요소의 수인 (size-1)변수로 주는 것이 루프문의 범위를 줄이고 정말 미세한차이겠지만 조금 더 효율적이라고 생각하는데 혹시 (size-1)변수로 반복문 초기값을 설정했을 때 문제될 점이 있을까요??
안녕하세요 강사님! 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 정도로 해도 될까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 이 코드에서 생성메서드를 @Builder 를 사용한 생성자로 교체하고 싶습니다. 유연한 생성을 통해 테스트 하기 편한 객체 생성을 위해서 더 좋다고 생각했기 때문입니다. 그런데 @Builder 생성자를 사용할때, 연관관계 편의 메서드를 어떻게 활용해야 할지 고민입니다. 다른 사람들의 코드를 보니, @Builder 생성자에서 @OneToMany 의 양방향 필드는 초기화 하지 않는 경우를 봤는데, 그러면 연관관계를 어떻게 설정하고, 또 왜 연관관계 편의 메서드를 초기화시에 사용하지 않는지 궁금합니다.
공부삼아서 과제 프로젝트에 테스트를 도입하다가 궁금한 게 잇어서 질문드립니다. 거래내역 조회를 구현할 때 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)을 넣어야만 실행되는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 예제를 따라하면서 호기심에 deque.push(1); deque.push(2); deque.push(3); System.out.println("deque.pop() = " + deque.poll()); System.out.println("deque.pop() = " + deque.poll()); System.out.println("deque.pop() = " + deque.poll()); pop을 -> poll로 바꿔봤는데 결과값이 똑같이 나오고 그 반대로 offer / pop 으로 해도 마찬가지더라구요! Deque<Integer> deque = new ArrayDeque<>(); 혹시 이 Deque가 queue / stack 둘 다 지원하기 때문에 데이터를 추가 할 때 자료구조가 결정되는게 맞는건가요?