[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI 99

[scikit-learn 라이브러리] 특이값분해 (SVD)

특이값분해 (SVD) PCA의 경우 정방행렬(행과 열의 크기가 같은 행렬)만을 고유벡터로 분해할 수 있으나 SVD는 정방행렬뿐만 아니라 행과 열의 크기가 다른 행렬에 대해서도 적용할 수 있다. SVD는 m x n 크기의 행렬 A를 분해하여, U, ∑, V 행렬로 만든다. 행렬 U와 V에 속한 벡터는 특이 벡터(Singular Vector)라고 하며, 모든 특이 벡터는 서로 직교하는 성질을 가진다. ∑는 직사각 대각 행렬이며, 행렬의 대각에 위치한 값만 0이 아니고 나머지 위치의 값은 모두 0의 값을 가진다. m n인 경우 두번째와 같이 분해 ∑의 0이 아닌 대각 원소값을 특이값(Singular Value)라고 한다. TruncatedSVD # 2개의 주요 c..

[scikit-learn 라이브러리] 특성 자동 선택

특성 자동 선택 특성이 너무 많아지면 모델이 복잡해지고 과대적합 가능성이 올라간다. 따라서 유용한 특성만 선택하고 나머지는 무시해서 특성의 수는 줄이는 것이 좋다. 특성 선택 방법 : 일변량 통계, 모델 기반 선택, 반복적 선택 일변량 통계 특성과 타켓 사이에 중요한 통계적 관계가 있는지 계산하고 깊게 관련된 것만 선택한다. from sklearn.feature_selection import SelectPercentile # SelectPercentile을 사용하여 특성의 50%를 선택하는 모델 생성 select = SelectPercentile(percentile=50) # 특성 선택 select.fit(X_train, y_train) X_train_selected = select.transform(X..

[scikit-learn 라이브러리] 오차행렬

오차행렬 TN : 예측값을 Negative 값 0으로 예측했고 실제 값은 역시 Negative 값 0 FP : 예측값을 Positive 값 1로 예측 했는데 실제 값은 Negative 값 0 FN : 예측값을 Negative 값 0으로 예측했는데, 실제 값은 Positive 값 1 TP : 예측값을 Positive 값 1로 예측했는데 실제 값 역시 Positive 값 1 학습에 사용된 분류모델이 얼마나 혼란스러워하고 있는지 판단 할 수 있는 지표 confusion_matrix() confusion_matrix(y_true, y_pred) y_true : 정답 y_pred : 예측 결과 사용 예시 from sklearn.model_selection import train_test_split from skl..

[scikit-learn 라이브러리] 그리드서치

검증 데이터 세트 기존엔 단순히 학습 데이터 세트와 테스트 데이터 세트로 데이터를 나눴다. 만약 매개변수를 조정하기 위해 테스트 세트를 사용하면 추후 모델 평가에 테스트 세트를 더 이상 사용할 수 없다. 즉, 평가를 위해 모델을 만들 때 사용하지 않은 독립된 데이터셋이 필요하다. 데이터를 세 개의 세트로 나눠 이 문제를 해결 학습 데이터 세트 : 모델을 작성 검증 데이터 세트 : 모델의 매개변수 선택 테스트 데이터 세트 : 모델의 성능 평가 그리드서치 사용자가 관심있는 매개변수 전체를 대상으로 가능한 모든 조합을 시도해보는 것이다. # 매개변수 그리드 param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100], 'gamma': [0.001, 0.01, 0.1, 1, 10, ..

Pandas 데이터프레임 출력양 조절

set_option import pandas as pd pd.set_option('display.max_columns', 6) pd.set_option('display.width', 300) 가끔 pd로 데이터를 다루다가 출력양이 너무 많아 다음줄로 넘어가는 경우가 있다. (상당히 가시성이 떨어진다.) set_option에서 display.max_columns값과 display.width값을 조절해 출력양을 조절할 수 있다. max_columns : columns 개수 조절 width : 가로 너비 출력양 조절

[scikit-learn 라이브러리] 교차 검증

교차 검증 (Cross Validation) 일반화 성능 향상을 위해 훈련 세트와 테스트 세트를 한 번만 나누는 것보다 더 안정적이고 뛰어난 평가 방법이다. 여러개의 세트로 구성된 학습 데이터와 테스트 데이터로 학습과 평가를 수행한다. k-겹 교차검증 : 데이터를 폴드(fold)라는 거의 비슷한 크기의 부분집합 k개로 분리하고 각 부분집합의 정확도를 측정한다. 교차 검증의 점수가 높을수록 데이터셋에 있는 모든 샘플에 대해 모델이 잘 일반화되게 된다. 하지만 연산비용이 늘어나게 된다는 단점이 있다. scikit-learn에서 교차 검증은 model_selection 모듈의 cross_val_score라는 함수로 구현되어 있다. cross_val_score() cross_val_score(estimator,..

[scikit-learn 라이브러리] SVC (SVM)

SVM이란? SVM은 분류에 사용되는 지도학습 머신러닝 모델이다. SVM은 서포트 벡터(support vectors)를 사용해서 결정 경계(Decision Boundary)를 정의하고, 분류되지 않은 점을 해당 결정 경계와 비교해서 분류하게 된다. 기존의 퍼셉트론은 가장 단순하고 빠른 분류 모형이지만 결정경계가 유일하게 존재하지 않는다. 서포트 벡터 머신(SVM)은 퍼셉트론 기반의 모형에 가장 안정적인 결정 경계를 찾기 위해 제한 조건을 추가한 모형이라고 볼 수 있다. 서포트 벡터 : 클래스 사이 경계에 가깝게 위치한 데이터 포인트 (결정 경계와 이들 사이의 거리가 SVC 모델의 dual_coef_에 저장된다.) 커널 기법 데이터셋에 비선형 특성을 추가하면 선형 모델을 더 강력하게 만들 수 있음 하지만,..

오토 인코더 기초개념

오토인코더 개념 지금까지의 신경망의 주 목표는 입력에 대한 출력을 학습한 뒤 학습과정에서 보지 못했던 새로운 입력에 대해서도 알맞은 정답을 출력하는 것이 목표였다. 오토 신경망은 자기 자신을 재생성하는 신경망이다. 오토 신경망도 결국 입력에 대한 출력을 학습해야 하지만, 출력이 입력과 동일하다는 점이 특이하다. 오토 인코더의 구조 인코더 - 잠재변수(latent vector) - 디코더로 구성된다. 인코더에선 컨볼루션 레이어와 풀링 레이어를 통해 입력값에 대한 특징을 추출해서 일차원벡터로 만든다. 이러한 일차원 벡터가 '잠재변수((rating vector)'이다. 디코더는 압축된 일차원 벡터 잠재변수를 해석해 다시 입력 데이터와 같아지도록 만든다. 오토 인코더의 필요성 오토인코더는 잠재변수를 입력으로 디..

기초 추천시스템 - 사용자 기반 협업 필터링

협업 필터링은 다른 사용자들을 통해 현 사용자의 취향을 추측한다. 협업 필터링은 사용자 기반 필터링과 아이템 기반 필터링으로 나뉘어진다. 먼저 사용자 기반 협업 필터링을 사용해보겠다. 데이터 불러오고 처리하기 import pandas as pd import numpy as np ratings = pd.read_csv('../data/ratings.csv') movies = pd.read_csv('../data/movies.csv') pd.set_option('display.max_columns', 6) pd.set_option('display.width', 300) movie_ratings = pd.merge(ratings, movies, on='movieId') print(movie_ratings) h..

기초 추천시스템 - 컨텐츠기반 필터링

추천 시스템의 종류에는 크게 컨텐츠기반 필터링, 협업 필터링이 있다. 컨텐츠기반 필터링 : 컨텐츠끼리의 유사도 기반 추천, 장르 및 키워드 등의 정보를 벡터화하여 유사도를 측정한다. 코사인 유사도 : 코사인 값을 기반으로 결정하는 유사도. 두 벡터의 각도가 직각이면 0, 180도면 -1, 0도면 1의 값을 갖는다. kaggle에 존재하는 데이터로 추천시스템을 만들어 컨텐츠기반 필터링이 어떤 원리로 이루어지는지 알아보겠다. 추천시스템 : 데이터 불러오기 및 전처리 import pandas as pd import numpy as np from ast import literal_eval movies = pd.read_csv('../data/tmdb_5000_movies.csv') movies = movies...