Persist를 실행할 때는 영속성 컨텍스트 1차 캐시에 데이터를 넣지 않는 건가요? 아니면 persist도 1차 캐시에 데이터와 스냅샷 모두 저장하나요?Find를 실행해서 db에서 가져올 때만 가져올 때의 엔티키 상태를 스냅샷을 찍고 엔티티와 함께 1차 캐시에 저장하나요?jpql 실행시에는 1차 캐시를 조회하지 않는 건가요?이 질문의 이유:Find는 1차 캐시에 있는 엔티티를 먼저 조회하는 것으로 알고 있습니다.jpql을 실행할 때 Member 데이터가 없으면 안된다고 설명하고 있습니다그래서 jpql 실행은 1차 캐시를 먼저 찾지 않고 바로 쿼리를 전송하는 것인가? 라는 생각이 들었습니다.jpql이 1차 캐시를 조회하지 않으면 persist 호출 시 1차 캐시에 엔티티를 저장해도 db에서 찾으니까 결국 flush가 발생한다는 생각이 맞아 떨어지는 것 같습니다.
안녕하세요 선생님 저는 작업형 2를 아래와 같은 매커니즘으로 푸려고 합니다. train.info()를 통해서 object 컬럼 확인 → 만약 범주형 데이터가 있다면? → 라벨인코딩 (여기서 cols = train.select_dtypes(include='object').columns 로 해서 푸려고 합니다.) → target = train.pop('타겟컬럼') train = train.drop('ID',axis=1) test_ID = test.pop('ID') → train_test_split을 통해 검증데이터 분리 train_test_split(train, target, test_size=0, random_state=0) <여기서 train과 target으로만 쓰기 위해서 위에서 pop과 drop을 진행했습니다.> → 모델 예측 및 검증 무조건 랜덤포레스트로 진행하고 그 후에 하이퍼파라메터 튜닝으로 성능 비교해볼 생각입니다. → 평가지표에 따른 성능 비교 → 하이퍼파라메터 튜닝 적용해보기 → DataFrame 만들기 → csv만들기 매커니즘에 따른 코드는 다음과 같습니다. train.info () from sklearn.preprocessing import LabelEncoder cols = train.select_dtypes(include='object').columns for col in cols: le = LabelEncoder() train[col] = le.fit_transform(train[col]) test[col] = le.transform(test[col]) target = train.pop('타겟컬럼') train = train.drop('ID',axis=1) test_ID = test.pop('ID') from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0, random_state=0) from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(random_state=0, max_depth = 5, n_estimators = 500) rf.fit(X_tr,y_tr) pred = rf.predict(X_val) from sklearn.metrics import f1_score print(f1_score(y_val, pred, average='macro')) pred = rf.predict(test) submit = pd.DataFrame({ 'ID' : test_ID, '타겟컬럼' : pred }) submit.to_csv('0000.csv', index=False) 여기서 질문은 1. pop과 drop을 저 단계에서 해줘도 무방한가요? cols를 라벨 인코딩에서 먼저 정의해주게 되는데 그 이후에 pop과 drop써도 무방한지 여쭤봅니다. 2. 물론 어떤 데이터를 주냐에 따라 다르겠지만 위와 같은 과정으로 진행해도 점수획득에 큰 무리 없겠죠? (교차검증등등은 진행하고 싶지 않아서요) 3. 범주형 데이터가 하나도 없다면? 그럴일이 없을거 같긴한대 그러면 인코딩단계만 빼고 그대로 진행하면되나용?
[질문 내용] 우선 단방향 연관관계를 적용하고 꼭 필요한 경우에 양방향 연관관계를 사용하라는 내용을 적용해보다가 이해가 안되는 부분이 생겨서 질문남깁니다. Team과 Member로 양방향 연관관계를 적용한다고 생각해보면 다른 질문의 답변을 봤을 때 Team을 조회할 때 Member가 거의 같이 조회가 되는 경우와 fetch join으로 조회 시 양방향 연관관계를 사용하여 더 편리하게 조회할 때 사용한다는 답변을 봤습니다. (제대로 이해한 것인지는 모르겠습니다.) 그래서 테스트를 해봤습니다. @Test void 멤버목록과_함께_팀조회() { Team team = new Team("teamA"); entityManager.persist(team); Member member = new Member("m1", 0, team); Member member2 = new Member("m2", 0, team); entityManager.persist(member); entityManager.persist(member2); entityManager.flush(); entityManager.clear(); System.out.println("====테스트 1 양방향 연관관계==="); Team findTeam = teamJpaRepository.findById(team.getId()).get(); List<Member> members = findTeam.getMembers(); for (Member member1 : members) { System.out.println("member1 = " + member1.getUsername()); } entityManager.flush(); entityManager.clear(); System.out.println("===테스트 2 fetch join 양방향 연관관계 사용=="); Team findTeam2 = teamRepository.findTeamWithMembersById(team.getId()).get(); List<Member> members2 = findTeam2.getMembers(); for (Member member1 : members2) { System.out.println("member1 = " + member1.getUsername()); } entityManager.flush(); entityManager.clear(); System.out.println("===테스트 3 fetch join 그냥 엔티티 사용=="); Team findTeam3 = teamRepository.findTeamWithMemberById(team.getId()).get(); List<Member> members3 = findTeam3.getMembers(); for (Member member1 : members3) { System.out.println("member1 = " + member1.getUsername()); } } public interface TeamRepository extends JpaRepository<Team, Long> { @Query("select t from Team t join fetch t.members") Optional<Team> findTeamWithMembersById(Long id); @Query("select t from Team t join fetch Member m") Optional<Team> findTeamWithMemberById(Long id); } 테스트 1의 경우 두개의 쿼리가 나가는 것을 확인했습니다. select t1_ 0.team _id, t1_0.create_by, t1_0.created_date, t1_0.last_modified_by, t1_0.last_modified_date, t1_ 0.name from team t1_0 where t1_ 0.team _id=? select m1_ 0.team _id, m1_0.member_id, m1_0.age, m1_0.create_by, m1_0.created_date, m1_0.last_modified_by, m1_0.last_modified_date, m1_0.username from member m1_0 where m1_ 0.team _id=? 테스트 2의 경우 한개의 쿼리만 나가는 것을 확인했습니다. select t1_ 0.team _id, t1_0.create_by, t1_0.created_date, t1_0.last_modified_by, t1_0.last_modified_date, m1_ 0.team _id, m1_0.member_id, m1_0.age, m1_0.create_by, m1_0.created_date, m1_0.last_modified_by, m1_0.last_modified_date, m1_0.username, t1_ 0.name from team t1_0 join member m1_0 on t1_ 0.team _id=m1_ 0.team _id 테스트 3의 경우 오류가 났습니다. 위의 테스트 1(getMembers로 접근), 테스트2(fetch join)의 경우 쿼리의 개수로 봤을 때 테스트 2를 사용하는 게 더 좋은 것 같은데 맞을까요? 테스트 3은 단방향인 경우 팀과 멤버를 같이 조회를 어떻게 해야되나요? 양방향 연관관계가 필요한 경우가 뭔가요? 원래 api 설계할 때 team, member를 각각 조회하는 경우만 만들었었는데, team과 member가 같이 조회되는 api를 만드는 경우도 있나요? (team/{id}, member/{id} 와 같은 경우만 만들어봤습니다.)
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 범주형 데이터가 있으면 필수로 인코딩을 해줘야하는걸로 알고 있는데요 이때 무조건 라벨인코딩으로 진행하려고 하는데 문제없는 사항인가요?
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 안녕하세요. 좋은 강의 감사드립니다. 오류 없이 결과는 나왔습니다. 제 코드가 맞는지, 엉뚱한지 확인이 어려워 질문드립니다. 맞는 풀이인가요? 고쳐야 할 부분이 어떤 부분인가요? ID 드랍하지 않고 쭉 진행했는데, 이러할 경우 문제가 되나요? roc_auc_score, submit 과정에서 pred에 [:,1] 을 하면 오류가 없고, 빼면 오류가 생기는데 pred[:,1]인 이유가 헷갈립니다. 랜덤포레스트에서 random_state=2024만 적어서 돌려도 되나요? 질문이 장황한데 답변 주셔서 항상 감사합니다! cols = ['Warehouse_block' ,'Mode_of_Shipment','Product_importance' , 'Gender'] from sklearn.preprocessing import LabelEncoder le = LabelEncoder() for col in cols: X_train[col] = le.fit_transform(X_train[col]) X_test[col] = le.transform(X_test[col]) from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_train, y_train['Reached.on.Time_Y.N'], test_size = 0.2, random_state = 2024) from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(n_estimators=160, max_depth=20, random_state=2024) rf.fit(X_train, y_train) pred = rf.predict_proba(X_test) from sklearn.metrics import roc_auc_score print(roc_auc_score(y_test, pred[:,1])) pred = rf.predict_proba(X_test) pred submit = pd.DataFrame({ 'ID': X_test['ID'], 'pred':pred[:,1] }) submit.to_csv("result.csv", index=False) import pandas as pd df = pd.read_csv("result.csv")
안녕하세요 선생님, CLIENTNUM,Attrition_Flag 타겟 분류 문제에서, y가 분류니까 roc_auc_score을 구할 때 predict_proba를 이용해서 구했는데 from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier() model.fit(X_tr,y_tr) pred = model.predict(X_val) print(accuracy_score(y_val, pred)) # 정밀도 print(precision_score(y_val, pred)) # 재현율 (민감도) print(recall_score(y_val, pred)) # F1 print(f1_score(y_val , pred)) 정확도 ~ f1까지는 proba를 안하고 바로 구했는데 어떤 차이로 인해 얘네는 proba를 안하게 될까요 ? ㅜㅜ
선생님, 이제 한 열흘 정도 남은 상황에서 강의 보면 이해는 되는데 실제로 타이핑 치려니까 머리속이 하얘지면서 어려운데, ㅠ 앞으로 남은 기간동안은 어떤 방식으로 공부를 하는게 좋을까요? 강의를 빼곡히 노션에 정리하면서 멘트나 그런것들 정리해뒀는데... 막막하네요ㅜ.ㅜ 1유형은 캐글 반복 + 2유형 기출만 반복(1~7회) 3유형은 회귀분석이랑 분산분석 2개만 외워가려고요..ㅎ 갑갑하네요ㅜ.ㅜ 증말
문제 1-2 accuracy를 구하는 문제를 저는 다음과 같이 풀었습니다. from statsmodels.formula.api import logit model = logit('purchase~income', data=train).fit() target = test.pop('purchase') pred = model.predict(test) > 0.5 from sklearn.metrics import accuracy_score print (round(accuracy_score(target, pred),3)) 답은 0.507로 동일하게 나오는 것 같습니다. 다음과 같이 풀어도 문제 없는걸까요? 그리고 pred = model.predict(test) > 0.5에서 '>0.5'의 역할은 무엇인지 다시 한번 설명해 주실 수 있을까요?
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 cond1 = df['종량제봉투종류'] == '규격봉투' cond2 = df['종량제봉투용도'] == '음식물쓰레기' cond3 = df['2ℓ가격'] != 0 df = df[cond1 & cond2 &cond3] print(round(df['2ℓ가격'].mean())) 위 작업에서 cond1,2,3를 df에 대입하지 않고 print문으로 평균을 구할 수 있는 방법이 있나요?? 아니면 따로 방법이 없어서 df에 대입 후 2ℓ가격의 평균을 구한 건지 궁금합니다!
안녕하십니까. 선생님 수업 잘 듣고 있는데 제가 전처리나 피처엔지니어링에서 정확한 기준을 모르겠습니다. 그냥 object타입을 모두 제거하거나 아니면 결측치가 있는 경우 어떤것은 제거하고 어떤것은 0으로 채우는데 정확한 기준이 있나요? 있다면 대략적인 기준을 알고 싶습니다.
안녕하세요. 궁금한 점이 있어 문의 드립니다. 아래의 isUnique 메서드가 실행되었을 때를 가정해서 질문해보면 isUnique 매서드가 호출이 될 때 스택에 새롭게 할당이 되고 코드가 실행이 될텐데 이 때 이 새롭게 생성된 스택 영역 안에서 매개변수로 받은 number의 값 말고 나머지 바디에 있는 count 변수나 lottoNumbers 배열을 아는 건 메서드 영역의 클래스 영역에서 클래스 네임별로 구별이 되어 있고 그 클래스의 메서드를 가져다 쓰는 거니 메서드 내부의 변수들도 그 클래스에 해당한다는 걸 스택영역에서 알 수가 있는 거죠 ? 생각해보니 메서드 영역과 스택 영역은 분리되어 있고 메서드가 호출될 때 새롭게 스택 영역이 할당이 될텐데 어떻게 새롭게 할당된 공간 안에서 메서드 내부의 값들을 다 알까 싶어서요. 감사합니다.
문제에서 자료형이 object인 칼럼을 삭제하라고 하였는데 df.head()로 출력하면 'age', 'f1', 'f2', 'f5', 'views' 가 object인 칼럼을 제외한 칼럼이지만, df.info()로 출력하면 아래 사진과 같이 'age', 'f1', 'views' 만이 object인 칼럼을 제외한 칼럼으로 나옵니다. 어떤게 맞는 기준인지 판단하기가 어려워 질문 드립니다. 이럴 땐 어떻게 사고하고 판단하여야 할까요?