[원티드_프리온보딩]3.컴퓨터공학 핵심개념 정리

컴퓨터공학 핵심개념 정리 객체지향 프로그래밍 (Object-Oriented Programming, OOP) 객체지향 프로그래밍(OOP): 프로그램을 객체라는 단위로 구성하여 소프트웨어를 설계하는 방법론입니다. 객체는 데이터와 그 데이터를 처리하는 함수를 하나의 단위로 묶은 것입니다. 주요 개념: 클래스(Class): 객체를 생성하기 위한 청사진으로, 속성과 메서드를 정의합니다. 객체(Object): 클래스의 인스턴스로, 실제로 메모리에 할당된 구조입니다. 상속(Inheritance): 기존 클래스를 확장하여 새로운 클래스를 생성하는 기능으로, 코드 재사용성을 높입니다. 다형성(Polymorphism): 동일한 인터페이스나 메서드를 통해 다른 동작을 수행할 수 있는 기능입니다. 캡슐화(Encapsulation): 객체의 속성과 메서드를 하나로 묶고, 외부에서 접근을 제한하여 데이터 보호를 강화합니다. 관계형 데이터베이스 (RDBMS)와 SQL 관계형 데이터베이스(RDBMS): 데이터를 테이블 형식으로 저장하며, 데이터 간의 관계를 설정하여 효율적으로 관리합니다. 각 테이블은 고유한 키를 가지고 있으며, 이를 통해 다른 테이블과의 관계를 정의합니다. ...

2024-08-13 · 4 분 · ICE ICE BEAR

[원티드_프리온보딩]4.머신러닝 핵심개념 정리

머신러닝 핵심개념 정리 데이터 전처리 (Data Preprocessing) 데이터 전처리는 머신러닝 프로젝트의 기초 단계로, 데이터를 분석 가능하고 의미 있게 만드는 과정입니다. 데이터 전처리는 전체 데이터 과학 프로세스의 80%를 차지할 정도로 중요합니다. Anthony Goldbloom에 따르면, 데이터 과학자들은 대부분의 시간을 데이터 클리닝과 전처리에 사용하며, 이는 머신러닝 모델의 성능에 직접적인 영향을 미칩니다. 데이터의 특성과 문제점 특성/문제점 정의 발생 원인 해결 방법 잡음 (Noise) 랜덤 에러나 측정된 변수의 변형된 값 센서의 작동 실패, 데이터 전송 문제 회귀 분석, 클러스터링을 통한 노이즈 제거 결측값 (Missing Value) 데이터 수집 과정에서 누락된 값 데이터 입력 누락, 데이터 수집 오류 평균값, 중앙값 대체 또는 행/열 삭제 이상값 (Outlier) 데이터의 정상적인 범위를 벗어난 값 입력 오류, 측정 오류, 실험 조건의 불일치 시각화를 통한 탐지, 통계적 방법을 통한 처리 불일관성 다양한 출처에서 수집된 데이터의 형식 및 단위 차이 데이터 형식 및 단위의 차이 형식과 단위를 일관되게 맞추기 데이터 전처리 기술 데이터 전처리 기술을 사용하여 위의 특성과 문제점을 해결합니다. 이러한 기술은 데이터의 품질을 높이고 머신러닝 모델의 성능을 개선하는 데 필수적입니다. ...

2024-08-13 · 4 분 · ICE ICE BEAR

[원티드_프리온보딩]5.딥러닝 핵심개념 정리

