본문 바로가기
etc./info

[kaggle] Titanic: Machine Learning from Disaster

by moonsiri 2020. 10. 8.
728x90
반응형

https://www.kaggle.com/c/titanic/

 

train data로 학습시키고 test data로 예측

train:test = 7:3

 

1. Data Loading (Train, Test)

2. Data cleanig (Tidy Data) : 데이터 정돈

3. Feature Engineering

4. Model(Algorithm) 선정 및 hyperparameter setting

5. fit(), predict()

 

hyperparameter setting 은 답이 없다 해봐야한다. 보통 max_depth = 10~20가 적당하다.

 

 

test.csv 와 train.csv 의 차이점은 test data는 label이 없다.

titanic data에서는 Survived 을 예측한다.

 

pre-processing (feature enginering)

 

Encode Embarked (one hot encoding) - 서로 독립적인 코드로 변경

C = [1, 0, 0] = [True, False, False]

S = [0, 1, 0] = [False, True, False]

Q = [0, 0, 1] = [False, False, True]

 

(one hot encoding 이 효율이 안좋을때도 있다. 알 수 없다.)

 

변수가 적으면 오버피팅 (Overfitting)이 일어날 수 있다.

 

 

트리구조형태의 학습 방식이 유행중이다.

scikit-learn == sklearn

 

부스팅방식을 사용한 트리 알고리즘

 

 

어떤 알고리즘이든 학습할때 시간이 오래걸리지 예측(predictions)은 빠르다.

 

s = pd.Series(['a', 'a', 'b', 'c', np.NaN])

s.count() # 4

len(s) # 5

s.unique() # array(['a', 'b', 'c', nan], dtype=object)

s.nunique() # 3

s.nunique(dropna=False) # 4

s.value_counts(dropna=False)

 a      2

 b      1

 c      1

 NaN    1

 dtype: int64



pd.Series([1, 2, 3, 4]).cumprod() # 누적 곱

 0     1

 1     2

 2     6

 3    24

 dtype: int64

pd.Series([1, 2, 3, 4]).cumsum() # 누적 합

 0     1

 1     3

 2     6

 3    10

 dtype: int64



# correlation of MSFT relative to AAPL

omh['MSFT'].corr(omh['AAPL'])





! head ... # 운영체제의 shell 명령어





# specify a new set of names for the columns

# all lower case, remove space in Adj Close

# also, header=0 skips the header row

df = pd.read_csv("../data/msft.csv", 

                 header=0, # header는 첫번째 줄

                 names=['date', 'open', 'high', 'low', 'close', 'volume']) # header 이름 지정



# read in data only in the Date and Close columns

# and index by the Date column

df2 = pd.read_csv("../data/msft.csv", 

                  usecols=['Date', 'Close'], # Date, Close column만 사용

                  index_col=['Date'])



# save df2 to a new csv file

# also specify naming the index as date

df2.to_csv("msft_modified.csv", index_label='date')



# use read_table with sep=',' to read a CSV

df = pd.read_table("../data/msft.csv", sep=',')

df[:5]





## Reading and writing from/to SQL databases



# connect to the database file

connection = sqlite3.connect("../data/stocks.sqlite")



# query all records in STOCK_DATA

# returns a DataFrame

# inde_col specifies which column to make the DataFrame index

stocks = pd.io.sql.read_sql("SELECT * FROM STOCK_DATA;", 

                             connection, index_col='index')



# close the connection

connection.close()



# report the head of the data retrieved

stocks[:5]







train.loc[(train['Age'].isnull()) & (train['Pclass'] == 1), 'Age'] = train.loc[train['Pclass'] == 1].mean()





# 객실 등급(Pclass)이 1등급인 승객의 평균 나이를 구해서, 해당 승객 중 나이(Age)컬럼값이 비어있는 승객을 찾아 빈 나이 값을 채워준다.

train.loc[(train['Age'].isnull()) & (train['Pclass'] == 1), 'Age'] = train.loc[(train['Pclass'] == 1), 'Age'].mean()

train.loc[(train['Age'].isnull()) & (train['Pclass'] == 2), 'Age'] = train.loc[(train['Pclass'] == 2), 'Age'].mean()

train.loc[(train['Age'].isnull()) & (train['Pclass'] == 3), 'Age'] = train.loc[(train['Pclass'] == 3), 'Age'].mean()



train[["Pclass","Age"]].head()







def check_health(element):

    if element > 60:

        return '비만'

    else:

        return '정상'

    

x.apply(check_health)

 

 

728x90
반응형

댓글