일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 블로그
- MATLAB
- Ga
- 서평단
- python visualization
- 티스토리
- 파이썬
- 월간결산
- Python
- matplotlib
- 텐서플로
- 시각화
- Tistory
- 매틀랩
- 한빛미디어서평단
- Pandas
- 한빛미디어
- Linux
- SQL
- 독후감
- 서평
- Blog
- Visualization
- 파이썬 시각화
- 리눅스
- 통계학
- Google Analytics
- tensorflow
- 딥러닝
- MySQL
- Today
- Total
pbj0812의 코딩 일기
[kaggle] titanic 문제 풀기 본문
0. 목표
- titanic
- 데이터 설명
1. 실습
1) 라이브러리 호출
- 결과 : ['test.csv', 'train.csv']
import numpy as np
import pandas as pd
import os
print(os.listdir("../input"))
2) 파일 읽기
train_df = pd.read_csv('../input/train.csv')
test_df = pd.read_csv('../input/test.csv')
3) 데이터 확인
(1) train_df
train_df.head()
(2) test_df
- train에서 Survived만 제외된 형태
test_df.head()
4) 자료구조 확인
- 12개 칼럼, 891개 데이터로 이루어져 있으며 Age와 Cabin, Embarked는 결측치가 존재
train_df.info()
5) 기술통계
- 문자 데이터는 대상에서 제외
train_df.describe()
6) 각 칼럼과 생존간의 관계 파악
(1) Pclass(좌석 등급)
- train_df의 Pclass와 Survived를 뽑은뒤 Pclass를 중심으로 묶고, Survived의 평균값을 구하여라.
- 뭔가 관계가 있어 보임.
train_df[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)
(2) Sex(성별)
- 관계가 있어보임
train_df[["Sex", "Survived"]].groupby(['Sex'], as_index=False).mean().sort_values(by='Survived', ascending=False)
(3) SibSp(형제, 배우자)
- 애매함
train_df[["SibSp", "Survived"]].groupby(['SibSp'], as_index=False).mean().sort_values(by='Survived', ascending=False)
(4) Parch(부모, 자식)
- 없음
train_df[["Parch", "Survived"]].groupby(['Parch'], as_index=False).mean().sort_values(by='Survived', ascending=False)
(5) Age(나이)
- 생존 및 희생자의 분포가 유사하므로 나이가 크게 영향을 미친다고는 볼 수 없음.
import seaborn as sns
import matplotlib.pyplot as plt
g = sns.FacetGrid(train_df, col='Survived')
g.map(plt.hist, 'Age', bins=20)
- Pclass에 따른 나이대별 생존유무
grid = sns.FacetGrid(train_df, col='Survived', row='Pclass', size=2.2, aspect=1.6)
grid.map(plt.hist, 'Age', alpha=.5, bins=20)
7) 필요없는 필드 삭제
train_df = train_df.drop(['Ticket', 'Cabin', 'Name', 'Parch', 'SibSp', 'Embarked', 'Fare', 'PassengerId'], axis=1)
test_df = test_df.drop(['Ticket', 'Cabin', 'Name', 'Parch', 'SibSp', 'Embarked', 'Fare'], axis=1)
8) train_df, test_df 결합
- 데이터 조작을 빠르게(동시에) 하기 위한 결합
- 결합 형태는 list 형태이며, 각 요소 combine[0], combine[1]은 dataframe 형태
combine = [train_df, test_df]
9) 성별 인코딩
for dataset in combine:
dataset['Sex'] = dataset['Sex'].map( {'female': 1, 'male': 0} ).astype(int)
train_df.head()
10) 나이 분류
for dataset in combine:
dataset.loc[ dataset['Age'] <= 16, 'Age'] = 0
dataset.loc[(dataset['Age'] > 16) & (dataset['Age'] <= 32), 'Age'] = 1
dataset.loc[(dataset['Age'] > 32) & (dataset['Age'] <= 48), 'Age'] = 2
dataset.loc[(dataset['Age'] > 48) & (dataset['Age'] <= 64), 'Age'] = 3
dataset.loc[ dataset['Age'] > 64, 'Age']
train_df.head()
11) 결측값 채우기(나이)
- 클래스 마다의 나이의 median 값으로 결측값 채우기
for dataset in combine:
dataset["Age"] = dataset.groupby(dataset.Pclass).Age.transform(lambda x: x.fillna(x.median()))
12) 학습, 테스트 데이터 분류
X_train = train_df.drop(["Survived"], axis=1)
Y_train = train_df["Survived"]
X_test = test_df.copy().drop("PassengerId", axis=1)
13) 머신러닝 라이브러리 호출
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC, LinearSVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import Perceptron
from sklearn.linear_model import SGDClassifier
from sklearn.tree import DecisionTreeClassifier
14) 모델 사용
(1) Logistic Regression
logreg = LogisticRegression()
logreg.fit(X_train, Y_train)
Y_pred = logreg.predict(X_test)
acc_log = round(logreg.score(X_train, Y_train) * 100, 2)
(2) Support Vector Machines
svc = SVC()
svc.fit(X_train, Y_train)
Y_pred = svc.predict(X_test)
acc_svc = round(svc.score(X_train, Y_train) * 100, 2)
(3) KNN
knn = KNeighborsClassifier(n_neighbors = 3)
knn.fit(X_train, Y_train)
Y_pred = knn.predict(X_test)
acc_knn = round(knn.score(X_train, Y_train) * 100, 2)
(4) Gaussian Naive Bayes
gaussian = GaussianNB()
gaussian.fit(X_train, Y_train)
Y_pred = gaussian.predict(X_test)
acc_gaussian = round(gaussian.score(X_train, Y_train) * 100, 2)
(5) Perceptron
perceptron = Perceptron()
perceptron.fit(X_train, Y_train)
Y_pred = perceptron.predict(X_test)
acc_perceptron = round(perceptron.score(X_train, Y_train) * 100, 2)
(6) Linear SVC
linear_svc = LinearSVC()
linear_svc.fit(X_train, Y_train)
Y_pred = linear_svc.predict(X_test)
acc_linear_svc = round(linear_svc.score(X_train, Y_train) * 100, 2)
(7) Stochastic Gradient Descent
sgd = SGDClassifier()
sgd.fit(X_train, Y_train)
Y_pred = sgd.predict(X_test)
acc_sgd = round(sgd.score(X_train, Y_train) * 100, 2)
(8) Decision Tree
decision_tree = DecisionTreeClassifier()
decision_tree.fit(X_train, Y_train)
Y_pred = decision_tree.predict(X_test)
acc_decision_tree = round(decision_tree.score(X_train, Y_train) * 100, 2)
(9) Random Forest
random_forest = RandomForestClassifier(n_estimators=100)
random_forest.fit(X_train, Y_train)
Y_pred = random_forest.predict(X_test)
random_forest.score(X_train, Y_train)
acc_random_forest = round(random_forest.score(X_train, Y_train) * 100, 2)
15) 모델 비교
models = pd.DataFrame({
'Model': ['Support Vector Machines', 'KNN', 'Logistic Regression',
'Random Forest', 'Naive Bayes', 'Perceptron',
'Stochastic Gradient Decent', 'Linear SVC',
'Decision Tree'],
'Score': [acc_svc, acc_knn, acc_log,
acc_random_forest, acc_gaussian, acc_perceptron,
acc_sgd, acc_linear_svc, acc_decision_tree]})
models.sort_values(by='Score', ascending=False)
15) 결과 저장(제출 파일 작성)
- Random Forest 결과
submission = pd.DataFrame({
"PassengerId": test_df["PassengerId"],
"Survived": Y_pred
})
submission.to_csv('./submission.csv', index=False)
2. 참고
- 캐글(타이타닉)
- 결측값 처리
'인공지능 & 머신러닝 > kaggle' 카테고리의 다른 글
[kaggle] pandas 수료과정 (0) | 2021.04.18 |
---|---|
[kaggle] Advanced SQL 수료과정 (0) | 2021.04.16 |
[kaggle] Intro to SQL 수료과정 (0) | 2021.04.14 |
[kaggle] Intermediate Machine Learning 수료 과정 (0) | 2021.04.13 |
[kaggle] Intro to Machine Learning 수료 과정 (0) | 2021.04.04 |