딥러닝 핵심 개념 정리 딥러닝은 인공신경망을 기반으로 하여 대량의 데이터를 처리하고 학습하는 기계 학습의 한 분야입니다. 여러 계층(layer)으로 구성된 신경망을 통해 복잡한 패턴을 학습할 수 있습니다. 아래는 딥러닝의 핵심 개념을 표와 수식, 그래프를 사용하여 자세히 정리한 것입니다. 딥러닝의 기본 개념 인공신경망 (Artificial Neural Network) 인공신경망은 뇌의 신경망을 본떠 만든 구조로, 입력 계층, 은닉 계층, 출력 계층으로 구성됩니다. 각 계층은 뉴런(노드)으로 이루어져 있으며, 뉴런 간에는 가중치(weight)가 연결되어 있습니다. 퍼셉트론 (Perceptron) 구성 요소: 입력, 가중치, 활성화 함수 수식: $$ \text{Output} = f\left(\sum_{i=1}^{n} w_i \cdot x_i + b\right) $$ 여기서 $ w_i $는 가중치, $x_i$는 입력값, $b$는 편향(bias), $f$는 활성화 함수입니다. 다층 퍼셉트론 (Multi-Layer Perceptron, MLP) ...

2024-08-13 · 4 분 · ICE ICE BEAR

[혼공머신]6-1

군집 알고리즘 1. 타깃을 모르는 비지도 학습 비지도 학습은 주어진 데이터에 대해 명시적인 타깃 레이블이 없는 상태에서 유용한 정보를 추출하는 머신러닝 기법입니다. 데이터의 구조나 패턴을 자동으로 인식하여 유사한 데이터물은 하나의 그룹(클러스터)으로 묶는 것이 일반적인 접근 방식입니다. 이러한 접근은 데이터의 숨겨진 특성이나 구조를 이해하는데 도움을 줍니다. 2. 과일 사진 데이터 준비하기 과일 사진 데이터를 사용하여 군집화를 실습하는 경우, 데이터 준비 과정은 다음과 같습니다: 데이터 수집: 다양한 종류의 과일 사진을 수집합니다. 이때, 각 과일의 이미지는 다양한 각도와 배경에서 촬영되어야 합니다. 이미지 전처리: 이미지 크기 조정, 색상 정규화, 필요한 경우 배경 제거 등의 전처리 작업을 수행합니다. 이는 알고리즘의 성능에 크게 영향을 미칠 수 있습니다. 데이터 세트 구성: 전처리된 이미지를 데이터 세트로 구성하여 알고리즘에 입력할 준비를 합니다. # 과일 데이터셋 다운로드 !wget https://bit.ly/fruits_300_data -O fruits_300.npy # 데이터셋 로드 fruits = np.load('fruits_300.npy') import matplotlib.pyplot as plt # 첫 번째 과일 이미지를 흑백으로 시각화 plt.imshow(fruits[0], cmap='gray') plt.show() 3. 픽셀값 분석하기 과일 사진의 픽셀 값을 분석하는 과정은 다음과 같습니다: ...

2024-08-11 · 2 분 · ICE ICE BEAR

[혼공머신]6-2

k-평균 (K-Means) k-평균 알고리즘은 비지도 학습에서 매우 흔히 사용되는 클러스터링 방법입니다. 이 알고리즘의 주 목적은 데이터를 k개의 클러스터로 그룹화하는 것이며, 각 클러스터는 서로 비슷한 특성을 가진 데이터 포인트들로 구성됩니다. 알고리즘의 기본적인 단계는 다음과 같습니다: 초기화: 먼저 클러스터의 수 ( k )를 정하고, 데이터 포인트들 중에서 무작위로 ( k )개의 포인트를 클러스터의 중심(센트로이드)으로 선택합니다. 할당: 각 데이터 포인트를 가장 가까운 센트로이드에 할당하여 클러스터를 형성합니다. 업데이트: 각 클러스터의 평균 위치로 센트로이드를 업데이트합니다. 이 할당과 업데이트 과정을 센트로이드의 변화가 없거나, 사용자가 설정한 최대 반복 횟수에 도달할 때까지 반복합니다. 이 알고리즘은 특히 대용량 데이터 세트에 효과적이며, 다양한 응용 분야에서 클러스터링을 위해 널리 사용됩니다. ...

2024-08-11 · 2 분 · ICE ICE BEAR

[혼공머신]6-3

