T'SPACE

다채로운 에디터들의 이야기

728x90
반응형

컴퓨터공학 109

정렬된 배열을 위한 효율적인 해법: Binary Search (이진탐색)

Binary Search는 정렬된 배열 내에서 대상 요소를 효율적으로 검색할 수 있는 강력한 알고리즘입니다. 이 알고리즘은 검색 공간을 반복적으로 절반씩 나누는 방식으로 작동하므로, 큰 규모의 정렬된 데이터셋에서도 매우 빠르게 동작합니다. 전제 조건: 정렬된 배열 Binary Search를 사용하기 위해서는 배열이 사전에 정렬되어 있어야 합니다. 배열이 정렬되어 있지 않다면 Binary Search가 올바르게 작동하지 않으며, 잘못된 결과를 얻을 수 있습니다. 이러한 요구 사항이 필요한 이유는 Binary Search가 배열의 정렬 순서에 의존하기 때문입니다. 이를 통해 알고리즘은 현재 검색 공간의 중간 요소와 대상 요소를 비교하여 다음에 검색할 절반을 결정할 수 있습니다. 그래서 Sorting이 중요함..

Scikit-learn, Imputer 결측값 처리기 (null values, nan)

결측 값은 AI 개발자들에게 매우 큰 골칫 거리이다 전처리의 기본 단계이며결측 값들을 채우는 방법은 매우 많다가능한 다른 Feature들과 관계를 찾아서 채우면 좋겠지만불가능하거나 너무 복잡한 경우가 있다   단순하게 채우는 가장 간단한 방법은 1. 최빈값2. 평균값3. 중앙값.. 등등 있다  이 과정을 한번에 해주는 library가 Scikit-learn의 imputer 라이브러리다 코드 예시를 한번 보자MissingIndicatorfrom sklearn.impute import MissingIndicatorimport numpy as np# Example data with missing valuesX = np.array([[1, 2, np.nan], [np.nan, 3, 4],..

K-fold Cross Validation 심화편 (Data Leakage, Stratified)

https://tonnykang.tistory.com/137 k-fold cross-validation 교차 검증 (오버피팅 방지) cf) 데이터train data : 학습을 통해 가중치, 편향 업데이트validation data : 하이퍼파라미터 조정, 모델의 성능 확인test data : 모델의 최종 테스트하이퍼파라미터 : 값에 따라서 모델의 성능에 영향을 주 tonnykang.tistory.com 위에서 알 수 있다시피 K-fold Cross-validation은 데이터 수가 적어 underfitting되는 상황을 방지해주고 더 일반화 된 모델을 만드는데 도움이 된다 그러나 문제점이 몇가지 있다 왜 머신러닝에서는 랜덤 샘플링을 선호하지 않을까? 이진 분류 문제를 예시로 들자 우리의 데이터셋은 샘플 ..

[백준,C++] 18111번 : 마인크래프트

* 문제 이해와 해결 과정 땅을 고르게 만들어야 함. 땅을 고르게 만드는 방법에는 2가지가 존재하며 각각 소요시간이 다름. 땅의 높이는 0~256이 될 수 있음. 나에게 주어지는 것은 땅의 가로, 세로 길이와 각 땅의 높이, 인벤토리에 보관 중인 블럭들임. 첫 시도는 실패했는데, 2가지 작업을 동시에 해줄 수 있다는 점과 높이가 0~256일 때의 모든 경우를 고려하여 탐색해야 한다는 점을 간과했다. 결국 문제에서 원하는 것은 최소 시간과 높이다. 높이가 0일 때 시간이 가장 적게 들 수도 있고, 높이가 256일 때 시간이 가장 적게 들 수도 있다. 1)블럭을 파내어 인벤토리에 넣는 작업과 2)인벤토리에 있는 블럭을 꺼내어 쌓는 작업을 적절하게 사용해야한다는 뜻이다. 그래서 높이가 0일때 부터 256일때 ..

k-fold cross-validation 교차 검증 (언더핏팅 방지)

cf) 데이터 train data : 학습을 통해 가중치, 편향 업데이트 validation data : 하이퍼파라미터 조정, 모델의 성능 확인 test data : 모델의 최종 테스트 하이퍼파라미터 : 값에 따라서 모델의 성능에 영향을 주는 매개변수들(ex. learning rate, 은닉층의 수, 뉴런의 수 등) ↔ 가중치, 편향은 학습을 통해 바뀌어져가는 변수이다. cf) 기존 방식 1. 교차검증(cross-validation) 같은 데이터를 여러 번 반복해서 나누고 여러 모델을 학습하여 성능을 평가하는 방법 데이터를 학습용/평가용 데이터 세트로 여러 번 나눈 것의 평균적인 성능을 계산하면, 한 번 나누어서 학습하는 것에 비해 일반화된 성능을 얻을 수 있기 때문 (조금 더 안정적인 성능이 나옴) 장..

