묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨그림으로 쉽게 배우는 운영체제
멀티프로그래밍, 멀티 태스킹, 멀티 프로세싱
감자님 안녕하세요! https://www.inflearn.com/community/questions/1535537/%EC%9C%A0%EB%8B%88%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EA%B3%BC-%EB%A9%80%ED%8B%B0%ED%94%84%EB%A1%9C%EC%84%B8%EC%8B%B1%EC%9D%B4-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B3%B5%EC%A1%B4%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EA%B1%B4%EA%B0%80%EC%9A%94위 질문의 답변과 1. 현대 운영체제는 멀티프로그래밍, 멀티프로세싱 모두를 이용하시 때문에 멀티프로그래밍과 멀티프로세싱이 같다고 생각하신 것 같습니다. 하지만 유니프로그래밍과 멀티프로세싱도 같이 쓰일 수 있습니다. 예전에는 메모리의 크기가 작았기 때문에 메모리에 하나의 프로세스가 올라왔고 CPU가 이를 처리하다가 보조 저장장치에 저장된 프로세스와 스왑해서 메모리에 올려 다른 프로세스를 처리하는 방식으로 멀티 프로세싱했습니다. 이런 이유로 유니 프로그래밍과 멀티 프로그래밍을 메모리 관점으로 바라보는 것이고, 멀티 프로세싱은 CPU 관점으로 바라본다고 한 것입니다. 오늘날에는 해당 방식이 사용되지 않아서 거의 멀티프로그램=멀티프로세싱으로 보이긴 하지만 차이점은 알아두시면 좋을 것 같습니다!CS 스터디 질문답변에 과거 남겨주신 답변을 보고 헷갈리는 점이 생겨 질문드립니다.오늘 업데이트되기 이전의 영상 [Section2의 멀티 프로그래밍과 멀티프로세싱]에서 설명해주신 멀티 프로세싱의 개념이 멀티 태스킹임을 이해하였습니다. 그렇다면, 이전에 설명해주신 메모리와 CPU의 관점에서 차이를 이해하는 것도 멀티 프로그래밍과 멀티 태스킹인 것일까요??즉, 멀티 프로그래밍이 메모리 관점에서 메모리에 여러 개의 프로세스를 올릴 수 있는 것이고, 멀티 태스킹이 CPU의 관점에서 하나의 CPU가 여러 개의 프로세스를 처리할 수 있다. 로 이해하면 되는 것인가요??디스코드에 남겨주신 답변이 잘못된 것인지 헷갈려서 질문드립니다!
-
미해결아바타 커뮤니티앱 만들기 (React Native Expo)
사용 기기 관련해서 질문 드립니다.
eas와 notification 설정 후에는 로그인 시에 android emulator 상에서 코딩해주신 대로 '실제기기를 사용해주세요' 문구가 나옵니다.ios 는 개발자모드 설정을 구매해야 한다고 해서 기기는 안드로이드로 진행하려고 하는데 android 기기가 따로 없고emulator 로는 실행이 안되는 걸까요? expopushToken만 보내고 로그인이 되지는 않습니다.
-
미해결실습으로 손에 잡히는 SQLD의 정석(2과목)
섹션13-집계함수 SUM, AVG, MIN, AVG, COUNT 강의
해당 강의의 1:39 초에 ORDER BY sal ROWS UNBOUNDED PRECEDING을 추가적으로 넣어주셨는데 avg의 결과값이 이해가 안돼서 질문드리게 되었습니다. avg를 계산할 때도 rows unbounded preceding이 적용되었으니 [CLERK] 파티션에서는- SMITH : 800- ADAMS : (800+950) /2 = 875 이런식으로 계산이 되어야 하는건 아닌지 궁금합니다.하단 테이블에 실제 계산된 값을 보니, [CLERK] 파티션의 AVG 값은 (800 + 950 + 1100+ 1300) / 4 = 1,037.5 값을 출력한 것으로 보이는데 이유가 궁금합니다!
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
풀라우트캐시 3강. book/4를 URL로 요청시 렌더링 과정
안녕하세요 선생님, 질문이 있어서 남깁니다.만약 book/4를 URL로 요청하면 과정이 URL로 book/4 요청 시 Link 등이 없으므로 프리페칭은 안됨- 서버에서 JS 실행 (렌더링)- 렌더링 된 HTML 브라우저에 넘김- 브라우저에서 화면에 렌더링- 서버에서 JSBundel, RSC payload 브라우저에 넘김- 수화과정- 상호작용 가능 이게 맞나요? book/1~3은 staticPage로 풀라우트캐시되어있으니URL로 요청하면 풀라우트캐시에서 바로 HIT해서 주는거고요?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
Editor 컴포넌트는 리렌더링되는 것은 맞나요?
강의내용에 보면 todos가 변경될 때 Editor는 변경이 않되야하는 것 같은데 리렌터링이 됩니다.소스는 같은데 머가문제인지 알 수있을까요?<Editor.jsx>const Editor = () => { const { onCreate } = useContext(TodoDispatchContext); const [content, setContent] = useState(""); const contentRef = useRef(); const onChangeInput = (e) => { setContent(e.target.value); }; const onKeyDown = (e) => { if (e.keyCode === 13) { onSubmit(); } }; const onSubmit = () => { if (content === "") { contentRef.current.focus(); return; } onCreate(content); setContent(""); }; return ( <div className="Editor"> <input ref={contentRef} value={content} onKeyDown={onKeyDown} onChange={onChangeInput} placeholder="새로운 Todo..." /> <button onClick={onSubmit}>추가</button> </div> ); }; export default Editor;<App.jsx>import "./App.css"; import Header from "./components/Header"; import Editor from "./components/Editor"; import List from "./components/List"; import { useState, useRef, useReducer, useMemo, useCallback, createContext, } from "react"; const mockData = [ { id: 0, isDone: false, content: "React 공부하기", date: new Date().toLocaleDateString(), }, { id: 1, isDone: false, content: "빨래하기기", date: new Date().toLocaleDateString(), }, { id: 2, isDone: false, content: "청소하기", date: new Date().toLocaleDateString(), }, ]; const reducer = (state, action) => { switch (action.type) { case "CREATE": return [action.data, ...state]; case "UPDATE": return state.map((todo) => todo.id === action.data.id ? { ...todo, isDone: !todo.isDone } : todo ); case "DELETE": return state.filter((todo) => todo.id !== action.data.id); default: return state; } }; export const TodoStateContext = createContext(); export const TodoDispatchContext = createContext(); function App() { const [todos, dispatch] = useReducer(reducer, mockData); const idRef = useRef(3); const onCreate = useCallback((content) => { dispatch({ type: "CREATE", data: { id: idRef.current++, isDone: false, content: content, date: new Date().getTime(), }, }); }, []); const onUpdate = useCallback((targetId) => { dispatch({ type: "UPDATE", data: { id: targetId } }); }, []); const onDelete = useCallback((targetId) => { dispatch({ type: "DELETE", data: { id: targetId } }); }, []); const memoizedDispatch = useMemo(() => { return { onCreate, onUpdate, onDelete }; }, []); return ( <div className="App"> <Header /> <TodoStateContext.Provider value={{ todos }}> <TodoDispatchContext.Provider value={memoizedDispatch}> <Editor /> <List /> </TodoDispatchContext.Provider> </TodoStateContext.Provider> </div> ); } export default App;
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
maven project 오류
maven 설치한거 같은데 maven이 설치에 문제가 있는걸까요 왜 빌드 했을때 아무것도 작동하지 않는지 알고싶습니다
-
미해결앱 개발 기초부터 실전까지 하나로 끝내는 Swift & iOS 마스터 클래스
Custom Activity Item 질문
안녕하세요 강사님.강의 잘 듣고 있습니다. 정말 도움이 많이 됩니다.저 처럼 늦은 나이에 시작하는 사람한테는 큰 힘이 됩니다.질문내용은 File Manage #11 - Custom Activity Item 강의를 수강하고, 실습을 하던중에 잘 되지않는 사항이 있어 질문 드립니다.이미지의 공유버튼을 누르면 작은 아이콘이 이미지파일명과 같이 뜨는데, 저는 작은 아이콘이 뜨지를 않습니다뭔가를 잘못한거 같은데요.. 바쁘시더라도 한번 봐주셔서 답변 부탁드립니다. 감사합니다.
-
미해결15일간의 빅데이터 파일럿 프로젝트
Hbase에 적재된 데이터 확인시 에러
APi오류가 뜹니다..
-
미해결머신러닝 엔지니어 실무
kubeflow 관련 질문 드립니다
kubeflow 를 구축하면mlops 를 다 할수 있나요? 아니면 추가적으로 다른 플랫폼을 설치해야 하나요? kubeflow 에 이미학습, 파라미터 셋팅 , 서빙등의 기능이 있는데W&B 나 mlflow , bentoml 을 사용하시는 이유가 알고 싶습니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
레디스의 동적 서버 리스트와 샤딩 범위 중복 문제 질문
안녕하세요, 강의 잘 듣고 있습니다. ^^분산 시스템에서 균등 샤딩 부분을 듣다가 궁금한 점이 생겨서 질문드립니다.각 서버는 자신의 @Scheduled에 의해 레디스 서버로 조회하여 자신의 인덱스를 찾은 후 이를 기반으로 각자 서버 로컬에서 샤딩 범위를 계산하는 것으로 이해했는데요. 여기서 궁금한 점은 각 서버마다 @Scheduled가 동작하는 시점도 다를테고, 레디스의 저장된 서버 리스트가 동적으로 변하기도 하는데, 이러한 이유로 서로 다른 서버가 부분적으로 겹치는 샤딩 범위를 각자 계산하여 카프카로 중복 전송하는 시나리오가 발생하지는 않는 것인가요?ex) A의 @Scheduled 동작 시점에서는 서버가 3개 뿐이었지만 B의 @Scheduled 동작 시점에는 서버가 5개로 늘어난 경우서버 A가 계산한 자신의 샤딩 범위 0~20서버 B가 계산한 자신의 샤딩 범위 13 ~ 27 답변 주시면 감사하겠습니다.😊
-
미해결
테스트케이스(장난꾸러기)
30122 123 125 125 128 130 133 137 138 138 140 141 142 143 145 147 149 149 154 154 155 157 161 167 167 167 161 170 173 173 이 테케 답이 24 27인걸로 되어있는데철수는 짝보다 키가 크다는 점이 문제에 명시되어있는데 철수키가 161 짝 키가 173 이라는건 오류 아닌가요?
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
채팅 메시지 저장에 관한 질문입니다.
채팅 메시지를 보낼 때마다 db에 접근해서 저장하는 방식이면 디스크 io 작업이 굉장히 잦아질 거 같은데보통 이런 경우에는 redis 를 쓴다면 redis에 저장해두었다가 스케줄링같은 방식으로 한번에 db에 저장하는 방식을 사용하는 걸까요?
-
해결됨그림으로 쉽게 배우는 운영체제
새로 올라온 영상에서 스와핑 언급이 빠졌는데
혹시 설명 자체가 잘못된 것이어서 빼신 건가요? 프로세스가 메모리 - 하드웨어를 왔다갔다 하는 일이 꼭 유니프로그래밍 아니어도 멀티프로그래밍 상황에서도 일어나는 거라고 생각하면 될까요?...근데 그럼 또 '어차피 프로세스들을 다 메모리에 올려놨는데 스와핑을 해야 할 이유가 뭐지?' 하는 의문이 생깁니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
좋아요 비관적 락 적용 시 데드락 발생 관련 질문입니다..
spring boot: 3.3.2mysql: 8.0.38강사님과 동일한 버전 사용하고 있습니다.@Test void likePerformanceTest() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(100); likePerformanceTest(executorService, 1111L, "pessimistic-lock-1"); likePerformanceTest(executorService, 2222L, "pessimistic-lock-2"); // likePerformanceTest(executorService, 3333L, "optimistic-lock"); } private void likePerformanceTest(ExecutorService executorService, Long articleId, String lockType) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3000); System.out.println(lockType + " start"); long start = System.currentTimeMillis(); for (int i = 0; i < 3000; i++) { long userId = i + 2; executorService.submit(() -> { like(articleId, userId, lockType); latch.countDown(); }); } latch.await(); long end = System.currentTimeMillis(); System.out.println("lockType = " + lockType + ", time = " + (end - start) + "ms"); System.out.println(lockType + " end"); Long count = restClient.get() .uri("/v1/article-likes/articles/{articleId}/count", articleId) .retrieve() .body(Long.class); System.out.println("count = " + count); }위 테스트를 실행 시키면pessimistic-lock-1 start lockType = pessimistic-lock-1, time = 5353ms pessimistic-lock-1 end count = 2991 pessimistic-lock-2 start lockType = pessimistic-lock-2, time = 6667ms pessimistic-lock-2 end count = 2991count 가 3001이 안나오길래 서버 로그를 확인했는데,com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction이렇게 데드락이 발생됐다는 로그가 출력됐더라구요.. 강사님과 똑같은 코드로 실행한거 같은데, 왜 데드락이 발생한걸까요??의심되는 부분은 @Transactional public void likePessimisticLock1(Long articleId, Long userId) { articleLikeRepository.save( ArticleLike.create(snowflake.nextId(), articleId, userId) ); int result = articleLikeCountRepository.increase(articleId); if (result == 0) { articleLikeCountRepository.save( ArticleLikeCount.init(articleId, 1L) ); } }여러 스레드가 동시에 result == 0 조건에 진입해서 동일한 article_id 를 insert 하려고 하다가 충돌되는 과정에서 데드락이 발생된 것 같은데... 정확한 원인이 뭘까요? 제가 잘못 친게 있어서 그런걸까요..? PessimisticLock1, PessimisticLock2 둘 다 데드 락이 발생한 원인이 궁금합니다!게시물 생성 시점에 미리 0으로 count를 생성 해놓으면 괜찮을 것 같은데, 같은 코드로 실행했는대도 결과가 달라 질문남깁니다..
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
CV error
CV를 사용하였는데 하기와 같은 오류가 등장했습니다 : --> 98 raise InvalidParameterError( 99 f"The {param_name!r} parameter of {caller_name} must be" 100 f" {constraints_str}. Got {param_val!r} instead." InvalidParameterError: The 'scoring' parameter of cross_val_score must be a str among {'f1', 'jaccard_micro', 'positive_likelihood_ratio', 'adjusted_rand_score', 'jaccard_weighted', 'homogeneity_score', 'average_precision', 'precision_weighted', 'rand_score', 'roc_auc_ovr', 'roc_auc_ovr_weighted', 'precision', 'explained_variance', 'jaccard_macro', 'recall_macro', 'f1_macro', 'normalized_mutual_info_score', 'precision_samples', 'neg_root_mean_squared_log_error', 'r2', 'neg_negative_likelihood_ratio', 'precision_micro', 'neg_max_error', 'mutual_info_score', 'precision_macro', 'f1_micro', 'v_measure_score', 'completeness_score', 'neg_mean_squared_error', 'accuracy', 'neg_brier_score', 'recall_samples', 'jaccard_samples', 'neg_root_mean_squared_error', 'neg_mean_absolute_percentage_error', 'jaccard', 'f1_samples', 'matthews_corrcoef', 'neg_median_absolute_error', 'neg_mean_gamma_deviance', 'recall_micro', 'neg_mean_absolute_error', 'neg_log_loss', 'roc_auc_ovo_weighted', 'd2_absolute_error_score', 'roc_auc', 'adjusted_mutual_info_score', 'recall', 'recall_weighted', 'balanced_accuracy', 'f1_weighted', 'top_k_accuracy', 'roc_auc_ovo', 'neg_mean_squared_log_error', 'fowlkes_mallows_score', 'neg_mean_poisson_deviance'}, a callable or None. Got 'f1-macro' instead.제가 작성한 코드도 함께 공유 드립니다 : import pandas as pd train=pd.read_csv('train.csv') test=pd.read_csv('test.csv') train=train.drop('ID', axis=1) test_id=test.pop('ID') print(train.shape, test.shape) print(train.head()) print(test.head()) print(train.info()) print(test.info()) print(train.isnull().sum()) print(test.isnull().sum()) y=train.pop('Segmentation') print(y.info(), y.shape) y=y-1 int_cols=train.select_dtypes(exclude='object').columns train[int_cols].corr() cat_cols=train.select_dtypes(include='object').columns print(train[cat_cols].describe(include='object')) print(test[cat_cols].describe(include='object')) for i in cat_cols: train[i]=train[i].astype('object') test[i]=test[i].astype('object') for i in cat_cols: print(train[i].value_counts()) print(test[i].value_counts()) from sklearn.preprocessing import RobustScaler scaler=RobustScaler() for i in int_cols : train[i]=scaler.fit_transform(train[[i]]) test[i]=scaler.transform(test[[i]]) from sklearn.preprocessing import LabelEncoder le=LabelEncoder() for i in cat_cols: train[i]=le.fit_transform(train[i]) test[i]=le.transform(test[i]) print(train.head()) print(test.head()) from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val=train_test_split(train, y, test_size=0.2, random_state=2025) print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape) from sklearn.ensemble import RandomForestClassifier rf=RandomForestClassifier(n_estimators=50, max_depth=7, random_state=2025) rf.fit(X_tr, y_tr) y_pred_rf=rf.predict(X_val) from lightgbm import LGBMClassifier lgbm=LGBMClassifier(random_state=2025) lgbm.fit(X_tr, y_tr) y_pred_lgbm=lgbm.predict(X_val) from xgboost import XGBClassifier xgb=XGBClassifier(random_state=2025) xgb.fit(X_tr, y_tr) y_pred_xgb=xgb.predict(X_val) y_pred_xgb=y_pred_xgb+1 from sklearn.metrics import f1_score print(f1_score(y_val, y_pred_rf, average='macro')) print(f1_score(y_val, y_pred_lgbm, average='macro')) print(f1_score(y_val, y_pred_xgb, average='macro')) from sklearn.model_selection import cross_val_score scores=cross_val_score(rf, train, target, scoring='f1-macro', cv=5) print(scores) print(scores.mean())
-
미해결[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
카카오 로그인시 redirect 에러
❗질문 작성시 꼭 참고해주세요에러 메세지에서 단서를 찾을 수 있는 경우가 많습니다. 에러 메세지를 읽고 한번 검색해보시는것을 추천드립니다.질문글을 작성하실때는, 현재 문제(또는 에러)와 코드나 github을 첨부해주세요.개발중인 OS, ReactNative, Node 버전 등의 개발환경을 알려주셔야합니다.에러메세지는 일부분이 아닌 전체 상황을 올려주세요. 일부만 보여주시면 답변이 어렵습니다.(일부만 자르거나 일부만 복사하지말아주세요.) 현재 3가지 문제가 있는데1. PC 로 url 클릭시 현재 로그인 까진 잘뜨는데 확인하고 계속하기를 누르면 사이트에 연결할수 없다고 뜹니다. 어떤걸 확인해야되는걸까요? 2. 안드로이드랑 ios 시뮬레이터에서 맨위에 로그인 화면 부터 하얀화면으로 뜨고 있는 상황입니다. 피씨로 url 클릭하면 저렇게 잘보이긴해요. rest 키 제대로 들어갔고 redirect url 에 추가 잘했는데 왜그런지 감이 안잡힙니다..3. 아이폰이나 안드로이드 폰에서 직접 테스트해보고 싶은데 어떻게 하면 되는지 알수 있을까요?
-
미해결[C#/.NET 7.0]어서와, WPF는 처음이지?
XAML을 야물이라고 읽으시는데 공식은 재믈 아닌가요?
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!마크다운, 단축키를 이용해서 편리하게 글을 작성할 수 있어요.먼저 유사한 질문이 있었는지 검색해보세요.서로 예의를 지키며 존중하는 문화를 만들어가요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
UpstageEmbeddings 를 사용하여 RAG를 구성하던 도중 Error...
import os # 기존 환경 변수 확인 print("OPENAI_API_KEY:", os.getenv("OPENAI_API_KEY")) print("UPSTAGE_API_KEY:", os.getenv("UPSTAGE_API_KEY")) # OpenAI API 키 삭제 (Upstage API만 사용하도록 설정) if "OPENAI_API_KEY" in os.environ: del os.environ["OPENAI_API_KEY"] # Upstage API 키 직접 설정 os.environ["UPSTAGE_API_KEY"] = "up_kh9mX7uA129qfCuzmcf6COX4HUabn"처음에 OpenAI API 키랑 Upstage API 키 간의 충돌이 일어났구나 싶어, 위와 같이 코드를 작성한 후에 다시 크로마 DB에 임베딩을 시켜보는 데도 계속 똑같습니다 ㅠㅠ 심지어 API 키를 계속 새로 발급받아도 이래요 ㅠㅠ어디가 문제일까요...?
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강기간 연장을 부탁드립니다.
안녕하세요 강사님.다름이 아니라 개인적인 사정으로 인해 강의를 모두 수강하지 못하여, 수강 기간 연장을 요청드리고 싶습니다.혹시 가능하시다면 연장해 주실 수 있을까요? 번거롭게 해드려 죄송합니다.감사합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
XGBClassifier 사용 에러
XGBClassifier 를 사용해서 target을 분류하려고 하는데, 아래와 같은 에러가 나타납니다 : ValueError: Invalid classes inferred from unique values of y. Expected: [0 1 2 3], got [1 2 3 4]LabelEncoder를 사용해서 processing 도 다 했고, LGBMClassifier랑 RandomForestClassifier는 다 잘 돌아가는데 XGBClassifier만 저런 오류가 나타나네요;;; 참고를 위해 지금까지 작성한 코드 하기로 공유 드립니다 : import pandas as pd train=pd.read_csv('train.csv') test=pd.read_csv('test.csv') train=train.drop('ID', axis=1) test_id=test.pop('ID') print(train.shape, test.shape) print(train.head()) print(test.head()) print(train.info()) print(test.info()) print(train.isnull().sum()) print(test.isnull().sum()) y=train.pop('Segmentation') y=y.astype('object') y=y.astype('category') print(y.info(), y.shape) int_cols=train.select_dtypes(exclude='object').columns train[int_cols].corr() cat_cols=train.select_dtypes(include='object').columns print(train[cat_cols].describe(include='object')) print(test[cat_cols].describe(include='object')) for i in cat_cols: train[i]=train[i].astype('object') test[i]=test[i].astype('object') for i in cat_cols: print(train[i].value_counts()) print(test[i].value_counts()) from sklearn.preprocessing import RobustScaler scaler=RobustScaler() for i in int_cols : train[i]=scaler.fit_transform(train[[i]]) test[i]=scaler.transform(test[[i]]) from sklearn.preprocessing import LabelEncoder le=LabelEncoder() for i in cat_cols: train[i]=le.fit_transform(train[i]) test[i]=le.transform(test[i]) print(train.head()) print(test.head()) from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val=train_test_split(train, y, test_size=0.2, random_state=2025) print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape) y_val=y_val.astype('category') y_tr=y_tr.astype('category') from sklearn.ensemble import RandomForestClassifier rf=RandomForestClassifier(n_estimators=100, max_depth=5, random_state=2025) rf.fit(X_tr, y_tr) y_pred_rf=rf.predict(X_val) from lightgbm import LGBMClassifier lgbm=LGBMClassifier() lgbm.fit(X_tr, y_tr) y_pred_lgbm=lgbm.predict(X_val) from sklearn.metrics import f1_score print(f1_score(y_val, y_pred_rf, average='weighted')) print(f1_score(y_val, y_pred_lgbm, average='weighted')) from xgboost import XGBClassifier xgb=XGBClassifier() xgb.fit(X_tr, y_tr) y_pred_xgb=xgb.predict(X_val)