주성분 분석 1. 차원과 차원 축소 차원의 개념 차원이란 데이터에서 각 특성(Feature)의 수를 의미합니다. 예를 들어, 사람의 키, 몸무게, 나이라는 3가지 특성을 가진 데이터는 3차원 데이터입니다. 차원 축소의 필요성 차원의 저주: 차원이 증가할수록, 각 차원에 걸쳐 데이터를 충분히 표현하기 위해 필요한 데이터 양이 기하급수적으로 증가합니다. 이로 인해 모델의 성능이 저하될 수 있습니다. 계산 효율성 및 시각화: 높은 차원의 데이터를 처리하는 것은 계산상의 비효율을 초래하며, 3차원 이상의 데이터는 직관적으로 이해하고 시각화하기 어렵습니다. 2. 주성분 분석 소개 PCA의 원리 주성분 분석은 데이터의 분산을 최대화하는 축을 찾아 데이터를 새로운 축에 투영함으로써 차원을 축소합니다. 이 때 새로운 축들은 서로 직교합니다. 주성분(Principal Components) 데이터의 분산이 최대인 방향을 찾아 그 방향으로 데이터를 투영한 것이 주성분입니다. 첫 번째 주성분은 데이터의 분산을 가장 많이 설명하고, 두 번째 주성분은 첫 번째 주성분에 직각이면서 다음으로 큰 분산을 설명하는 방향입니다. # 필요한 라이브러리를 불러옵니다. from sklearn.decomposition import PCA from sklearn.datasets import load_iris import matplotlib.pyplot as plt # Iris 데이터셋을 로드합니다. data = load_iris() X = data.data # PCA 모델을 생성하고 학습합니다. 이 때, 2개의 주성분만을 유지하도록 설정합니다. pca = PCA(n_components=2) X_pca = pca.fit_transform(X) # 변환된 데이터의 분포를 시각화합니다. plt.figure(figsize=(8, 6)) plt.scatter(X_pca[:, 0], X_pca[:, 1], c=data.target, cmap='viridis') plt.xlabel('First principal component') plt.ylabel('Second principal component') plt.title('PCA result of Iris Dataset') plt.colorbar() plt.show() 3. PCA 클래스 (scikit-learn) 주요 매개변수 n_components: 축소할 차원의 수를 지정합니다. 기본적으로는 None으로 설정되며, 이 경우 더 적은 수의 주성분으로 설정됩니다. random_state: 결과의 일관성을 위한 난수 시드를 설정합니다. 주요 속성 components_: 추출된 주성분의 방향 벡터입니다. explained_variance_: 각 주성분에 의해 설명된 분산의 양입니다. explained_variance_ratio_: 전체 분산에 대한 각 주성분의 분산 비율입니다. # PCA 객체의 주요 속성을 출력합니다. print("Components (Principal axes):", pca.components_) print("Explained variance:", pca.explained_variance_) print("Explained variance ratio:", pca.explained_variance_ratio_) 4. 원본 데이터 재구성 PCA 변환 후, inverse_transform() 메서드를 사용하여 축소된 차원에서 원본 차원으로 데이터를 복원할 수 있습니다. 이 과정에서 일부 정보 손실이 발생하지만, 주요 특성은 유지됩니다. # 차원 축소된 데이터를 원래의 차원으로 복원합니다. X_inverse = pca.inverse_transform(X_pca) # 원본 데이터와 복원된 데이터의 비교를 위해 시각화합니다. plt.figure(figsize=(8, 6)) plt.scatter(X[:, 0], X[:, 1], alpha=0.2, label='Original') plt.scatter(X_inverse[:, 0], X_inverse[:, 1], alpha=0.8, label='Recovered') plt.legend() plt.title('Comparison of Original and Recovered Data') plt.show() 5. 설명된 분산 설명된 분산은 PCA에서 각 주성분이 데이터 전체 분산에서 얼마나 많은 부분을 차지하는지를 나타내는 지표입니다. 높은 설명된 분산 비율은 주성분이 데이터의 중요한 정보를 많이 포함하고 있음을 의미합니다. 6. 다른 알고리즘과 함께 사용하기 PCA는 다른 기계학습 알고리즘 전에 데이터를 전처리하는 단계로 사용될 수 있습니다. 차원이 축소된 데이터는 학습 속도를 향상시키고, 과적합을 방지하는 효과가 있습니다. 예를 들어, 고차원 데이터에 대해 SVM, 로지스틱 회귀 등을 적용하기 전에 PCA로 차원을 축소하는 것이 일반적입니다. from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split # PCA를 적용한 데이터로 로지스틱 회귀 모델을 학습합니다. X_train, X_test, y_train, y_test = train_test_split(X_pca, data.target, test_size=0.2, random_state=42) model = LogisticRegression() model.fit(X_train, y_train) # 모델의 정확도를 평가합니다. print("Test accuracy:", model.score(X_test, y_test))

