본문 바로가기

Data Analysis

(20)
Kaggle에 submit 하기 Kaggle은 각 문제마다 train 데이터셋과 test 데이터셋, sample_submission 데이터셋을 제공한다. 우리가 머신러닝 모델을 만들었다면 최종적으로 test 데이터셋의 예측값들을 Kaggle에게 알려주어야 한다. 이 과정은 보통 submission.csv 파일을 만들어서 Kaggle에 업로드하면 간단히 끝낼 수 있다. 우선 제출할 데이터가 아래와 같이 있다고 하자. print(submission_data.head()) print(submission_data.describe()) submission_data.info() Pandas DataFrame 인 submission_data 변수로부터 submission.csv 파일을 만들어야 한다. 이 파일은 아래 코드로 간단히 생성할 수 있다...
Scikit-learn HardVoting, SoftVoting 사용법 머신러닝 전략 중에서 성능을 높이기 위해 사용하는 방법 중 하나는 다수결의 원칙을 따르는 것이다. 1과 0중 하나를 예측해야 할 때 모델 A는 1, 모델 B는 0, 모델 C는 1을 예측했다면 다수결에 따라 최종 예측을 1로 한다. 이를 Hard Voting 이라 한다. 각 모델은 1과 0을 예측할 때 Hard Voting 처럼 둘 중 하나만 지정할 수도 있고, 0.8의 확률로 1이 예측되고 0.2의 확률로 0이 예측된다고 말할수도 있다. 만약 모델 A가 1을 0.8, 0을 0.2의 확률로 예측하고 모델 B가 1을 0.7, 0을 0.3의 확률로 예측하고 모델 C가 1을 0.2, 0을 0.8의 확률로 예측했다면 1의 최종 예측 확률은 (0.8 + 0.7 + 0.2) / 3 = 0.57, 0의 최종 예측 확률..
모델 학습 시간과 성능은 비례하지 않는다 머신러닝 문제를 풀다가 모델의 학습 시간이 길다고 해서 성능이 좋은 건 아니라는 사실을 알게 되었다. 아래 코드를 통해서 여러 머신러닝 모델의 학습 시간을 측정하였다. # 리스트 준비 models = [ran, knn, log, xgb, gbc, svc, ext, ada, gnb, gpc, bag] model_names = ['Random Forest', 'K Nearest Neighbour', 'Logistic Regression', 'XGBoost', 'Gradient Boosting', 'SVC', 'Extra Trees', 'AdaBoost', 'Gaussian Naive Bayes', 'Gaussian Process', 'Bagging Classifier'] scores = {} # 모델 튜닝 ..
3. DataFrame의 column별 데이터의 분포가 보고 싶을 땐 seaborn.displot() 각 컬럼별로 어느 구간에 데이터가 몰려있는지 알고 싶다면 seaborn의 displot을 사용해보자. import random import seaborn as sns rand_data = [] for _ in range(1, 10000): # 10000개의 난수 생성 rand_data.insert(0, random.randrange(0, 10001)) # 생성된 난수는 0~10000 사이의 값을 가짐 sns.displot(data = rand_data, kind='kde').set(title='Random Values') 위의 예제는 0~10000개의 난수를 생성하여 rand_data 배열에 넣고 이 난수들의 분포를 seaborn을 통해 시각화하는 코드이다. 참고로, 각 난수는 0~10000 사이의 값을..
2. EDA에 도움되는 파이썬 Pandas 함수들 EDA 과정에서 도움이 되는 기본적인 Pandas 함수들을 titanic 데이터를 활용하여 알아보자. 우선, 아래는 예제 데이터이다. 위 데이터를 가지고 Pandas 함수를 사용해보자..! 1. shape 데이터의 행과 열을 (행, 열) 형식으로 표시해준다. titanic_train.shape 2. dtypes 데이터의 각 컬럼별 자료형을 알려준다. titanic_train.dtypes 3. columns 데이터의 컬럼들을 알려준다. titanic_train.columns 4. head & tail 데이터의 일부 row를 앞에서부터 보고 싶을 경우 head 함수를, 뒤에서부터 보고 싶을 경우 tail 함수를 사용한다. 기본 갯수는 5개이며 직접 지정 가능하다. titanic_train.head() tit..
1. 결측값을 한눈에 보여주는 missingno When 분석하고자 하는 데이터 중 어디가 얼만큼 비어있는지(결측값) 확인할 때 유용하다. missingno를 쓰면 데이터가 존재하는 부분은 검은색으로, 존재하지 않는 부분은 하얀색으로 표시된다. Result titanic_data는 train 데이터 뒤에 test 데이터를 덧붙인 데이터이기 때문에 위 그림에서 Survived 뒤쪽이 전부 하얗다. test 데이터는 모두 Survived 값이 없기 때문이다. Code import missingno missingno.matrix(titanic_data, figsize=(12,6)) Data Kaggle Titanic Data
축구에서 골이 나올 확률을 계산하려면 Random Forest를 써보자 이 글은 "RANDOM FOREST TUTORIAL: PREDICTING GOALS IN SOCCER"를 읽고 작성한 글입니다. 축구에서 골이 나올 확률을 계산하고자 할때, 유용한 방법으로 Random Forest가 있다. Random Forest를 말하기 전에, 주어지는 데이터를 살펴보면 다음과 같다. 1. 슈팅한 위치와 골대와의 거리 2. 슈팅한 위치와 골대와의 각도 3. 공격팀의 수준 4. 수비팀의 수준 5. 슈팅하는 선수의 포지션(미드필더, 수비수, 공격수, 골키퍼 등..) 우리의 예측 모델은 위의 정보가 주어졌을 때 슈팅이 골로 연결되는지 안되는지 예측한다. Random Forest는 위에서 주어진 정보와 실제 골 여부를 바탕으로 여러 개의 Decision Tree를 실행한다. 각 Decisio..
단어에 사칙 연산을 할 수 있다면..? (feat. Word Embedding Model) 이 글은 "MAPPING GLOBAL CUISINE WITH WORD EMBEDDINGS"를 읽고 작성한 글입니다. 단어에 사칙 연산을 사용할 수 있다면 어떨까? 만약 번화가에서 팔고 있는 타르타르(Tartare)와 비슷한 일본 음식을 찾고 싶다면 우리는 아래와 같은 사칙 연산을 적용해 볼 수 있다. "Tartare" - "America" + "Japan" = ? 잘 훈련된 Word Embedding 모델을 사용하면 위의 결과로 "Sashimi"가 출력된다. 미국의 타르타르와 비슷한 일본 음식은 사시미인 것이다..! Word Embedding 모델은 단어들 사이의 추상적인 관계를 도출하는 도구로 사용될 수 있다. 내부 동작은 3단계로 이루어진다. Step 0. Window Size라고 불리는 목표 단어(..