Overfitting 과적합

오버피팅(overfitting)이란? 학습 데이터에 대해 과하게 학습하여 실제 데이터에 대한 오차가 증가하는 현상 train-set에서는 정확도 매우 높게 나옴, but test-set에서는 낮은 정확도 오버피팅이 발생하는 이유 훈련 데이터의 부족 적은 양의 훈련 데이터로 모델을 훈련시키면, 모델은 훈련 데이터에만 맞추기 쉬움 복잡한 모델 구조 모델이 지나치게 복잡하면 훈련 데이터에 대한 노이즈나 특정 패턴을 학습하게 되어 일반화 성능이 감소 과도한 훈련 훈련 데이터에 모델을 지나치게 많이 학습시키면 특정 데이터에 과적합될 가능성이 높아짐 해결 방안 더 많은 데이터 수집 더 많은 데이터를 수집함으로써 다양한 상황에서도 일반화 되도록 함 데이터 확장 기존 데이터를 변형하여 새로운 데이터를 생성함으로써 훈련..

[LG Aimers] 해카톤 후기, 코드 분석

*LG Aimers 문제를 공개하면 문제가 있을까봐 간소하게 설명 합니다 문제 Train.csv 파일과 Submission.csv 파일을 두개 준다 Train 파일로 학습을 시켜 True, False를 판단해야하고 Submission에 주어진 정보로 True, False를 판단해 제출하면 채점을 하게 된다 1. Column, 필드(파라미터)가 엄청 많다 2. 결측값(Null Data, Missing Data)이 상당하다 3. 데이터의 질(오타, 형식)등이 고르지 않다 코드 1. 데이터 셋 읽어오기 df_train = pd.read_csv("train.csv") # 학습용 데이터 df_test = pd.read_csv("submission.csv") # 테스트 데이터(제출파일의 데이터) column_to_..

[백준,C++] 18110번 : solved.ac / 사사오입과 오사오입이란?

https://www.acmicpc.net/problem/18110 18110번: solved.ac 5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다. www.acmicpc.net * 해결 아이디어 N명의 사람의 15%를 구한 후, 1~30점 난이도 의견 배열의 앞과 뒤에서 1씩 빼준다. 그려면 30% 절사평균이 구현되며, 배열에 들어있는 값들을 평균내어 문제에 알맞게 출력하면 된다. #include #include #include #include #include #include #include #include #include #include #..

Strassen Algorithm (스트라센 알고리즘) 행렬의 곱

위와같은 두 행렬들이 있다하자 그러면 행렬 A와B의 곲 C는 다음과 같이 표현된다 그러면 아래와같이 이해될 수 있다 이 행렬의 곱 알고리즘의 시간 복잡도는 O(n^3)의 복잡도를 가진다 그래서 매우 큰 행렬들의 곱을 계산할 때는 매우 버거워진다 그의 결과로 분할정복의 한 방법인 Strassen 알고리즘이 나왔다 각 행렬들을 이렇게 4분할을 해보자 그러면 이렇게 계산해도 결과가 나온다 하지만 이건 또 결국 계산을 하다보면 O(n^3)의 복잡도를 가진다 그럼 Strassen 알고리즘은 어떻게 분할하냐? 위의 행렬들을 정의 해준다 그럼 아래와 같은 곱이 성립 한다 행렬의 곱셈을 한번 줄이고! 덧셈을 늘렸다! 그래서 O(n^3)->O(n^2) 로 수렴하게 된다 왜냐 행렬의 곱셈은 for문 골치거리이기 때문에 그..

C++, C 언어 알고리즘 표준 입출력

C++ 입출력 최적화: sync_with_stdio와 cin.tie 이해하기 코딩테스트에서 표준 입출력을 사용할 때 주로 scanf/printf 또는 cin/cout을 사용합니다. C++에서는 string과 같은 편의 기능을 제공하는 cin/cout을 주로 사용하게 됩니다. 그러나 주의해야 할 점은 cin/cout을 사용할 때 시간초과를 막기 위해 특별한 조치가 필요하다는 점입니다. 1. ios::sync_with_stdio(0)과 cin.tie(0) C++에서는 입출력 버퍼를 동기화하는 작업이 기본적으로 수행됩니다. 그러나 이 작업은 입출력의 양이 많을 때 시간을 소비할 수 있습니다. 따라서, 입출력 작업이 많은 경우에는 이 동기화 작업을 해제하는 것이 좋습니다. 동기화 작업 해제를 위해 아래의 두 명..

728x90
반응형