2024-08-11 · 3 분 · ICE ICE BEAR

[혼공머신]5-1

결정 트리의 정확도를 높이기 위한 방법 1. 가지치기 (Pruning) 가지치기는 트리의 불필요한 가지를 제거하여 과대적합을 방지하는 방법입니다. 사전 가지치기 (Pre-pruning): max_depth: 트리의 최대 깊이를 제한합니다. min_samples_split: 노드를 분할하기 위한 최소 샘플 수를 지정합니다. min_samples_leaf: 리프 노드가 가져야 하는 최소 샘플 수를 지정합니다. max_leaf_nodes: 리프 노드의 최대 개수를 제한합니다. model = DecisionTreeClassifier(max_depth=5, min_samples_split=10, min_samples_leaf=5, random_state=42) model.fit(X_train, y_train) 사후 가지치기 (Post-pruning): 사후 가지치기는 트리가 생성된 후 가지를 잘라내는 방법입니다. scikit-learn에서 직접 제공하지는 않지만, 트리를 생성한 후 수동으로 가지를 잘라낼 수 있습니다. 2. 앙상블 방법 (Ensemble Methods) 여러 개의 결정 트리를 사용하여 예측을 개선하는 방법입니다. ...

2024-07-28 · 2 분 · ICE ICE BEAR

[혼공머신]5-1-2

결정 트리 (Decision Tree) 결정 트리는 예/아니오에 대한 질문을 통해 데이터를 분류하거나 예측하는 데 사용되는 알고리즘입니다. 이해하기 쉽고, 예측 과정도 투명하게 드러나기 때문에 매우 유용한 도구입니다. 핵심 포인트 불순도 (Impurity): 결정 트리는 데이터를 나눌 때, 각 분할이 얼마나 순수한지를 평가합니다. 사이킷런은 지니 불순도와 엔트로피 불순도를 제공합니다. 불순도는 노드의 순수도를 나타내는 척도로, 낮을수록 더 순수합니다. 정보 이득 (Information Gain): 정보 이득은 부모 노드와 자식 노드의 불순도 차이로 정의됩니다. 결정 트리는 정보 이득이 최대화되도록 학습합니다. 과대적합 (Overfitting): 결정 트리는 트리가 너무 깊어지면 훈련 데이터에 과대적합될 수 있습니다. 이를 방지하기 위해 가지치기 (Pruning)을 사용합니다. 사이킷런은 여러 가지 가지치기 매개변수를 제공합니다. 특성 중요도 (Feature Importance): 결정 트리는 각 특성이 분할에 기여한 정도를 계산할 수 있습니다. 이는 모델의 해석성을 높여주는 중요한 장점입니다. 결정 트리 알고리즘 이해하기 결정 트리 알고리즘은 데이터 분류와 회귀 문제를 해결하는 데 사용됩니다. 예/아니오와 같은 질문을 반복하여 데이터를 분할하며, 최종적으로 목표 변수의 예측을 돕습니다. 아래는 결정 트리의 시각화와 이를 읽는 방법에 대한 설명입니다. ...

2024-07-28 · 3 분 · ICE ICE BEAR

[혼공머신]5-2-2 -추가학습(하이퍼파라미터 튜닝)

하이퍼파라미터를 튜닝하는 방법 그리드 서치와 랜덤 서치 외에도 하이퍼파라미터를 튜닝하는 방법은 여러 가지가 있습니다. 대표적으로는 베이지안 최적화, 하이퍼밴드(Hyperband), 그리고 진화 알고리즘(Evolutionary Algorithms) 등이 있습니다. 각각의 방법을 예시 코드와 함께 구체적으로 설명하겠습니다. 1. 베이지안 최적화 (Bayesian Optimization) 베이지안 최적화는 함수의 최대값이나 최소값을 찾는 데 사용되는 방법으로, 하이퍼파라미터 튜닝에 자주 사용됩니다. 이를 위해 scikit-optimize 라이브러리의 BayesSearchCV를 사용할 수 있습니다. from skopt import BayesSearchCV from sklearn.datasets import load_iris from sklearn.svm import SVC # 데이터 준비 iris = load_iris() X, y = iris.data, iris.target # SVM 모델 정의 svc = SVC() # 하이퍼파라미터 범위 설정 param_space = { 'C': (1e-6, 1e+6, 'log-uniform'), 'gamma': (1e-6, 1e+1, 'log-uniform'), 'degree': (1, 8), 'kernel': ['linear', 'poly', 'rbf'] } # 베이지안 최적화 수행 opt = BayesSearchCV(estimator=svc, search_spaces=param_space, n_iter=32, cv=3, n_jobs=-1, random_state=42) opt.fit(X, y) # 최적의 하이퍼파라미터와 성능 출력 print("Best parameters:", opt.best_params_) print("Best cross-validation score:", opt.best_score_) 2. 하이퍼밴드 (Hyperband) 하이퍼밴드는 자원의 효율적인 할당을 통해 하이퍼파라미터 최적화를 수행하는 방법입니다. scikit-optimize 라이브러리의 SuccessiveHalvingSearchCV를 사용하여 구현할 수 있습니다. ...

2024-07-28 · 2 분 · ICE ICE BEAR

[혼공머신]5-3

XGBoost와 LightGBM XGBoost와 LightGBM은 그레이디언트 부스팅의 구현체로, 빠르고 효율적인 알고리즘을 제공합니다. 이들은 특히 대규모 데이터셋에 대해 뛰어난 성능을 발휘합니다. XGBoost XGBoost는 Extreme Gradient Boosting의 약자로, 효율적이고 확장 가능한 그레이디언트 부스팅 알고리즘입니다. 주요 특징은 다음과 같습니다: Regularization: 과적합을 방지하기 위한 정규화 기법을 포함합니다. Parallel Processing: 병렬 처리를 통해 학습 속도를 향상시킵니다. Tree Pruning: 최적의 트리 크기를 찾기 위해 사후 가지치기를 사용합니다. Sparsity Awareness: 희소 데이터(예: 결측값)에 대한 최적화를 포함합니다. Cross Validation: 내부적으로 교차 검증을 통해 모델의 성능을 평가할 수 있습니다. XGBoost 예제 코드 from xgboost import XGBClassifier from sklearn.model_selection import train_test_split, cross_validate import pandas as pd # 데이터 로드 및 전처리 wine = pd.read_csv('https://bit.ly/wine_csv_data') data = wine[['alcohol', 'sugar', 'pH']].to_numpy() target = wine['class'].to_numpy() train_input, test_input, train_target, test_target = train_test_split(data, target, test_size=0.2, random_state=42) # XGBoost 모델 학습 xgb = XGBClassifier(tree_method='hist', random_state=42) scores = cross_validate(xgb, train_input, train_target, return_train_score=True, n_jobs=-1) print(np.mean(scores['train_score']), np.mean(scores['test_score'])) xgb.fit(train_input, train_target) print(xgb.score(test_input, test_target)) LightGBM LightGBM은 Microsoft에서 개발한 그레이디언트 부스팅 프레임워크로, 다음과 같은 특징이 있습니다: ...

2024-07-28 · 2 분 · ICE ICE BEAR